CORS¶
Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which browsers make a “preflight” request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request.
起因:浏览器的跨域问题主要是由于同源策略(Same-Origin Policy)的限制所导致的。同源策略是浏览器的一种安全机制,用于防止恶意网站通过网页脚本(如 JavaScript)对其他网站的内容进行非法读取或操作。根据同源策略,如果两个页面的协议(protocol)、主机(host)和端口号(port)三者不完全相同,那么它们就被视为不同源。当一个页面尝试通过脚本访问另一个不同源的页面资源时,浏览器会阻止这种跨域请求,从而引发跨域问题。这是为了确保浏览器端的安全性,防止恶意脚本利用跨域请求窃取或篡改其他网站的数据。
简介:跨源资源共享(CORS)是一种机制,它使用额外的 HTTP 头部来告诉浏览器,让运行在一个源上的 Web 应用被准许访问来自不同源服务器上的指定的资源。这种机制通过浏览器和服务器之间的通信来放宽同源策略的限制,从而允许跨域请求。
核心思想:CORS 的核心思想是在服务器端设置一些 HTTP 响应头,以明确告诉浏览器哪些跨域请求是被允许的。当浏览器发送跨域请求时,它会首先检查响应头中的 CORS 相关字段,以确定是否允许该请求。如果允许,浏览器就会正常处理响应;否则,浏览器会阻止该请求的执行。
CORS 的解决跨域问题的方式
预检请求:对于非简单请求(如 PUT、DELETE 等请求方法,或带有自定义头部的请求),浏览器会先发送一个 OPTIONS 请求到服务器,询问是否允许该跨域请求。服务器在响应中包含相关的 CORS 头部,告诉浏览器是否允许该请求以及允许的请求方法、头部字段等。
响应头设置:服务器在响应跨域请求时,需要设置一些 CORS 相关的响应头,如 Access-Control-Allow-Origin。这个头部指定了允许访问该资源的源。如果设置为 *,则表示允许任何源进行访问。此外,还可以设置其他 CORS 相关的响应头,如 Access-Control-Allow-Methods、Access-Control-Allow-Headers 等,以进一步细化跨域访问的控制。
浏览器处理:浏览器在收到服务器的响应后,会根据响应头中的 CORS 相关字段来判断是否允许该跨域请求。如果允许,浏览器就会正常处理响应;否则,浏览器会抛出一个错误或阻止该请求的执行。
相关配置:
Access-Control-Allow-Origin: *
*: 允许任何源进行跨域请求
http://example.com: 允许特定的源
Access-Control-Allow-Methods
定义了允许的 HTTP 请求方法,这里包括 GET、POST 和 OPTIONS
Access-Control-Allow-Headers
定义了允许的 HTTP 请求头
Access-Control-Max-Age
指定了预检请求的结果可以被缓存多久(单位是秒)