我在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.
就像移动到子域一样?
我需要将哪些内容添加到.htaccess
文件中才能使其与ajax和重写一起使用?
答案 0 :(得分:1)
这就解决了我的问题 - 虽然我不知道为什么。而不是我使用之前使用的重写:
RewriteCond %{HTTP_HOST} !^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]
答案 1 :(得分:0)
出于安全原因,浏览器会限制从脚本中发起的跨源HTTP请求。例如,XMLHttpRequest和Fetch遵循同源策略。因此,使用XMLHttpRequest或Fetch的Web应用程序只能向其自己的域发出HTTP请求。
要在不同的域中启用您的请求,您可以:
CORS是一种标准机制,可供所有浏览器用于实现跨域请求。您指定一组允许浏览器和服务器进行通信的标头。
有用的资源: http://enable-cors.org/
使用反向代理。
使用JSONP(仅在需要读取数据时才有效)。
更多信息: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing