为什么如果此 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

本文关键字:http 地址栏 可以通过 www 访问 it hurl 给出 API 如果 访问控制      更新时间:2023-09-26

编辑:请参阅: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 等(间接使用它。