浏览器的同源策略(Same-Origin Policy)是一种安全机制,用于限制在浏览器中加载的文档或脚本如何与不同源(协议、域名和端口)的资源进行交互。同源策略的目的是保护用户的隐私和安全,防止恶意网站获取或篡改其他网站的数据。
同源策略规定,当一个页面加载了来自特定源的资源后,该页面只能与同源的资源进行交互,而无法直接访问其他源的资源。具体来说:
同源访问:页面可以自由地访问同源的资源,包括读取和修改DOM、发送Ajax请求、使用LocalStorage和Cookie等。
跨域访问:页面无法直接访问不同源的资源,包括读取和修改不同源的DOM、发送Ajax请求等。
为了解决跨域访问的问题,引入了CORS(跨源资源共享)。CORS是一种机制,允许服务器在响应中设置一些特殊的HTTP头部,以授权其他域名下的页面访问自己的资源。
通过CORS,服务器可以在响应中设置Access-Control-Allow-Origin头部,指定允许访问该资源的域名。如果服务器设置了合适的CORS头部,浏览器在收到响应时会检查该头部的值,如果当前页面的域名在允许的访问列表中,就会允许跨域访问。
CORS支持以下几种类型的请求:
简单请求(Simple Request):对于满足特定条件的GET、POST、HEAD方法的请求,浏览器会自动发送一个预检请求(Preflight Request)进行验证,然后才发起实际的请求。
预检请求(Preflight Request):对于复杂请求(例如带有自定义头部的请求、使用特殊Content-Type的请求等),浏览器会先发送一个预检请求,通过HTTP的OPTIONS方法检查服务器是否允许该请求。
带凭据的请求(Request with Credentials):如果请求中设置了withCredentials属性为true,并且服务器响应中设置了Access-Control-Allow-Credentials为true,浏览器会发送带凭据的CORS请求,可以携带Cookie等认证信息。
需要注意的是,CORS是在浏览器端实施的安全机制,服务器需要进行相应的配置以支持CORS。具体的CORS配置和限制可能因服务器框架和需求而异。