2012-02-27 42 views
4

经典“原因...不被访问控制允许来源”问题。两台机器为同一网站提供内容。当机器A通​​过jquery执行$('#main').load('link_to_resource_on_B')时,机器B用mod_python提供内容,并添加Access-Control-Allow-Origin: *标题。但由于某种原因,这仍然不起作用。我在Chrome,Safari和Internet Explorer上测试了这一点。我通过命令行来检查响应头,看起来Access-Control-Allow-Origin: *已成功地从B头看到。我可能会错过什么?访问控制允许来源:*不工作?

$ telnet localhost 80 
Trying ::1... 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET /tests/python/test/env HTTP/1.1 
host: 10.0.1.10 

HTTP/1.1 200 OK 
Date: Mon, 27 Feb 2012 02:05:33 GMT 
Server: Apache/2.2.20 (Ubuntu) 
Access-Control-Allow-Origin: * 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 
Content-Type: text/html 
+0

是否有客户端设置的任何自定义标头?自定义标头(或非GET HTTP方法)可能触发预检请求,这需要额外的处理。 – monsur 2012-02-27 17:36:36

+0

感谢您的提示,@monsur。你是对的,这是OPTION标题,并没有像处理它那样处理。一些研究也告诉我,我的jquery太旧了。较新的jQuery(自1.5.2开始)故意避免使用客户头。所以归结起来,我升级了我的jquery,而我的头痛消失了。 对于那些遭受同样症状的人来说,这个链接为我提供了启蒙的后半部分。 [http://remysharp.com/2011/04/21/getting-cors-working/](http://remysharp.com/2011/04/21/getting-cors-working/) – user1170717 2012-02-28 07:19:39

+0

@ josh3736,谢谢帮助我格式化我的第一篇文章。那是我的第一篇文章。下一次会知道该怎么做。 – user1170717 2012-02-28 07:26:12

回答

4

启用访问控制允许来源在响应标题是不够的。服务器端实施应该为pre-flight OPTIONS request提供适当的处理。

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST 

其他HTTP头如接入控制允许集管可能也需要在壳体非标准HTTP标头OPTIONS响应中被使用:具体地讲,下面的HTTP标头必须在OPTIONS响应被设置你的环境。

请记住,访问控制允许来源:* HTTP标头还必须设置在以下GET & POST响应中。

相关问题