是否有可能使application / json的跨域POST ajax请求?

我正在测试一些csrf的东西,我想知道是否可以使用Content-Type: application/json POST一个跨域的ajax请求Content-Type: application/json

每次我尝试用jQuery做这个:

  $.ajax({ type: "post", url: "http://someotherdomain.com/endpoint", contentType: "application/json; charset=UTF-8", data: {"a": "1"}, dataType: "json", crossDomain: true, success: function(data){ alert(data); }, failure: function(data){ alert(data); } }); 

我总是发送HTTP OPTIONS请求而不是HTTP POST

注意 – 我不关心接收数据,我只需要一个单向post。

请注意,内容类型不能是x-www-form-urlencoded ,也不能是GET请求。

Content-Type: application/json标头不是简单的标头,因此首先需要在实际请求之前进行预检请求。 您看到的HTTP OPTIONS请求是预检请求。 来自CORS规范(http://www.w3.org/TR/cors/):

如果头字段名称是Accept,Accept-Language或Content-Language的ASCII不区分大小写匹配,或者如果它是Content-Type和标题的ASCII不区分大小写匹配,则称头是简单头字段值媒体类型(不包括参数)是对application / x-www-form-urlencoded,multipart / form-data或text / plain的ASCII不区分大小写的匹配。

为了通过预检请求,服务器需要使用以下标头响应OPTIONS请求:

 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,PUT,POST,DELETE Access-Control-Allow-Headers: Content-Type 

一旦浏览器收到此响应,它将发出实际的HTTP POST请求。 请注意,如果您的请求包含其他自定义标头,则需要将它们包含在Access-Control-Allow-Headers响应标头中。 您可以在此处了解有关CORS预检请求的更多信息:

http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

如果您的浏览器支持所谓的跨源资源共享( CORS ),并且所有现代浏览器都可以支持此function。 简而言之,服务器应该为您提供Access-Control-Allow-Origin标头。

另外,正如你所说的那样,你并不打算把任何信息作为回应,你为什么不提交一些表格呢?