• 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请求返回的结果来决定是否继续发送真实的请求进行跨域资源访问。这个过程对真实请求的调用者来说是透明的。

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

  • 相关阅读:
    在SQL Server中保存和输出图片 (转)
    Oracle 和 IBMDB2 连接字符串
    DataSet中 新增 唯一键 外键
    ORACLE的数据类型
    window.event的属性
    学习资料下载
    防止 刷新 重做
    常用正则表达式 (转)
    JS 定时器 (setInterval 和 setTimeout 函数)
    ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
  • 原文地址:https://www.cnblogs.com/rxbook/p/16067485.html
Copyright © 2020-2023  润新知