【问题标题】:Cross-Domain AJAX REST service HTTP Headers跨域 AJAX REST 服务 HTTP 标头
【发布时间】:2012-01-30 13:53:53
【问题描述】:

我正在调查跨域问题,我有一些 REST 服务调用。 铬是这样说的: Access-Control-Allow-Headers 不允许请求标头字段 x-requested-with 这是我从 Network -> Headers 选项卡得到的:

Request URL: rest_url_on_other_domain
Request Method:OPTIONS
Status Code:200 OK
Request Headers:
Access-Control-Request-Headers:Origin, x-requested-with, content-type, accept
Access-Control-Request-Method:POST
Origin:http://localhost:8080

Response Headers
Access-Control-Allow-Headers:Content-Type, Accept
Access-Control-Allow-Methods:GET, POST
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Cache-Control:no-cache, no-store
Connection:keep-alive
Content-Length:0
Date:Fri, 30 Dec 2011 11:29:12 GMT
Expires:-1
Pragma:no-cache
Server:nginx/1.0.2

有人可以解释一下这个 HTTP 标头吗?有什么问题 - 服务器上的某些标头检查失败或客户端(浏览器)上的某些标头检查失败。关于这个 Access 标头的想法是什么?用简单的话详细解释只是为了感觉其余的我会自己学习。提前致谢!

【问题讨论】:

    标签: jquery ajax http-headers cross-domain


    【解决方案1】:

    您看到的是跨域资源共享预检请求。此类请求的请求方法为OPTIONS。这是浏览器用来请求权限以发送实际请求的请求。你可以在这里了解更多:http://www.html5rocks.com/en/tutorials/cors/

    在这种特殊情况下,浏览器要求一堆标头(在 Access-Control-Request-Headers 标头中)。现在,作为响应,Access-Control-Allow-Headers 标头应该包含所有请求的标头。如果有多个请求的标头,浏览器将不会抛出任何异常。在此示例中,您的响应标头应如下所示:

    Access-Control-Allow-Headers: Origin, x-requested-with, content-type, accept
    

    所有其他响应标头看起来都不错。一旦服务器发送此响应,浏览器将发送第二个请求,这是对数据的实际请求。

    【讨论】:

    • 但是预检请求的想法是什么 - 他将从这些标头中获得什么信息。对话是否像:预检请求(Origin Header-“您支持哪些域”,x-requested-with-“您支持 XMLHttpRequests 吗?”,...)以及当它们在预检响应中重复时,表示“是“对他们所有人来说,否则有这样的类比是不好的。以及当浏览器发送真正的请求时——满足哪些条件(mb 简单示例)。谢谢!
    • 预检是浏览器在问:“嗨服务器!我在这里有一个请求,它来自这个域,它使用这个 http 方法,它有这些请求标头。如果我发送它会不会很酷实际要求?”然后,服务器通过发回 Access-Control-Allow-* 标头来确认预检请求。它使用这些标头而不是简单的 OK 的原因是可以在第一个请求之后缓存预检响应。这样就不必对每个请求进行预检,从而节省带宽。
    • 非常感谢您的详细解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多