预检请求的回应

简介: 服务器收到预检请求后,校验Origin、请求方法和头字段,若允许跨域,则返回包含Access-Control-Allow-Origin等CORS头的响应。该字段指定合法源,也可设为*表示允许任意源。同时通过Allow-Methods、Allow-Headers告知支持的方法和头字段,Max-Age指定预检缓存时长,避免重复请求。

服务器收到"预检"请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。

HTTP/1.1 200 OK Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header Content-Type: text/html; charset=utf-8
Content-Encoding: gzip Content-Length: 0 Keep-Alive: timeout=2, max=100
Connection: Keep-Alive Content-Type: text/plain
上面的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示http://api.bob.com可以请求数据。该字段也可以设为星号,表示同意任意跨源请求。
Access-Control-Allow-Origin: *
如果服务器否定了"预检"请求,会返回一个正常的HTTP回应,但是没有任何CORS相关的头信息字段。这时,浏览器就会认定,服务器不同意预检请求,因此触发一个错误,被XMLHttpRequest对象的onerror回调函数捕获。控制台会打印出如下的报错信息。
XMLHttpRequest cannot load http://api.alice.com.
Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin.
服务器回应的其他CORS相关字段如下。
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1728000
(1)Access-Control-Allow-Methods
该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。
(2)Access-Control-Allow-Headers
如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。
(3)Access-Control-Allow-Credentials
该字段与简单请求时的含义相同。
(4)Access-Control-Max-Age
该字段可选,用来指定本次预检请求的有效期,单位为秒。上面结果中,有效期是20天(1728000秒),即允许缓存该条回应1728000秒(即20天),在此期间,不用发出另一条预检请求。

相关文章
|
3月前
|
存储 弹性计算 安全
阿里云服务器通用算力型u1/u2i/u2a怎么样?为何说性价比较高?实例架构、性能、优势与特性、适用场景解析
本文介绍了阿里云通用算力型(u1/u2i/u2a)三款实例的差异与选购策略。u1实例采用Intel至强处理器,性价比突出,2核4G仅199元/年,适合Web应用、中小企业等通用场景;u2i基于CIPU架构,算力提升40%,I/O性能提升60%,面向对响应速度有要求的企业核心业务;u2a采用AMD EPYC处理器,综合性价比提升超50%,适合高并发场景。三者均支持网络与存储突发带宽,按需计费。用户根据业务需求、预算及扩展规划,综合判断之后选择最适合自己的实例。
|
8月前
|
存储 NoSQL 物联网
MongoDB应用场景
MongoDB适用于社交、游戏、物流、物联网及直播等场景,因其支持海量数据存储、高频读写操作。用户信息、动态、日志等低事务性、高并发数据可高效存取,尤其适合用嵌套结构与地理位置索引优化查询,是大规模非结构化数据存储的理想选择。(238字)
|
11月前
|
边缘计算 资源调度 监控
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
无人机边缘计算中的计算卸载——Stackelberg博弈方法研究(Matlab代码实现)
546 3
|
8月前
|
安全 小程序 JavaScript
OAuth2.0四种授权模式
OAuth2四种授权模式简介:授权码模式最安全,适用于第三方登录;简化模式无授权码,token直接返回,适合无后端场景;密码模式需用户共享账号信息,仅限高度信任服务;客户端模式为服务间调用,无需用户参与。
PreparedStatement 防止 SQL 注入原理
PreparedStatement 对象可以防止 SQL 注入,而 Statement 对象不能防止 SQL 注入,接下来使用一个案例剖析原理。
PreparedStatement 防止 SQL 注入原理
|
分布式计算 监控 NoSQL
图数据库 Nebula Graph 是什么
图数据库 Nebula Graph 是什么?本文将带你了解它的特性和功能,并提前揭秘部分 Nebula Graph 1.0 功能
4196 0
|
关系型数据库 MySQL 应用服务中间件
Lsky Pro兰空图床搭建教程
现在好多人都会使用图床托管自己的图片,使用免费的CDN加速和空间,但是图片失效的问题令人烦恼,免费的图床说不定哪一天就会失效,所以搭建自己的图床是优先的选择,本篇文章教大家如何搭建Lsky Pro兰空图床
1748 0
Lsky Pro兰空图床搭建教程
|
监控 NoSQL Java
阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办
阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办
1114 0
阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办
【仿真建模】第五课:AnyLogic入门基础课程 - 地铁车站仿真讲解
为了更好的控制是否显示热力图,在Main中复制启动限流的复选框,创建一个是否显示热力图的复选框。拖拽一个目标线,放到如下图所示的位置,该线代表非限行状态下,行人需要到达的目的地。绘制一个如下图所示的路径作为缓冲路线,形状可以自己定义,不一定要和我一样。再拖拽一个pedGoTo出来,跟随缓冲路线,代表限行状态下的行走路线。绘制一个用于控制行人出现的目标线,最好长一点,因为行人出现比较随意。将可见设置为否,让墙成为逻辑上的墙,即,在运行时不可见的墙。在Main窗口中,画一个如下图所示的墙,只留下入口。
2254 0
【仿真建模】第五课:AnyLogic入门基础课程 - 地铁车站仿真讲解