【发布时间】:2016-11-24 07:09:39
【问题描述】:
我知道有几篇关于这个主题的帖子,但我有点困惑为什么我会收到“跨源请求被阻止:同源策略不允许读取http://ipaddress/json 的远程资源。这可以是通过将资源移动到同一域或启用 CORS 来修复。”我正在尝试访问的 Rest API 当前位于 IP 地址为 xyz 的设备上。这个 Rest API 是我用 C 开发的 CGI 脚本。
现在,我运行此代码的设备也连接到同一个 Wifi,IP 地址为 xyz。那么这是否意味着资源不是远程的,因为它在同一个域下?
这是我的 JavaScript 代码,以防有人好奇。
<button id="submit" onclick="fun()">Click here!</button>
<script language="JavaScript" type="text/javascript" src="jquery-3.1.0.min.js"></script>
<script>
function fun()
{
$.getJSON('http://ipaddress/json', function(data)
{
alert(data.toSource());
console.log(data);
});
}
</script>
我不一定要求解决这个问题,因为我知道网上有很多,但我更好奇为什么我会遇到这个问题以及我对这个错误的理解有什么错误。我还尝试了其他几个公共 JSON 站点:
使用https://api.github.com/users/mralexgray/repos没有导致这个错误,返回了正确的信息。
但是,使用https://puppygifs.tumblr.com/api/read/json 确实会导致此错误。我假设这可能是因为 GitHub 将 CROS 添加到他们的服务器?
任何理解将不胜感激。
【问题讨论】:
-
您可以自己简单地验证一下。在 firefox 中使用 httpfox 之类的东西来查看从浏览器到指定站点的请求,并在尝试 ajax 调用时查看
OPTIONS请求回复的样子(如果有的话)。 -
当 CORS 规范说“同域”时,意味着
//之后的整个名称必须与来源相同。在同一个网络上,或具有相同的域后缀是不够的。foo.domain.com和bar.domain.com不是同一个域,192.168.2.10和192.168.2.20也不是。 -
如果你有一个有线调制解调器,你的公共 IP 和你邻居的 IP 除了最后几个数字外可能相同。你真的会因为他们使用同一家有线电视公司就认为他们在同一个域中吗?
标签: javascript jquery json dns cross-domain