XMLHttpRequest 无法加载。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许 Origin 访问
Posted
技术标签:
【中文标题】XMLHttpRequest 无法加载。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许 Origin 访问【英文标题】:XMLHttpRequest cannot load. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin is therefore not allowed access 【发布时间】:2014-10-16 04:34:06 【问题描述】:我正在使用 apache httpd 服务器来托管客户端文件
http://ipaddress:8010/
我的 Nodejs 服务器正在 http://ipaddress:8087
上运行
当我发送 post 请求时,它会显示以下错误
XMLHttpRequest cannot load http://ipaddress:8010/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://ipaddress:8087' is therefore not allowed access.
我的客户端代码是:
$.ajax(
type: "POST",
url: "http://ipaddress:8010",
data: name:"xyz",
success: function()
alert("success");
,
dataType: "json"
);
我的服务器端是:
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
response.setHeader('Access-Control-Allow-Credentials', true);
允许的选项仍然无法正常工作任何人都可以提出究竟是什么问题? 我在服务器端接收请求,但无法发送任何响应。
提前感谢:)
【问题讨论】:
en.wikipedia.org/wiki/Same-origin_policy 【参考方案1】:您需要启用 CORS。
要在 apache 中添加 CORS 标头,请在服务器配置文件的 <Directory>
、<Location>
、<Files>
或 <VirtualHost>
部分或 .htaccess 文件中添加以下行:
Header set Access-Control-Allow-Origin "*"
请参阅此链接以获取 apache
http://enable-cors.org/server_apache.html
对于 express,您可以添加中间件来设置响应所需的标头
app.use(function (req, res, next)
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
);
http://enable-cors.org/server_expressjs.html
【讨论】:
代码显示 OP 已经知道他们需要启用 CORS(他们只是做错了)。该代码还显示他们没有使用 Apache,尽管他们可能正在使用 express。无论哪种方式,您都应该避免在 *** 上仅提供链接答案。【参考方案2】:错误信息说:
没有“Access-Control-Allow-Origin”标头
您设置了三个Access-Control-Allow-SOMETHING
标头,但没有一个是Origin
。
【讨论】:
那么解决办法是什么? 发送适当的Access-Control-Allow-Origin
标头。以上是关于XMLHttpRequest 无法加载。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许 Origin 访问的主要内容,如果未能解决你的问题,请参考以下文章
XMLHttpRequest 无法加载 http://127.0.0.1:1337/。请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]
XMLHttpRequest 无法加载 <instagram OEMBED URL>。请求的资源上不存在“Access-Control-Allow-Origin”标头
XMLHttpRequest 无法加载请求的资源上不存在“Access-Control-Allow-Origin”标头。 AWS S3,视网膜.JS
apache_conf XMLHttpRequest无法加载http:// localhost:9233 /。请求的资源上不存在“Access-Control-Allow-Origin”标头。来源