Javascript 同一域(本地主机)上的XHR跨域错误 说明:

Javascript 同一域(本地主机)上的XHR跨域错误 说明:,javascript,ajax,apache,xmlhttprequest,cross-domain,Javascript,Ajax,Apache,Xmlhttprequest,Cross Domain,我在apache服务器上运行了一个小型web应用程序,该服务器使用javascript执行一些XHR操作。在很长一段时间内,它一直没有问题,今天所有的XHR都停止工作了,但只有在本地主机上,如果您从外部访问它,它才能正常工作 问题: 使用mozilla firefox,firebug警告: “阻止跨源请求:同一源策略不允许读取位于http://127.0.0.1:3581/datasnap/rest/TdssMloteamento/getLoteamento/true/。可以通过将资源移动到同一

我在apache服务器上运行了一个小型web应用程序,该服务器使用javascript执行一些XHR操作。在很长一段时间内,它一直没有问题,今天所有的XHR都停止工作了,但只有在本地主机上,如果您从外部访问它,它才能正常工作

问题: 使用mozilla firefox,firebug警告:

“阻止跨源请求:同一源策略不允许读取位于
http://127.0.0.1:3581/datasnap/rest/TdssMloteamento/getLoteamento/true/
。可以通过将资源移动到同一域或启用CORS来解决此问题。”

但我在本地主机上访问一个本地内容,该内容让XHR调用同一台机器上的本地datasnap服务器,然后恢复,本地失败,然后从web开始工作

评论: 我正在访问url:
http://127.0.0.1:3582/beeWebLoteamento/Principal.php

这对我来说是完全的,真的,奇怪的,这根本没有意义,没有逻辑,为什么我在访问同一个域时会出现跨域错误

目标:
我想知道发生了什么,并解决此问题以继续在本地和通过web(外部)执行XHR。

尝试发送标头
访问控制允许源代码:
在您的后端脚本中

我找到了解决方案/问题,即: 将所有
127.0.0.1
替换为
192.168.25.100
(即本地机器ip),并且一切正常,因此请求为:

http://127.0.0.1:3581/datasnap/rest/TdssMloteamento/getLoteamento/true/

并成为:

http://192.168.25.100:3581/datasnap/rest/TdssMloteamento/getLoteamento/true/

我在URL中访问了我的web应用程序(apache):

http://192.168.25.100:3582/beeWebLoteamento/Principal.php

恢复:
为了避免这些跨域问题,请使用机器的本地ip地址“通常以
192.168.xxx.xxx
开头”来访问其上托管的所有内容,也不要使用XHR或Apache,而不要使用
127.0.0.1
localhost

请求页面的URL是什么样子的?协议(“http”或“https”)、主机名和端口必须完全相同。这是delphi datasnap服务器上的一个普通XHR请求,我发送一个json,然后返回一个json。对。那么请求页面URL是否以
http://localhost:3581
?以
http://127.0.0.1:3581
no。“…当且仅当两个源具有相同的方案、主机和端口时,这两个源是相同的。”只有通过XHR访问的应用程序正在发回相应的访问控制头(在本例中很可能是这样)时,这才起作用。通常,端口号是“同一域”规则的一部分。好吧,这只是因为我的datasnap服务器在标头中发送了一个访问控制?我想是的,是的-您可以通过查看浏览器开发人员工具中的“网络”选项卡来验证发生了什么。您应该能够看到返回的所有响应头。