XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用Origin null


满目山河
2025-03-10 08:53:11 (5天前)
  1. 。原则为null不允许


访问
</跨度>


  • 控制
    </跨度>
    -ALLOW原产地。

如果我直接从浏览器查询该URL,它可以正常工作。发生了什么,我可以解决这个问题吗?我错误地编写了我的查询… Chrome的控制台:

XMLHttpRequest无法加载http://www.panoramio.com/wapi/

数据
</跨度>
/ get_photos?v = 1&amp; key = dummykey&amp; tag = test&amp; offset = 0&amp; length = 20&amp; callback = processImages&amp; minx = -30&amp; miny = 0&amp; maxx = 0&amp; maxy = 150 …

11 条回复
  1. 0# 無口君 | 2019-08-31 10-32



    就是这样

    同源政策

    ,您必须使用JSON-P接口或在同一主机上运行的代理。


  2. 1# 机器设备维修 | 2019-08-31 10-32



    如果您正在进行本地测试或从类似的东西调用该文件

    file://

    那么你需要禁用浏览器安全性。



    在MAC上:

    1. <code>
    2. open -a Google\ Chrome --args --disable-web-security
    3. </code>


  3. 2# 绵绵 | 2019-08-31 10-32



    我使用Apache服务器,所以我使用了mod_proxy模块。启用模块:




    1. LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so

    2. </code>


    然后加:




    1. ProxyPass /your-proxy-url/ http://service-url:serviceport/

    2. </code>


    最后,将proxy-url传递给您的脚本。


  4. 3# 樱花弄๑•ั็•็ | 2019-08-31 10-32



    我在Chrome中也遇到了同样的错误(我没有测试其他浏览器)。这是因为我在domain.com而不是www.domain.com上导航。有点奇怪,但我可以通过在.htaccess中添加以下行来解决问题。它将domain.com重定向到www.domain.com,问题解决了。我是一个懒惰的网络访问者,所以我几乎从不输入www,但显然在某些情况下它是必需的。




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

    2. </code>

  5. 4# 子阳 | 2019-08-31 10-32



    就我而言,相同的代码在Firefox上运行良好,但在Google Chrome上运行不正常。谷歌Chrome的JavaScript控制台说:




    1. XMLHttpRequest cannot load http://www.xyz.com/getZipInfo.php?zip=11234.
      Origin http://xyz.com is not allowed by Access-Control-Allow-Origin.
      Refused to get unsafe header X-JSON

    2. </code>


    我不得不删除Ajax URL的www部分,以便与原始URL正确匹配,然后就可以了。


  6. 5# 哎?小查查 | 2019-08-31 10-32



    最后注意到了

    Mozilla文档明确指出





    如果标头被通配为以下示例,则上述示例将失败:

    1. 的<strong>
    2. Access-Control-Allow-Origin:*。
    3. </强>
    4. 由于Access-Control-Allow-Origin明确提到
    5. <a href="http://foo.example" rel="nofollow">
    6. HTTP//foo.example
    7. </A>

    凭证识别内容返回到调用Web
    内容。




    因此,使用’*’不仅仅是一种不好的做法。根本行不通:)


  7. 6# 冷月如霜·胡狼 | 2019-08-31 10-32



    发布的解决方案存在一个小问题

    通过上面的CodeGroover

    ,如果你更改文件,你将不得不重新启动服务器以实际使用更新的文件(至少,在我的情况下)。



    我找到了,所以搜索了一下

    这个

    使用:




    1. sudo npm -g install simple-http-server # to install
      nserver # to use

    2. </code>


    然后它将服务于

    http://localhost:8000



  8. 7# 一瓶泡沫 | 2019-08-31 10-32



    并非所有服务器都支持jsonp。它要求服务器在其结果中设置回调函数。我使用它来从返回纯json但不支持jsonp的站点获取json响应:




    1. function AjaxFeed(){

    2. return $.ajax({
    3.     url:            'http://somesite.com/somejsonfile.php',
    4.     data:           {something: true},
    5.     dataType:       'jsonp',
    6.     /* Very important */
    7.     contentType:    'application/json',
    8. });
    9. }

    10. function GetData() {
      AjaxFeed()

    11. /* Everything worked okay. Hooray */
    12. .done(function(data){
    13.     return data;
    14. })
    15. /* Okay jQuery is stupid manually fix things */
    16. .fail(function(jqXHR) {
    17.     /* Build HTML and update */
    18.     var data = jQuery.parseJSON(jqXHR.responseText);
    19.     return data;
    20. });
    21. }

    22. </code>

  9. 8# 至此 | 2019-08-31 10-32



    确保您使用的是最新版本的JQuery。我们在JQuery 1.10.2中遇到了这个错误,使用JQuery 1.11.1后错误得到了解决


  10. 9# trpnest | 2019-08-31 10-32



    伙计们,



    我遇到了类似的问题。但是使用Fiddler,我能够解决这个问题。问题是在Web API端的CORS实现中配置的客户端URL不能具有尾随正斜杠。通过谷歌浏览器提交您的请求并检查后

    的TextView
    </强>
    选项卡


    </强>
    Fiddler的一节,错误消息说明如下:



    *“指定的策略来源your_client_url:/‘无效。

    它不能以正斜杠结束。“
    </强>



    这真是古怪,因为它在Internet Explorer上没有任何问题,但在使用Google Chrome进行测试时让我头疼。



    我删除了CORS代码中的正斜杠并重新编译了Web API,现在可以通过Chrome和Internet Explorer访问API而不会出现任何问题。请试一试。



    谢谢,
    安迪


登录 后才能参与评论