http的options请求

options请求出现在跨域中,是一种安全的请求,不会修改服务器中的资源。

这是一种浏览器预检行为,预先检测服务器是否支持复杂请求。

简单请求的定义如下,不满足的就是复杂请求:

1.请求方式只能是:GET、POST、HEAD

2.HTTP请求头限制这几种字段(不得人为设置该集合之外的其他首部字段):

Accept、Accept-Language、Content-Language、Content-Type(需要注意额外的限制)、DPR、Downlink、Save-Data、Viewport-Width、Width

3.Content-type只能取:application/x-www-form-urlencoded、multipart/form-data、text/plain

4.请求中的任意XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问。

5.请求中没有使用 ReadableStream 对象。

非简单请求 会在正式通信之前,增加一次HTTP请求,称之为预检请求。浏览器会先发起OPTIONS方法到服务器,以获知服务器是否允许该实际请求。

目前所有主流浏览器(IE需要10)都支持跨域请求(cors),而跨域请求的关键在于服务器返回的响应头。

“预检”请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。

如果服务器允许任意跨域,则返回如下字段:

Access-Control-Allow-Origin: *

可以看出options请求是cors请求的一个副产品,如果确定不需要options,可以禁止该请求。以apache为例,可以使用如下伪静态禁止:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_METHOD} ^(OPTIONS)
  RewriteRule .* - [F]


</IfModule>

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注