CORS 和 SOP
SOP
sop是Standard Operating Procedure的首字母缩写,中文称为标准作业程序! 哈哈,开个玩笑,在浏览器中SOP是Same-origin policy的首字母缩写。中文名称为同源策略!SOP是由浏览器强制执行的,用于控制Web应用程序之间对数据的访问!
例如:如果我们有一个银行应用程序和一个购物应用程序,默认情况下这两个应用程序之间的交互是有限的。银行应用程序可以向购物应用程序发出请求,例如提交表单,但银行应用程序无法读取来自购物应用程序的响应。
在默认情况下SOP在所有浏览器中都实现了!
存在SOP的理由
答案是出于安全目的!!! 举个例子,假设你是第一次访问这个购物应用,并且你不知道这个应用是恶意的(恶意意味着这个网络应用包含一个脚本,该脚本会自动向另一个可能有隐私信息的网络应用发出请求)像银行应用程序)。如果我们没有 SOP,很遗憾,银行应用程序将响应购物应用程序并为其提供所需的信息。如果我们没有 SOP 这样的东西,所有的 Web 应用程序都会互相攻击,并互相访问数据。
请注意:SOP 不会阻止 Web 应用程序之间的写入,它只会阻止 Web 应用程序之间的读取。 SOP是根据origin来判断请求是否是同源的!
什么是origin
origin由URL,主机名(域)和端口组成!
举个例子:我们通过http://example.com/courses
Web 应用程序向以下 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 |
不 | 不同的端口 |
什么是 CORS?
是 Cross-Origin Recourse Sharing首字母的缩写,CORS 是一种使用 HTTP 标头来定义浏览器允许加载资源的来源的机制。
-
举个例子,假设你有两个域:
- domain-a.com ==> 是一个购物网络应用程序
- domain-b.com ==> 是一个分析网络应用程序
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.com和domain-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
- 点赞
- 收藏
- 关注作者
评论(0)