CORS中的预检请求

欢欢欢欢 发表于 2019-1-6 21:53

有时候加载一个网页的时候会看到一个相同的异步请求发生两次,这就是CORS中的预检请求

在CORS(Cross-Origin Resource Sharing)中,允许使用自定义的Headers,Methods和不同类型的请求内容,这个是一个透明的服务器端验证机制,这就叫预检请求(Preflighted Requests)。

当你想发起一个带着高级选项的请求时,一个预检请求首先会发生。这个预检请求使用的方法是“OPTIONS”,包含了以下Headers:

Origin, Access-Control-Request-Method,,Access-Control-Request-Headers;

请求发起后,服务器响应回复如下内容决定是否处理此类请求。

Access-Control-Allow-Origin: http://foo.example

Access-Control-Allow-Methods: POST, GET, OPTIONS

Access-Control-Allow-Headers: X-PINGOTHER, Content-Type

Access-Control-Max-Age: 86400

一旦预检请求发生,结果会被缓存(Access-Control-Max-Age)秒,下次就不会再请求了。

后记:

1,这种请求不需要手动设置什么,只要是符合条件的CORS,浏览器会自动发起。

2,这其实也会为了保护服务器,防止在请求时发生不必要的意外。