【问题标题】:No Access Control Allow Origin, Origin NullNo Access Control Allow Origin, Origin Null
【发布时间】:2017-12-29 09:59:36
【问题描述】:

以下使用 jQuery post 函数将表单提交到 php 页面,然后在同一 html 页面上为用户打印响应。该代码在 Microsoft Edge 浏览器上完美运行__ 它发布然后打印来自 php 页面的响应,但在我尝试过的任何其他浏览器(如 Firefox 5.0、IE11 和 Chrome)上都不起作用。但是,我在 Chrome 上检查并看到以下错误:“XMLHttp request cannot load localhost/products/s1.php No 'access-control-allow-origin' header is present on the requested source. Origin 'null' is not allowed使用权”。请问我该如何解决这个问题。任何帮助将不胜感激。 可以在下图中找到来自 chrome 的错误: Error from chrome

这是 Microsoft Edge 的成功案例: Microsoft Edge success

【问题讨论】:

    标签: php jquery google-chrome


    【解决方案1】:

    发生这种情况是因为其他浏览器(不是 Edge)认为您正在尝试向与页面所在域不同的主机(域)发出 Ajax 请求。作为一项安全措施,浏览器将首先询问服务器此请求是否可接受。除非服务器配置为批准请求,否则浏览器永远不会真正发送请求。此安全功能称为Same Origin Policy

    让我们先看看一个简单的修复是否足够:在您的 Ajax 请求中,尝试将 url 从 localhost/products/s1.php 更改为 /products/s1.php

    【讨论】:

    • 我更改了它,仍然看到以下错误 XML Parsing Error: mismatched tag。预期:。位置:file:///C:/xampp/htdocs/products/s11.php 第 13 行,第 4 列:
    • 解析错误与您最初报告的错误不同。您最初的错误是“没有 'access-control-allow-origin' 标头存在”。如果我帮助您克服了该错误,请选择答案。对于您的新错误,请尝试自行解决;如果您无法打开新问题。
    • 前者来自 Chrome,后者来自 Firefox,并且在应用更改之前和应用更改之后都存在捕获的错误。应用更改后 Chrome Chrome 错误没有改变,Microsoft Edge 仍然可以很好地加载响应。我还没有摆脱错误。但我非常感谢@Beetle Juice。
    • 请@Beetle Juice再提供帮助,因为这在Edge上运行良好,如果我将此文件部署到生产服务器,远程服务器会解决这个问题,它会识别它不是跨站点请求吗
    【解决方案2】:

    将其放在提交请求的 php 文件的顶部解决了我的问题:

    见下文:

    header("Access-Control-Allow-Origin:*");
    header("Access-Control-Allow-Credentials:true");
    header("Access-Control-Max-Age: 100000");
    header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
    header("Access-Control-Allow-Methods: PUT, POST, GET, OPTIONS, DELETE");

    但是,您可能不需要在生产环境中使用它,除非您确定您真的打算允许 cors。

    【讨论】:

      猜你喜欢
      • 2012-06-07
      相关资源
      最近更新 更多