Access-Control-Allow-Origin 标头丢失
Posted
技术标签:
【中文标题】Access-Control-Allow-Origin 标头丢失【英文标题】:Access-Control-Allow-Origin header Missing 【发布时间】: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: *');
但还是不行!
【问题讨论】:
Access-Control-Allow-Origin: *
= 做错了。 The right way
【参考方案1】:
CORS 标头必须在主页请求中发送,因此如果您在发送嵌入式脚本时仅设置它是不够的。
【讨论】:
【参考方案2】:这是您的 PHP 文件中的第一行吗?
header("Access-Control-Allow-Origin: *");
另外,请尝试在您的 AJAX 调用或 HTTPRequest 中发送 crossDomain: true
。
【讨论】:
是的,这是第一行。如何添加 crossDomain: true ?【参考方案3】:在服务器端,在 Linux 服务器上,您可以在 Web 服务器配置中设置所需的标头:
对于 Plesk 中的源域 example.com
,请转到 Domains > example.com > Apache and nginx settings
并在 Additional directives for HTTP
和 Additional 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 "*";
,但仍然显示同样的错误!以上是关于Access-Control-Allow-Origin 标头丢失的主要内容,如果未能解决你的问题,请参考以下文章