CORS 和 SOP

举报
搞前端的半夏 发表于 2022/06/30 21:47:37 2022/06/30
【摘要】 SOPsop是Standard Operating Procedure的首字母缩写,中文称为标准作业程序! 哈哈,开个玩笑,在浏览器中SOP是Same-origin policy的首字母缩写。中文名称为同源策略!SOP是由浏览器强制执行的,用于控制Web应用程序之间对数据的访问!例如:如果我们有一个银行应用程序和一个购物应用程序,默认情况下这两个应用程序之间的交互是有限的。银行应用程序可以...

SOP

sop是Standard Operating Procedure的首字母缩写,中文称为标准作业程序! 哈哈,开个玩笑,在浏览器中SOP是Same-origin policy的首字母缩写。中文名称为同源策略!SOP是由浏览器强制执行的,用于控制Web应用程序之间对数据的访问!

例如:如果我们有一个银行应用程序和一个购物应用程序,默认情况下这两个应用程序之间的交互是有限的。银行应用程序可以向购物应用程序发出请求,例如提交表单,但银行应用程序无法读取来自购物应用程序的响应。

在默认情况下SOP在所有浏览器中都实现了!

存在SOP的理由

答案是出于安全目的!!! 举个例子,假设你是第一次访问这个购物应用,并且你不知道这个应用是恶意的(恶意意味着这个网络应用包含一个脚本,该脚本会自动向另一个可能有隐私信息的网络应用发出请求)像银行应用程序)。如果我们没有 SOP,很遗憾,银行应用程序将响应购物应用程序并为其提供所需的信息。如果我们没有 SOP 这样的东西,所有的 Web 应用程序都会互相攻击,并互相访问数据。

请注意:SOP 不会阻止 Web 应用程序之间的写入,它只会阻止 Web 应用程序之间的读取。 SOP是根据origin来判断请求是否是同源的!

什么是origin

origin由URL,主机名(域)和端口组成!

图片.png

举个例子:我们通过http://example.com/coursesWeb 应用程序向以下 URL 发出请求。

网址 允许 原因
http://example.com/ 是的 相同的URL、域和端口
http://example.com/courses 是的 相同的URL、域和端口
https://example.com/sign_in 不同的URL和端口
https://a.example.com/sign_in 不同的域
https://example.com:8080 不同的端口

图片.png

什么是 CORS?

是 Cross-Origin Recourse Sharing首字母的缩写,CORS 是一种使用 HTTP 标头来定义浏览器允许加载资源的来源的机制。

  • 举个例子,假设你有两个域:

domain-a.com有一个合法的用例来访问domain-b.com中的资源,因此要实现这一点domain-b.com应该在其 Web 应用程序中配置 CORS 规则 因此,开发人员在domain-b.com上配置 CORS 规则,告诉它有来自domain-a.com的特定请求,并允许该请求通过。

  • HTTP 标头对于理解 CORS 的机制非常重要

    • HTTP 标头用于定义允许访问您的站点的来源。
    • HTTP 标头应在后端配置,以便能够与浏览器通信。
  • CORS 使用两个 HTTP 标头:

    • 访问控制允许来源
    • 访问控制允许凭据

访问控制允许来源

Access-Control-Allow-Origin用来表示是否允许源访问特定网站!

回到domain-a.comdomain-b.com 的例子,如果domain-a.com需要从domain-b.com读取数据,那么domain-a.com会向domain-b.com的主页发送请求,现在如果domain-b.com配置了 CORS 规则,如果您从domain-a.com收到请求,则允许domain-a.com读取请求的响应。

语法

Access-Control-Allow-Origin: * ==> 允许互联网上的任何网站访问资源
Access-Control-Allow-Origin:<origin> ==> 允许单一来源访问网站。

访问控制允许凭据

Access-Control-Allow-Credential 响应头允许将 cookie(或其他用户凭据)包含在跨域请求中。允许访问经过身份验证的网页。

回到我们的例子,假设domain-a.com想要访问domain-b.com中的认证页面,假设只有经过认证的用户才能访问的帐户详细信息页面,所以为了让domain-a.com能够访问domian-b.com。两个标志都需要在domain-b.com应用程序中配置,因此domain-b.com 将具有:

  • Access-Control-Allow-Origin: domain-a.com
  • Access-Control-Allow-Credentials: true
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。