[英]How to fix Cross-Origin Request Blocked for ajax request (in Firefox)?
我从Firefox中的ajax请求中收到以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.example.org/php/save.php. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我试图找出原因。 因为这很奇怪
我也试过
xhttp = new XMLHttpRequest({mozSystem: true});
如此处建议的那样: https : //stackoverflow.com/a/22392080
但这也无济于事。
我正在使用以下命令打开请求:
xhttp.open('POST', '/php/save.php', true);
当文件在另一台服务器上时,我发现了许多其他解决方案:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
但是我不明白如果文件实际上在同一台服务器上,为什么我应该这样做呢?
编辑
我从.htaccess
文件中删除了以下两行,现在可以使用了。
RewriteCond %{HTTP_HOST} !^www\.example\.org$ [NC]
RewriteRule .? http://www.example.org%{REQUEST_URI} [R=301,L]
虽然我不确定为什么...也许是www.
的添加www.
就像移到子域一样?
我需要添加什么到.htaccess
文件中才能使其与Ajax和重写一起工作?
这就是解决我的问题的方法-尽管我不确定为什么。 在使用之前,我没有使用重写:
RewriteCond %{HTTP_HOST} !^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]
出于安全原因,浏览器限制了从脚本内部发起的跨域HTTP请求。 例如,XMLHttpRequest和Fetch遵循同源策略。 因此,使用XMLHttpRequest或Fetch的Web应用程序只能向其自己的域发出HTTP请求。
要跨不同域启用您的请求,您可以:
CORS是一种标准机制,所有浏览器都可以使用它来实现跨域请求。 您指定一组标题,以允许浏览器和服务器进行通信。
有用的资源: http : //enable-cors.org/
使用反向代理。
使用JSONP(仅在需要读取数据时才有效)。
更多信息: https : //en.wikipedia.org/wiki/Cross-origin_resource_sharing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.