angularjs Web/Android/iOS之间的CORS问题

idfiyjo8  于 2023-10-15  发布在  Angular
关注(0)|答案(2)|浏览(93)

当我尝试$. aps从我的网站中的其他网站获取一些内容时,我得到了错误。
无法加载https://www.pinterest.com/:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源'http://localhost:8100'。
我知道如果目标网站不允许localhost:8100获取数据,我就不能在网络上的客户端获取数据。
然而,我发现移动的应用程序(不是移动的浏览器,而是android/ios应用程序)没有这个问题,他们可以简单地通过默认的移动的内置HTTP获取功能获取网站内容。
我想问为什么移动的不会遇到CORS问题(移动的可以简单地通过内置的http获取功能获取网页内容)?
谢谢.

hrirmatl

hrirmatl1#

CORS由浏览器强制执行,以满足它们必须满足的安全标准。它不影响任何语言的编程请求,比如bash上的curl调用。
这是CORS的工作原理,基于维基百科:
1.浏览器发送带有Origin HTTP头的OPTIONS请求。此标头的值是服务于父页的域。当来自http://www.example.com的页面试图访问www.example.com中的用户数据时,以下请求报头将被发送到service.example.com:service.example.com

  • www.example.com上的服务器可能会响应:
  • 响应中的一个ACAO头,指示允许哪些源站点。例如Access-Control-Allow-Origin: http://www.example.com
  • 如果服务器不允许跨域请求,则显示错误页面
  • 一个带有允许所有域的MAC的MAC-控制-允许-起源(ACAO)头:Access-Control-Allow-Origin: *

CORS的工作方式意味着它是可选的。浏览器强制执行它,以防止JavaScript AJAX调用执行恶意调用。但是手工构建的其他类型的消费者不需要强制执行CORS。
在这个例子中:

  • 您是www.example.com的所有者
  • 用户使用传统的cookie方法对您的站点进行身份验证
  • 用户登录由攻击者构建的www.example.com。anothersite.com
<script>fetch('http://somesite.com/posts/1', { method: 'DELETE' });</script>

.有效地执行对您的网站的请求并做坏事。

  • 令人高兴的是,当浏览器看到跨域请求时,它会执行一个preflight请求,如果您的站点没有响应,表示来自www.example.com的请求是可以的,则默认情况下,您将免受潜在攻击

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

  • 酒店:强制执行CORS是请求者或为您发出请求的任何人的故意行为,而不是发送者。浏览器中的Javascript API强制执行它。其他语言不需要解释原因。
0h4hbjxa

0h4hbjxa2#

在设备上运行时,您的文件通过file://协议提供,而不是http://,因此您的origin将不存在。这就是为什么来自本地设备的请求不会触发CORS。

相关问题