- CORS (Cross-Origin Resource Sharing)
- 跨域资源共享,W3C标准,通过新增HTTP头字段让服务器声明允许哪些源访问资源,是现代浏览器解决跨域问题的官方方案。
- 同源策略 (Same-Origin Policy)
- 浏览器核心安全机制,只有协议、域名、端口三者完全相同才视为同源,不同源的JavaScript默认无法读取对方资源。
- 预检请求 (Preflight Request)
- 浏览器对非简单跨域请求自动先发的OPTIONS方法请求,用于询问服务器是否允许后续实际请求,预检通过后才发真正请求。
- 简单请求 (Simple Request)
- 满足特定条件(GET/HEAD/POST方法、仅安全头、特定Content-Type)的跨域请求,不需要发预检,直接发送实际请求。
- Access-Control-Allow-Origin (ACAO)
- CORS核心响应头,指定允许访问资源的源,可以是具体源URI或通配符*,带凭证时不能用*。
- Access-Control-Allow-Methods (ACAM)
- 预检响应头,列出服务器支持的所有HTTP方法,多个方法用逗号分隔。
- Access-Control-Allow-Headers (ACAH)
- 预检响应头,列出服务器允许的所有请求头字段,前端发送自定义头必须在此声明。
- Access-Control-Allow-Credentials (ACAC)
- 响应头,布尔值true表示允许跨域请求携带Cookie、Authorization等凭证,此时Allow-Origin不能为*。
- Access-Control-Max-Age (ACMA)
- 预检响应头,指定预检结果缓存时间(秒),合理设置可减少OPTIONS请求提升性能。
- Vary: Origin
- 响应头,告诉CDN/代理该响应内容随Origin变化,缓存时需将Origin作为缓存键,避免跨域响应缓存错乱。
- CORS安全列出的请求头 (CORS-safelisted request headers)
- 不需要在Allow-Headers中声明就可以发送的请求头,包括Accept、Accept-Language、Content-Language、Content-Type(特定值)等。
- 禁止的请求头名 (Forbidden header name)
- 浏览器禁止JavaScript通过编程方式设置的请求头,比如Host、Connection、Cookie、Origin等,这些头由浏览器自动控制。
- 凭证请求 (Credentialed Request)
- 携带Cookie、HTTP认证信息、TLS客户端证书等身份凭证的跨域请求,需要前后端配合设置withCredentials和Allow-Credentials。
- Access-Control-Expose-Headers
- 响应头,列出前端JavaScript可以访问的响应头,默认只有少数基本头可访问,自定义响应头必须在此声明。
- OPTIONS 方法
- HTTP方法之一,用于获取服务器支持的通信选项,CORS用它来发送预检请求,询问服务器允许的方法、头、凭证等。
- Origin 请求头
- 浏览器自动添加的请求头,指示当前请求来自哪个源(协议+域名+端口),服务器根据这个头判断是否允许跨域。
- crossorigin 属性
- HTML元素(如script、img、link)的属性,用于指定是否启用CORS加载资源,值有anonymous(不带凭证)和use-credentials(带凭证)。
- no-cors 请求模式
- fetch API的一种mode,允许发跨域请求但只能发送简单请求且JavaScript无法读取响应内容,相当于发送了一个不透明的请求(Opaque Response)。