jQuery CORS Inhaltstyp OPTIONEN

Lesezeit: 3 Minuten

Ich habe ein Problem mit dem Senden einer AJAX-Textanforderung mit jQuery CORS mit benutzerdefiniertem Inhaltstyp. Hier ist mein Code:

$.ajax({
  url: "http://some-other-domain/my-path",
  type: "POST",
  contentType: "application/json",
  dataType: "json",
  data: JSON.stringify({
    key: 1,
    key2: 2
  }),
  statusCode: {
    200: function(data) {
    }
  },
  xhrFields: {
    withCredentials: true
  },
  crossDomain: true
});

Ich muss den Inhaltstyp als “application/json” festlegen, da dies serverseitig erforderlich ist. Aber anstatt die Anfrage als POST zu senden, sendet jQuery sie als OPTIONS.

Hier ist eine Kopfzeile:

Antwort-Header:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 03:00:00 EET
Set-Cookie: JSESSIONID=BB9D6783E58FB0F2ADE1924A2F0CBA52; Path=/
Content-Type: text/html;charset=UTF-8
Content-Length: 6233
Date: Fri, 07 Sep 2012 14:41:13 GMT

Anfrage-Header:

OPTIONS /my-path HTTP/1.1
Host: MY-HOME-NAME
User-Agent: MY_USER_AGEMT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: HERE-GOES-DOMAIN
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

CORS funktioniert hervorragend, alle erforderlichen Header werden vom Server gesendet, aber nicht, wenn es vom Typ OPTIONS gesendet wird. Ist es ein jQuery-Problem?

jQuery-1.8.1

jQuery CORS Inhaltstyp OPTIONEN
Monsur

Diese OPTIONS-Anfrage ist die CORS-Preflight-Anfrage. Es ist eine Anfrage, die vor der eigentlichen Anfrage an den Server gesendet wird, um die Erlaubnis zum Stellen der Anfrage zu erfragen. Der benutzerdefinierte Inhaltstyp löst tatsächlich den Preflight aus. Gemäß der CORS-Spezifikation (http://www.w3.org/TR/cors/), jeder Inhaltstyp andere als application/x-www-form-urlencoded, multipart/form-data oder text/plain den Preflight auslöst.

Wenn Sie keine Kontrolle über den Remoteserver haben, müssen Sie ihn entweder bitten, den CORS-Preflight zu unterstützen, oder eine andere Option wie JSON-P ausprobieren.

Wenn Sie die Kontrolle über den Remote-Server haben, können Sie ihn so ändern, dass er Preflights verarbeitet. Um eine Preflight-Anfrage zu bearbeiten, sollten Sie die folgenden Header in der Antwort auf die OPTIONS-Anfrage senden:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type

Die Antwort sollte ein HTTP 200 sein Access-Control-Allow-Methods Response Header kann entweder den Wert von echoen Access-Control-Request-Methododer es kann einfach sein GET, POST, PUT, DELETE alle Methoden zu unterstützen. Der Access-Control-Allow-Headers Der Antwortheader sollte die Werte in widerspiegeln Access-Control-Request-Headers Anforderungsheader.

Sobald der Browser diese Header empfängt, stellt er die eigentliche Anfrage. Hier erfahren Sie mehr über CORS-Preflight-Anfragen:

http://www.html5rocks.com/en/tutorials/cors/

  • Sie. Gibt. A. Gottesgeschenk. Das Allow-Headers-Problem hat mich erwischt. Aber mehr als der Code, den Sie gepostet haben, hat Ihre Erklärung dazu beigetragen, die Glühbirne zu entzünden, um mir dabei zu helfen, herauszufinden, wie ich alles zum Laufen bringen kann. Danke!

    – Appsecguy

    12. Juni 13 um 20:30 Uhr

  • Es funktioniert bei mir nicht :/ Ich mache es genau so in einem Servlet-Filter

    – Adnane.T

    4. April 14 um 1:10 Uhr

  • @monsur, Übrigens, was genau hat dich an CORS so interessiert, dass du ein Buch darüber geschrieben hast? (Das einzige Buch über CORS in der ganze Welt.)

    – Schrittmacher

    26. Januar 16 um 5:57 Uhr


  • Sollte nicht OPTIONS Rückkehr a 204 No Content Antwort?

    – Emil Bergeron

    18. Oktober 16 um 15:51 Uhr

  • Wenn Ihr Server ist Python Flask App, dann können Sie einfach zurückkehren app.make_default_options_response() auf der OPTIONS Methode

    – Jana

    23. März 17 um 22:56 Uhr

.

759070cookie-checkjQuery CORS Inhaltstyp OPTIONEN

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy