We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
看到OPTIONS请求很久了,一直不知道为啥会有这个请求。写个笔记记录下
在了解为什么会发送options请求之前,需要对几个名词作简单的了解。如果已经了解,可以跳过
跨域(CORS:Cross-Origin Resource Sharing) 跨域资源共享(CORS)是一种机制,它使用额外的HTTP头来告诉浏览器,让运行一个origin(domain)上的Web应用被准许访问来自不同源服务器上的指定资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP请求。 预检请求(Preflighted Requests) 预检请求是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。 预检请求必须首先使用OPTIONS方法发起一个预检请求到服务器,以获取服务器是否允许该实际请求。 预检请求的使用,可以避免请求对服务器的用户数据产生未预期的影响。 简单请求 不会触发CORS预检请求的请求,本文称这样的请求为简单请求。 简单请求必须满足下面所列的所有条件 1、 使用下列方法之一:GET/HEAD/POST 2、 Fetch规范定义了对CORS安全的首部字段集合,不得人为设置该集合之外的其他首部字段。该集合为:(Accept/Accept-Language/Content-language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width) 3、 Content-Type的值仅限于下列三者之一:(text/plain/mulyipart/form-data/application/x-www-form-urlencoded) 4、 请求中的任意XMLHttpRequestUpload对象均没有注册任何事件监听器;XMLHttpRequestUpload对象可以使用XMLHttpRequest.upload属性访问。 5、 请求中没有使用ReadableStream对象 非简单请求 不满足简单请求条件的都属于非简单请求
跨域(CORS:Cross-Origin Resource Sharing)
跨域资源共享(CORS)是一种机制,它使用额外的HTTP头来告诉浏览器,让运行一个origin(domain)上的Web应用被准许访问来自不同源服务器上的指定资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP请求。
预检请求(Preflighted Requests)
预检请求是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。
预检请求必须首先使用OPTIONS方法发起一个预检请求到服务器,以获取服务器是否允许该实际请求。
OPTIONS
预检请求的使用,可以避免请求对服务器的用户数据产生未预期的影响。
简单请求
不会触发CORS预检请求的请求,本文称这样的请求为简单请求。 简单请求必须满足下面所列的所有条件
1、 使用下列方法之一:GET/HEAD/POST 2、 Fetch规范定义了对CORS安全的首部字段集合,不得人为设置该集合之外的其他首部字段。该集合为:(Accept/Accept-Language/Content-language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width) 3、 Content-Type的值仅限于下列三者之一:(text/plain/mulyipart/form-data/application/x-www-form-urlencoded) 4、 请求中的任意XMLHttpRequestUpload对象均没有注册任何事件监听器;XMLHttpRequestUpload对象可以使用XMLHttpRequest.upload属性访问。 5、 请求中没有使用ReadableStream对象
GET
HEAD
POST
Accept
Accept-Language
Content-language
Content-Type
DPR
Downlink
Save-Data
Viewport-Width
Width
text/plain
mulyipart/form-data
application/x-www-form-urlencoded
XMLHttpRequestUpload
XMLHttpRequest.upload
ReadableStream
非简单请求 不满足简单请求条件的都属于非简单请求
非简单请求
名词解释来源于-MDN-HTTP访问控制(CORS)
回到正题,了解了以上内容,那么在浏览器检测到你的请求是非简单请求的时候,就会发送一个预检请求OPTIONS,以此来确定服务器是否允许实际请求
segmentfault关于出现OPTIONS回答
Access-Control-Max-Age:[number]
Access-Control-Allow-Methods
Access-Control-Allow-Headers
减少OPTIONS请求参考文章
The text was updated successfully, but these errors were encountered:
No branches or pull requests
关于OPTIONS请求
看到OPTIONS请求很久了,一直不知道为啥会有这个请求。写个笔记记录下
1、为什么会发送options请求?
1.1 名词解释
在了解为什么会发送options请求之前,需要对几个名词作简单的了解。如果已经了解,可以跳过
回到正题,了解了以上内容,那么在浏览器检测到你的请求是非简单请求的时候,就会发送一个预检请求OPTIONS,以此来确定服务器是否允许实际请求
2、如何避免或减少options请求?
Access-Control-Max-Age:[number]
数值代表预检请求的返回结果(即Access-Control-Allow-Methods
和Access-Control-Allow-Headers
信息)可以被缓存多久,单位是秒。(不同浏览器缓存上限不同)减少OPTIONS请求参考文章
The text was updated successfully, but these errors were encountered: