【问题标题】:XMLHttpRequest Access Control Allow Origin when url is not complete当 url 不完整时,XMLHttpRequest 访问控制允许来源
【发布时间】:2012-10-05 19:01:04
【问题描述】:

有时当我提交 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/

我应该如何解决这个问题?

【问题讨论】:

    标签: php ajax http


    【解决方案1】:

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

    注意

    “起源”一词是使用域名、应用层定义的 协议和(在大多数浏览器中)HTML 文档的端口号 运行脚本

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

    Access-Control-Allow-Origin: *
    

    因此,您必须控制为您嵌入的数据提供服务的服务器,而不仅仅是显示它们。

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

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

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

    【讨论】:

    • 但是为什么要考虑mysite.com/go/submit。与mysite.com不同的域
    • www.mysite.com 可能与 mysite.com 不是同一主机。如果是同一台机器,可以通过修复链接解决问题。
    • 我的问题是它是主页,所以有时人们为了快捷方式只需输入 url mysite.com 而不是完整的 url,如果他们点击网站上的任何其他链接,他们将获得完整的 url但是当他们输入第一页时我不控制它。
    • 我应该只做 header('Access-Control-Allow-Origin: *mysite.com');
    • 是的,您可以添加此标头。但是,如果问题只是人们忘记了“www”,请查看编辑:您可以重写 url。两种解决方案都有效。
    猜你喜欢
    • 2016-12-05
    • 2018-07-27
    • 2017-02-11
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多