XMLHttpRequest访问控制在url未完成时允许Origin

时间:2012-10-15 18:32:44

标签: php ajax http

有时当我提交ajax请求时,我会收到此错误

XMLHttpRequest cannot load http://www.mysite.com/go/submit. Origin http://mysite.com is not allowed by Access-Control-Allow-Origin.

以下是我想到的解决方案:

* Add the allow origin rule everywhere?
* Write .htaccess to always redirect to full url
* Use this method http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

same origin policy表示您无法分析来自其他“来源”(域,端口)的数据(json,html,图像等)。

请注意

  

术语“origin”是使用域名,应用程序层定义的   协议,以及(在大多数浏览器中)HTML文档的端口号   运行脚本

解决方案是在服务于其他数据的服务器上设置CORS headers明确允许访问:

Access-Control-Allow-Origin: *

因此,只要您不是仅仅显示它们,就必须控制服务于您所嵌入数据的服务器。

有点间接的解决方案是让浏览器认为只有一个来源,通过在服务器上放置一个代理。在apache上你不需要.htaccess但是mod_proxy。如果你想安装这样的代理,你可能会对this SO question感兴趣(实际上你可能对我帮助我在我的一台服务器上设置这样一个代理的答案更感兴趣。)

如果你唯一的问题是人们输入mysite.com而不是www.mysite.com并且你只有一台服务器,你可以简单地使用.htaccess来重写网址:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]