尝试使用 $.ajax 从我网站中的其他网站获取某些内容时,出现错误。
无法加载https://www.pinterest.com/:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost:8100 '。
我知道如果目标网站不允许 localhost:8100 获取数据,我无法在 Web 上的客户端获取它。
但是,我发现移动应用程序(不是移动浏览器,而是 android/ios 应用程序)没有这个问题,他们可以通过默认的移动内置 HTTP 获取功能简单地获取网站内容。
我想问一下为什么手机不会遇到CORS问题(手机可以通过内置的http get功能简单地获取网页内容)?
谢谢。
CORS 由浏览器强制执行,以满足他们必须满足的安全标准。它不会影响从任何语言以编程方式发出的请求,例如curl对 bash的调用。
这是基于Wikipedia 的CORS 的工作方式:
浏览器发送带有 Origin HTTP 标头的 OPTIONS 请求。此标头的值是为父页面提供服务的域。当从网页http://www.example.com尝试在service.example.com访问用户的数据,下面的请求头将被发送到service.example.com: Origin: http://www.example.com。
service.example.com 上的服务器可能会响应:
CORS 的工作方式意味着它是可选的。浏览器强制执行它以防止 Javascript AJAX 调用执行恶意调用。但是其他类型的手工构建的消费者不需要强制执行 CORS。
在这个例子中思考:
用户登录到由攻击者构建的 anothersite.com。这个网站有以下代码:
<script>fetch('http://somesite.com/posts/1', { method: 'DELETE' });</script>
Run Code Online (Sandbox Code Playgroud)
... 有效地向您的网站发出请求并做坏事。
这就是 CORS 仅在浏览器上下文中有意义的原因。您发送到浏览器的 Javascript 不能(至少很容易)绕过 CORS,因为唯一允许您从浏览器执行请求的 API 是一成不变的。此外,浏览器之外没有本地存储或 cookie。
Corolarium:强制执行 CORS 是请求者或为您提出请求的人(而不是发件人)的故意行为。浏览器中的 Javascript API 强制执行它。由于解释的原因,其他语言不需要。
| 归档时间: |
|
| 查看次数: |
6594 次 |
| 最近记录: |