• PHP 跨域


    header("Access-Control-Allow-Origin:*");  //https 不可以用</em>号通配符
            header('Access-Control-Allow-Headers:Origin,Content-Type,Cookie,X-CSRF-TOKEN,Accept,Authorization,X-XSRF-TOKEN,timestamp,lang,sign,dodo');
            header('Access-Control-Expose-Headers:Authorization,authenticated');
            header('Access-Control-Allow-Methods:GET,POST,PUT,OPTIONS,PATCH,DELETE,HEAD');
            header('Access-Control-Max-Age:3600'); //表示隔60分钟才发起预检请求。也就是说,发送两次请求
            header('Access-Control-Allow-Credentials:true');
    

      

    https://www.w3cways.com/2280.html

    使用fetch封装了请求方法,在请求接口的时候,会存在请求接口两次的情况

    可以看到这里请求了两次。
    这种情况称为预检(Preflighted)的跨域请求
    当HTTP请求出现以下两种情况时,浏览器认为是带预检(Preflighted)的跨域请求:

    1). 除GET、HEAD和POST(only with application/x-www-form-urlencoded, multipart/form-data, text/plain Content-Type)以外的其他HTTP方法。
    2). 请求中出现自定义HTTP头部。

    带预检(Preflighted)的跨域请求需要浏览器在发送真实HTTP请求之前先发送一个OPTIONS的预检请求,检测服务器端是否支持真实请求进行跨域资源访问,真实请求的信息在OPTIONS请求中通过Access-Control-Request-Method Header和Access-Control-Request-Headers Header描述,此外与简单跨域请求一样,浏览器也会添加Origin Header。服务器端接到预检请求后,根据资源权限配置,在响应头中放入Access-Control-Allow-Origin Header、Access-Control-Allow-Methods和Access-Control-Allow-Headers Header,分别表示允许跨域资源请求的域、请求方法和请求头。此外,服务器端还可以加入Access-Control-Max-Age Header,允许浏览器在指定时间内,无需再发送预检请求进行协商,直接用本次协商结果即可。浏览器根据OPTIONS请求返回的结果来决定是否继续发送真实的请求进行跨域资源访问。这个过程对真实请求的调用者来说是透明的。

    所以,当出现请求两次请求的时候,检查下是否符合上述两种情况。

  • 相关阅读:
    元组-琢磨已久的购物车程序
    学习使我充实自己-列表具备的功能
    很高兴今天用PYTHON3写了三级菜单程序!
    python内建模块shlex将普通字符串编码成符合linux shell的字符串
    HTTPS能登陆,HTTP不行
    linux shell判断输入的是哪个不可见字符,例如^X(Ctrl-X)
    TI CC3200做ETSI EN 300 328 认证
    使用systemd-resolved的系统中DNS来源优先级
    systmed-timesyncd中NTP服务器地址来源优先级
    markdown的简单应用实例
  • 原文地址:https://www.cnblogs.com/rxbook/p/16067485.html
Copyright © 2020-2023  润新知