• ajax设置请求头setRequestHeader方法,如请求数据类型等


    因为平时常用的设置,所以突然被问起来会忘,一般我们ajax是直接利用jQuery的ajax方法,里面的接口直接调用,常用的主要有:

    url
    类型:String

    默认值: 当前页地址。发送请求的地址。

    type
    类型:String

    默认值: "GET"。请求方式"POST"或"GET", 默认为"GET"。注意:其它HTTP请求方法,如PUT和DELETE也可以使用,但仅部分浏览器支持。

    data
    类型:String

    发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。

    必须为 Key/Value 格式。

    如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。

    既然提到processData,因为平常用它的默认值true,所以也容易被遗忘。

    processData
    类型:Boolean

    默认值: true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。

    dataType
    类型:String

    是服务器返回的数据类型,有些人以为这个就是可以设置请求头,然而它其实是设置返回数据的类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:

    "xml": 返回 XML 文档,可用 jQuery 处理。

    "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。

    "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)

    "json": 返回 JSON 数据(常用) 。

    "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

    "text": 返回纯文本字符串

    success
    类型:Function

    请求成功后的回调函数。

    参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。

    error
    类型:Function

    默认值: 自动判断 (xml 或 html)。请求失败时调用此函数。

    有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。

    error: function(xhr,error,obj) {

         console.log(error);

    }
    如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout", "error", "notmodified" 和 "parsererror"。

    complete(XHR, TS)
    类型:Function

    请求完成后回调函数 (请求成功或失败之后均调用)。

    参数: XMLHttpRequest 对象和一个描述请求类型的字符串。

    平时参数一般不写,函数内直接写请求完成后需要处理的事。

    beforeSend(XHR)
    类型:Function

    发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。

    XMLHttpRequest 对象是唯一的参数。

    这是一个 Ajax 事件。如果返回 false 可以取消本次 ajax 请求。

    言归正传,设置请求头:

    XMLHttpRequest对象提供了一个设置请求头的方法:setRequestHeader,可以在beforeSend回调里面设置请求头:

    $.ajax({

        type: "GET",

        url: "fa.php",

        success: function(data) {

            console.log(data);

        },

        beforeSend: function(xhr) {

            xhr.setRequestHeader("User-Agent", "test");

        }

    });
    W3C标准文档明确规定了以下请求头信息是浏览器控制,开发者不允许设置这些请求头,设置了会提示错误。

    Accept-Charset

    Accept-Encoding

    Access-Control-Request-Headers

    Access-Control-Request-Method

    Connection

    Content-Length

    Cookie

    Cookie2

    Date

    DNT

    Expect

    Host

    Keep-Alive

    Origin

    Referer

    TE

    Trailer

    Transfer-Encoding

    Upgrade

    User-Agent

    Via

    一般我们设置的是:content-type,传输数据类型,即服务器需要我们传送的数据类型

    xhr.setRequestHeader ("content-type", "application/x-www-form-urlencoded" )
    当然还有其他编码方式,如:CONTENT-TYPE:multipart/form-data

    PS: setRequestHeader方法只是XMLHTTP为添加或修改HTTP头提供的一个接口方法而已, 至于里面的值则是HTTP协议的含义,当然也可以发自己的东西进去,即使IIS不能识别你的信息也不会报错,如:

    xhr.setRequestHeader("sex", "male")
    虽然IIS不会报错,但这个信息也可以有用,可以在程序里读取HTTP头信息分析是否有 MyName: Supermanking 信息,可根据你的需求来做处理

    如将自定义的数据放入请求头中,避免csrf攻击

    CSRF Token

    CSRF的另一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。

    而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。

    beforeSend: function (xhr) {

         var token1 = $(window.document).find("meta[name=_csrf]").attr("content");

         var header1 = $(window.document).find("meta[name=_csrf_header]").attr("content");

         xhr.setRequestHeader(header1, token1);

    }
    参考来自:

    https://www.cnblogs.com/cdwp8/p/5157377.html
    https://www.cnblogs.com/Shannong/p/5300609.html
    https://www.cnblogs.com/meituantech/p/9777222.html
    http://www.w3school.com.cn/jquery/ajax_ajax.asp
     

    欢迎关注我的公众号,两只摩羯程序员的日常更新~~


    ————————————————
    版权声明:本文为CSDN博主「yovino」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yovino/article/details/87805300

  • 相关阅读:
    Windows PE变形练手3-把通用模板机器码直接覆盖目标PE
    Windows PE变形练手2-开发一套自己的PE嵌入模板
    R3抹掉加载的DLL
    R3获取kernel32地址
    Windows PE变形练手1-用PE自己的机器码修改自己的逻辑
    Windows PE 第十三章 PE补丁技术
    Windows PE 第十二章 PE变形技术
    16.PHP_Ajax模拟服务器登录验证
    15.PHP_PHP与Ajax
    14.PHP_PHP与XML技术
  • 原文地址:https://www.cnblogs.com/Ao-min/p/13292100.html
Copyright © 2020-2023  润新知