• HTTP Options 跨域时发送两个请求是怎么回事?


    在正式的跨域请求之前,我们能在控制台上看到先发送了一个 OPTIONS 请求去询问服务器是否允许接下来的跨域请求,那么有关于这个 OPTIONS,今天就来介绍一下。

    在 OPTIONS 请求里有几个字段:

    • Origin:发起请求原来的域
    • Access-Control-Request-Method:将要发起的跨域请求方式(GET/PUT/POST/DELETE/······)
    • Access-Control-Request-Headers:将要发起的跨域请求中包含的请求头字段
    • Access-Control-Max-Age:缓存查询结果时间。

    服务器在响应字段中来表明是否允许这个跨域请求,浏览器收到后检查如果不符合要求,就拒绝后面的请求

    • Access-Control-Allow-Origin:允许哪些域来访问(*表示允许所有域的请求)
    • Access-Control-Allow-Methods:允许哪些请求方式
    • Access-Control-Allow-Headers:允许哪些请求头字段
    • Access-Control-Allow-Credentials:是否允许携带Cookie

    为了避免每次都要询问,OPTIONS 还做了两个重要的优化

    第一,如果是一个简单请求,那就直接发起请求,只需在请求中加入 Origin 字段表明自己来源,在响应中检查 Access-Control-Allow-Origin,如果不符合要求就报错,不需要再单独询问

    那简单请求又是什么?

    简单请求就是请求方式属于HEAD、GET、POST三者之一,请求头只有下面这些,不符合要求的就是非简单请求,就得询问了

    • Accept
    • Accept-Language
    • Content-Language
    • Last-Event-ID
    • Content-Type:(application/x-www-form-urlencoded、multipart/form-data、text/plain)

    第二个优化是,Options 请求头的 Access-Control-Max-Age,它表明了这个询问结果的有效期,后面浏览器在有效期内也可以不必再次询问

    参考

    推荐这家的文章,虽然有标题党嫌疑,但讲的的确是通俗易懂。

    因为一个跨域请求,我差点丢了饭碗

  • 相关阅读:
    超详细动画彻底掌握深度优先,广度优先遍历!
    拜托,别再问我什么是 B+ 树了
    高性能短链设计
    Gradle build 太慢,可能是你使用的姿势不对
    看完这些,你也能成技术专家
    x58平台 服务器电源配置 tdp
    系统掉盘,机械硬盘掉盘,固态掉盘
    centos7 修改ip和dns
    centos 修改hostname
    TCP三次握手和四次挥手过程
  • 原文地址:https://www.cnblogs.com/everlose/p/13151540.html
Copyright © 2020-2023  润新知