jQuery CORS内容类型选项

Ale*_*yuv 51 ajax jquery cors

我有使用jQuery CORS和自定义Content-type发送AJAX正文请求的问题.这是我的代码:

$.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
});
Run Code Online (Sandbox Code Playgroud)

我需要将Content-type设置为"application/json",因为它需要服务器端.但不是发送请求作为POST jQuery发送它作为OPTIONS.

这是一个标题:

响应标题:

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
Run Code Online (Sandbox Code Playgroud)

请求标题:

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
Run Code Online (Sandbox Code Playgroud)

CORS工作得很好,所有必需的头都是由服务器发送的,但是如果它是通过OPTIONS类型发送则不会.是jQuery问题吗?

jQuery - 1.8.1

mon*_*sur 134

此OPTIONS请求是CORS预检请求.它是在实际请求之前发送到服务器的请求,以请求权限发出请求.自定义Content-Type实际上是触发预检.根据CORS规范(http://www.w3.org/TR/cors/),任何内容类型其他比应用程序/ x-WWW窗体-urlencoded,多部分/格式数据,或文本/无格式触发预检.

如果您无法控制远程服务器,那么您需要要求它们支持CORS预检,或者尝试其他选项,例如JSON-P.

如果您可以控制远程服务器,则可以将其更改为处理预检.为了处理预检请求,您应该在对OPTIONS请求的响应中发送以下标头:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type
Run Code Online (Sandbox Code Playgroud)

响应应该是HTTP 200. Access-Control-Allow-Methods响应头可以回显值Access-Control-Request-Method,也可以只GET, POST, PUT, DELETE支持所有方法.的Access-Control-Allow-Headers响应报头应在呼应值Access-Control-Request-Headers请求头.

一旦浏览器收到这些标题,它就会发出实际请求.您可以在此处了解有关CORS预检请求的更多信息:

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

  • 您.是.A.天赐.Allow-Headers问题是我的原因.但不仅仅是你发布的代码,你的解释有助于激发灯泡,帮助我弄清楚如何使一切正常运转.谢谢! (4认同)
  • 它对我不起作用:/我只是在servlet过滤器中这样做 (2认同)