请求的资源上不存在“访问控制-允许-源”标头。起源“...”因此不允许访问

2022-08-30 04:13:17

我正在使用.htaccess来重写url,我使用html基本标签来使其工作。

现在,当我尝试发出ajax请求时,我收到以下错误:

XMLHttpRequest 无法加载 。请求的资源上不存在“访问控制-允许-源”标头。因此,不允许访问源“”。http://www.example.com/login.phphttp://example.com


答案 1

使用 addHeader 而不是使用 setHeader 方法,

response.addHeader("Access-Control-Allow-Origin", "*");

*在上面的行将允许访问所有域


对于仅允许访问特定域

response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");

查看此博客文章


答案 2

引发错误的原因:

JavaScript 代码受同源策略的限制,这意味着,从 页面上,您只能向位于完全相同域的服务发出 (AJAX) 请求,在这种情况下,完全(不是 - 没有 - 或 )。www.example.comwww.example.comexample.comwwwwhatever.example.com

在您的情况下,您的 Ajax 代码正在尝试从 位于 的页面访问 中的服务。http://wordicious.comhttp://www.wordicious.com

虽然非常相似,但它们不是同一个域。当它们不在同一域中时,仅当目标的 respose 包含标头时,请求才会成功。Access-Control-Allow-Origin

由于您的页面/服务 从未配置为显示此类标头,因此将显示该错误消息。http://wordicious.com

溶液:

如前所述,源(带有 JavaScript 的页面所在的位置)和目标(JavaScript 尝试到达的位置)域必须完全相同

您的案例似乎是拼写错误。看起来像并且实际上是同一个服务器/域。因此,要修复,请平均键入目标和源:使Ajax代码请求页面/服务 http://www.wordicious.com 而不是 http://wordicious.com。(也许相对放置目标 URL,例如 ,不带域)。http://wordicious.comhttp://www.wordicious.com'/login.php'



更一般地说:

如果问题不是像这个问题那样的拼写错误,解决方案是将访问控制允许源添加到目标域。要添加它,当然取决于该地址后面的服务器/语言。有时,工具中的配置变量可以解决问题。其他时候,您必须自己通过代码添加标头。