美文网首页
说说对options 的理解

说说对options 的理解

作者: may505 | 来源:发表于2020-06-09 15:16 被阅读0次

    什么是options请求,简单的说就是可以用 options 请求去嗅探某个请求在对应的服务器中都支持哪种请求方法。
    一般我们不会自己手动的去触发options请求,一般都是浏览器自动去完成处理的。当产生一些跨域的情况下,发起复杂请求时,对那些可能对数据库数据产生副作用的请求时。浏览器会首先发送一个options请求,得到服务端许可的后才会发送真实的请求。

    简单请求

    简单请求不会触发options预请求,简单请求:

    • 请求方式为GET、POST、HEAD
    • Content-type的值为application/x-www-form-urlencoded、multipart/form-data、text/plain三个中的某一个
    • 人为设置了规范集合之内的请求头字段,如Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width
    复杂请求
    • 使用除开简单请求方式外的请求
    • 设置了非规定的集合之内的请求头字段,比如经常自定义了token、user等
    • Content-type的值不属于application/x-www-form-urlencoded、multipart/form-data、text/plain
    options请求头关键字段
    Access-Control-Request-Method: POST // 通知服务器,真实请求将采用POST
    Access-Control-Request-Header: token, Content-type // 通知服务器,真实请求携带的自定义头部字段
    
    options返回头关键字段

    Access-Control-Allow-Methods 服务器运行客户端使用什么请求方式
    Access-Control-Allow-Origin 允许跨域的域名,允许所以跨域这个只为*
    Access-Control-Max-Age 预请求能够缓存多久
    Access-Control-Request-Headers 将实际请求所携带的首部字段告诉服务器

    options优化

    如果所有接口都使用options请求,会增加请求次数,延迟真实请求发起时间,影响性能

    • 把一些不要的复杂请求转为简单请求
    • 设置options缓存 Access-Control-Max-Age 字段
    小结

    options请求就是一个预请求,可用于检测服务器允许的 http 方法。为了安全浏览器会发起options(CORS)预检请求,服务器同意后,客户端才发送真实请求

    相关文章

      网友评论

          本文标题:说说对options 的理解

          本文链接:https://www.haomeiwen.com/subject/wlwstktx.html