"跨源资源共享 "的首字母缩写为CORS。当有人在不同的域上操作时,服务器将使用这种方法来控制对其服务的访问。它发生在服务器和浏览器的中间。在HTTP访问控制-请求-*标头的帮助下,浏览器传输一些数据。根据收到的头信息,服务器决定将什么作为访问控制-允许-*头信息发送回来。浏览器现在知道自己是否能够访问服务器资源。浏览器在发出实际请求之前,可能偶尔会进行一次预飞行,也就是验证。浏览器中的前端代码不能改变这些头文件。头信息可以由服务器端的代码修改。然而,它必须由应用程序看不到的下游服务来执行,如API网关或HTTP服务器。
出于安全考虑,浏览器对脚本进行的跨源HTTP查询进行了限制。例如,Fetch API和XMLHttpRequest都遵守了同源原则。这意味着,利用这些API的网络应用程序只能从它被加载的原点请求资源,除非来自其他来源的响应有适当的CORS头。"
触发器和Tigger a CORS请求的类型
由于资源经常被托管在与网络应用程序相同的源头,所以不是所有的请求都会导致CORS请求。如果是不同的,CORS就会被激活。简单请求和 CORS 预飞请求是 CORS 请求的两种不同形式。
简单请求 CORS
当用户发起一个简单请求时,他们的网络浏览器将请求传送到服务器。然后,服务器检查请求的来源,根据其规则进行分析,并提供所请求的资源,如果它匹配。这种请求类型采用了ORIGIN和ACCESS-CONTROL-ALLOW-ORIGIN头信息来决定是否应该提供资源。会导致简单请求的请求类型只有GET、HEAD和POST,以及像Accept-Language、DPR、Downlink、Save-Data、Content-Type、Content-Language、Viewport-Width和Width这样的标头。即使如此,也不是所有的内容类型都会导致一个直接的请求。在这里,只有某些形式的形式编码会导致直接请求。
预先飞行的Cors
预飞行请求有些不同,因为在初始回合中没有与服务的即时连接。当条件以某种方式改变时,例如,利用修改后的请求头或替代的内容类型,就会发起预飞行请求。在预飞行请求中,搜索引擎首先确认它可以通过与网络浏览器对应来访问资源,当网络浏览器回应说可以(HTTP 200)时,它再发送另一个请求来获取资源。首先,它使用HTTP OPTIONS方法发出请求,然后使用与GET和POST方法类似的请求类型下载资源。
Nginx中CORS的先决条件
首先,4xx回复与Nginx的标准添加头信息指令不兼容。更多的set headers指令,也适用于4xx回复,可以用来添加自定义头信息,但要这样做,我们必须先安装Nginx headers模块。
如果你使用的是Debian发行版,可以很容易地安装Nginx-extras包,尽管文档中建议你使用该模块从源代码构建Nginx。

在Nginx上启用CORS的重要性
在客户端的浏览器上执行的JavaScript通常不需要访问其域外的服务。因此,关闭CORS可能是一个明智的安全预防措施。
然而,为了使这种功能在后端发挥作用,必须启用CORS。这是因为合法的 JavaScript 代码可能偶尔需要将请求传递给其域外的服务器。一个单独的协议、域名或端口可能都被称为同一个域。
如何在Ubuntu 20.04的Nginx上启用CORS
让我们进入主要部分。打开首选编辑器vim,然后导航到Nginx配置。

在Nginx配置的服务器块中输入下一个条目。

之后重启Nginx,然后保存该配置文件。

CORS可以通过使用CURL命令来验证启用。这样做的结果应该是下面的输出。

如何处理Severs中的CORS错误
服务器端是实现 CORS 的地方;客户端不能改变它的工作方式。可以通过使用 CORS 行为阻止用户使用共享资源,通常被称为 CORS 错误。这不是一个错误,而是一个安全机制,以保护你或你正在访问的网站免受潜在的安全破坏。客户端实现的HTTP头信息不充分或不正确,可能会导致这个问题(例如,缺少API密钥和其他授权信息)。对于这些错误,我们有一些独特的解决方案。
- 跨源请求可以借助于CORS代理来完成。你的请求通过代理层转发,代理层对其来源是盲目的。因此,即使请求来自一个不确定的源头,CORS代理也会将其渲染成来自一个允许的地点。
- 无服务器功能的使用是一个更受欢迎的补救措施。这是一种不同的代理请求的方法,但尽管有上述的方法,你可以创建你的微型基础设施来访问网络服务,并将数据传输到API端点。
总结
CORS的主要目的是使在线应用程序更加安全,以阻碍中间人攻击。CORS也可以是有利的。因为它不是默认启用的,所以在这种情况下必须启用CORS。通过使用ORIGIN和ACCESS-CONTROL-ALLOW-ORIGIN指令(这是基本的CORS请求类型所使用的唯一请求类型),Nginx可以根据来源为网络浏览器提供访问请求资源的许可。CORS是一个伟大的工具,在这两种情况下都应该谨慎利用。