gpt4 book ai didi

angularjs - web/android/ios 之间的 CORS 问题

转载 作者:行者123 更新时间:2023-12-04 12:11:53 24 4
gpt4 key购买 nike

尝试使用 $.ajax 从我网站中的其他网站获取某些内容时,出现错误。

加载失败 https://www.pinterest.com/ :请求的资源上不存在“Access-Control-Allow-Origin” header 。起源' http://localhost:8100 ' 因此不允许访问。

我知道如果目标网站不允许 localhost:8100 获取数据,我无法在 Web 上的客户端获取它。

但是,我发现移动应用程序(不是移动浏览器,而是 android/ios 应用程序)没有这个问题,他们可以通过默认的移动内置 HTTP 获取功能简单地获取网站内容。

我想问一下为什么手机不会遇到CORS问题(手机可以通过内置的http get功能简单地获取网页内容)?

谢谢。

最佳答案

CORS 由浏览器强制执行,以满足他们必须满足的安全标准。它不会影响从任何语言以编程方式发出的请求,例如 curl调用 bash。

这就是 CORS 的工作原理,基于 Wikipedia :

  • 浏览器发送带有 Origin HTTP header 的 OPTIONS 请求。此 header 的值是为父页面提供服务的域。当页面来自 http://www.example.com尝试访问 service.example.com 中的用户数据,以下请求 header 将发​​送到 service.example.com:Origin: http://www.example.com .
  • service.example.com 上的服务器可能会响应:
  • 其响应中的 Access-Control-Allow-Origin (ACAO) header 指示允许哪些源站点。例如访问控制允许来源:http://www.example.com
  • 服务器不允许跨域请求时的错误页面
  • 带有允许所有域的通配符的 Access-Control-Allow-Origin (ACAO) header :Access-Control-Allow-Origin: *

  • CORS 的工作方式意味着它是可选的。浏览器强制执行它以防止 Javascript AJAX 调用执行恶意调用。但是其他类型的手工构建的消费者不需要强制执行 CORS。

    在这个例子中思考:
  • 您是 somesite.com
  • 的所有者
  • 用户使用传统的 cookie 方法对您的网站进行身份验证
  • 用户登录到由攻击者构建的 anothersite.com。这个网站有以下代码:
    <script>fetch('http://somesite.com/posts/1', { method: 'DELETE' });</script>

    ... 有效地向您的网站发出请求并做坏事。
  • 令人高兴的是,浏览器在看到跨域请求时会执行预检请求,如果您的站点没有响应说来自 anothersite.com 的请求正常,则默认情况下您将免受潜在攻击

  • 这就是 CORS 仅在浏览器上下文中有意义的原因。 您发送到浏览器的 Javascript 不能(至少很容易)绕过 CORS,因为 the only API that allows you to perform requests从浏览器是用石头写的 .此外,浏览器之外没有本地存储或 cookie。

    花冠 :强制执行 CORS 是请求者或为您提出请求的人(而不是发件人)的故意行为。浏览器中的 Javascript API 强制执行它。由于解释的原因,其他语言不需要。

    关于angularjs - web/android/ios 之间的 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46802940/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com