zoukankan      html  css  js  c++  java
  • JS发送跨域Post请求出现两次请求的解决办法

    原文地址: http://www.cnblogs.com/JimmyBright/p/7681097.html
    简单请求与非简单请求区别部分转载自:https://www.cnblogs.com/renpingsheng/p/7688134.html

    为什么 post 请求会出现两次请求?

    跨域请求就会出源现这样的问题。
    由于CORS(cross origin resource share)规范的存在,浏览器会首先发送知一次options嗅探,同时header带上origin,判断是否道有跨域请求权限,服务器响应access control allow origin的值,供浏览器与origin匹配,如果匹配则正式发送post请求。

    所有跨域的js在提交post请求的时候,如果服务端设置了可跨域访问

    public static function setCrossDomain()
        {
            header('Access-Control-Allow-Origin: *');
            header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
            header('Access-Control-Allow-Methods: GET, POST, PUT');
        }
    

    都会默认发送两次请求,第一次是预检请求,查询是否支持跨域,第二次才是真正的post提交。

    JS中出现这个现象原因在于你发送了一个非简单请求。

    简单请求与非简单请求:

    * 请求方式:HEAD,GET,POST
    * 请求头信息:
        Accept
        Accept-Language
        Content-Language
        Last-Event-ID
        Content-Type 对应的值是以下三个中的任意一个
                            application/x-www-form-urlencoded
                            multipart/form-data
                            text/plain
    

    只有同时满足以上两个条件时,才是简单请求,否则为非简单请求

    解决方法:
    由上面定义可以看出,把你的post提交改成get提交,就不会两次请求,或者将post的header改成application/x-www-form-urlencoded, multipart/form-data 或 text/plain中的一种

  • 相关阅读:
    列表
    Pyunit测试框架
    Jmeter性能测试入门(转)
    Monkey for iOS(CrashMonkey4IOS)
    美化iTerm2
    不经过 App store 的安装方式(转)
    Mac上部署JDK/Ant/Jmeter/Jenkins
    display:inline-block元素之间错位问题
    vue项目安装依赖报错没有python
    正则匹配所有li标签内容
  • 原文地址:https://www.cnblogs.com/YangJonathan/p/12781620.html
Copyright © 2011-2022 走看看