为什么如果此 API 给出“无访问控制允许源标头”,我可以通过地址栏或 http://www.hurl.it 访问它
Why if this API gives the "No Access-Control-Allow-Origin header", can I access it through the address bar or http://www.hurl.it
编辑:请参阅:https://softwareengineering.stackexchange.com/questions/216605/how-do-web-servers-enforce-the-same-origin-policy,以很好地解释为什么浏览器强制执行访问源限制,而服务器(如 Hurl.It(不受限制。
我正在尝试使用 http://forismatic.com/en/api/在这里找到的API。但是我收到"没有'访问控制-允许来源'标头"错误。如果是这种情况,为什么我可以通过在浏览器的地址栏中直接输入 URL 及其参数或通过 http://www.hurl.it 来访问 API?如果这会影响任何事情,我正在使用代码笔。
我的代码如下。非常感谢,我已经四处寻找了几个小时,但我处于死胡同。
var quoteRequest = new XMLHttpRequest();
quoteRequest.open("GET", "http://www.api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en", true);
quoteRequest.send();
var quote = JSON.parse(quoteRequest.responseText);
如果是这种情况,为什么我可以通过直接在浏览器的地址栏中输入 URL 及其参数或通过 http://www.hurl.it 来访问 API?
因为这就是同源策略的工作方式:它适用于 ajax 请求,而不是直接请求(在地址栏中键入(或服务器端请求(Hurl-It 所做的(。
SOP 的目的是防止页面 A 从浏览器中使用页面 A 中页面 A 中的页面 B 的资源。这主要是为了保护用户,因为当浏览器从页面 B 请求资源时,它可能会使用用户的会话或其他凭据,向页面 A 的代码显示它应该有权访问的信息。Apsillers在 programmers.stackexchange.com 上对此有很好的解释;以下为摘录:
例如,假设我不小心加载了
http://evil.com/
,这会发送http://mail.google.com/
请求。如果 SOP 没有到位,并且我已登录 Gmail,则 evil.com 的脚本可以看到我的收件箱。如果 evil.com 的网站想要在没有我的 cookie 的情况下加载 mail.google.com,它可以只使用代理服务器;mail.google.com 的公开内容不是秘密(但使用我的 cookie 访问时 mail.google.com 的内容是秘密(。
如果该 API 不授予对您的源(您的页面(的访问权限,并且不提供 JSONP 替代方案,则您只能通过中间的服务器(您自己的服务器或 Hurl-It 等(间接使用它。
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 地址栏中url的缩短
- XSS通过地址栏注入
- 当地址栏出现时,安卓系统上的css固定页脚被隐藏
- 当移动地址栏出现/消失时,防止更改窗口高度
- 是否可以更改更改特定事件在地址栏或浏览器中的URL
- 自动隐藏地址栏问题
- Firefox for Android - 地址栏内容重叠.有没有解决方案
- 如何在地址栏中的URL更改Firefox JPM时获得通知
- 如何在不重定向用户的情况下更改地址栏URL(不使用历史API?)
- 如何在刷新浏览器地址栏时重置css(a:visited{color:green})
- 我可以在浏览器地址栏上获取#值吗
- 当用户向下滚动我的网页时,如何删除chrome地址栏周围的边框
- 为什么不't我的$location.path('test')更改地址栏
- 是否可以阻止用户使用地址栏提交表单
- 如何在地址栏中隐藏我的页面名称和扩展名
- 在浏览器地址栏中用Javascript代码填写表单
- 使用表单动态更改地址栏中的URL第2部分
- AngularJS UI路由器,部分视图和来自浏览器地址栏的调用视图
- 为什么如果此 API 给出“无访问控制允许源标头”,我可以通过地址栏或 http://www.hurl.it 访问它