【问题标题】:Access-Control-Allow-Origin header MissingAccess-Control-Allow-Origin 标头丢失
【发布时间】:2018-10-20 08:51:05
【问题描述】:

我已将此 javascript 包含在其他域中:

var id = "<?php echo check_input($_GET['token']); ?>";
    var querystring = "";
    var lockerurl = "https:\/\/www.example.com\/contentlocker\/getlocker.php?" + 'id=' + encodeURIComponent(id) + '&r=' + encodeURIComponent(referrer) + querystring;


    var iframecontents;
    var old_display;

    function optionstoquery(options) {

        var query = "";

        if (options.mt) query += "&mt=" + encodeURIComponent(options.mt);
        if (options.dt) query += "&dt=" + encodeURIComponent(options.dt);
        if (options.dd) query += "&dd=" + encodeURIComponent(options.dd);
        if (options.md) query += "&md=" + encodeURIComponent(options.md);

        return query;

    }

    function og_load(options) {

        if (options) lockerurl += optionstoquery(options);

                        //preload
            var xhr = new XMLHttpRequest();
            xhr.open('GET', lockerurl, true);
            xhr.onreadystatechange = function() {
                if (this.readyState!==4) return;
                if (this.status!==200) {
                    iframecontents = false;
                    return;
                }

                iframecontents = this.responseText;
            };
            xhr.send();

            ogEditBody();
                }

控制台显示给我:

跨域请求被阻止:同源策略不允许读取 远程资源在 https://www.example.com/contentlocker/getlocker.php?id=3e066b64a78214a17620b5521b6d3ec4&r=aHR0cDovL2NwYWh1Yi51cy9yb29zdGVyMi5odG1s。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。

getlocker.php 包含一些 php 和 html 代码!

我使用 Plesk 作为网络服务器,并尝试通过添加 getlocker.php:

header('Access-Control-Allow-Origin: *');

但还是不行!

【问题讨论】:

标签: php cross-domain plesk


【解决方案1】:

CORS 标头必须在主页请求中发送,因此如果您在发送嵌入式脚本时仅设置它是不够的。

【讨论】:

    【解决方案2】:

    这是您的 PHP 文件中的第一行吗?

    header("Access-Control-Allow-Origin: *");
    

    另外,请尝试在您的 AJAX 调用或 HTTPRequest 中发送 crossDomain: true

    【讨论】:

    • 是的,这是第一行。如何添加 crossDomain: true ?
    【解决方案3】:

    在服务器端,在 Linux 服务器上,您可以在 Web 服务器配置中设置所需的标头:

    对于 Plesk 中的源域 example.com,请转到 Domains &gt; example.com &gt; Apache and nginx settings 并在 Additional directives for HTTPAdditional directives for HTTPS 中添加以下指令:

    Header set Access-Control-Allow-Origin "*"
    

    或者,在这种情况下,可以使用具有以下内容的.htaccess 文件:

    <IfModule mod_headers.c>p
    Header always set Access-Control-Allow-Origin "*"
    </IfModule>
    

    如果启用了 Nginx 并且需要显示静态内容,请在不使用 Apache 指令的 Additional nginx directives 字段中使用以下指令:

    add_header Access-Control-Allow-Origin "*";
    

    【讨论】:

    • 我在Additional nginx directives 中添加了add_header Access-Control-Allow-Origin "*";,但仍然显示同样的错误!
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 2016-12-28
    • 2019-06-19
    • 2018-03-05
    • 2019-02-07
    • 2021-12-02
    • 2018-10-28
    • 2016-01-21
    相关资源
    最近更新 更多