经典“来源......不允许Access-Control-Allow-Origin”问题。两台机器为同一网站提供内容。当机器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 :(得分:4)
在响应中启用 Access-Control-Allow-Origin 标头是不够的。服务器端实现应该为pre-flight OPTIONS request提供正确的处理。特别是,必须在OPTIONS响应中设置以下HTTP标头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
如果在您的环境中使用非标准HTTP标头,则OPTIONS响应中可能还需要其他HTTP标头,例如 Access-Control-Allow-Headers 。
请注意, Access-Control-Allow-Origin:* HTTP标头也必须在以下GET& POST回复。