• http 请求参数之Query String Parameters、Form Data、Request Payload


    Query String Parameters

    当发起一次GET请求时,参数会以url string的形式进行传递。即?后的字符串则为其请求参数,并以&作为分隔符。

    如下http请求报文头:

    // General
    Request URL: http://foo.com?x=1&y=2
    Request Method: GET
    
    // Query String Parameters
    x=1&y=2
    

    Form Data

    当发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。即参数会以Form Data的形式进行传递,不会显式出现在请求url中。

    如下http请求报头:

    // General
    Request URL: http://foo.com
    Request Method: POST
    
    // Request Headers
    content-type: application/x-www-form-urlencoded; charset=UTF-8
    
    // Form Data
    x=1&y=2
    

    Request Payload

    当发起一次POST请求时,若content-type为application/json,则参数会以Request Payload的形式进行传递(显然的,数据格式为JSON),不会显式出现在请求url中。

    如下http请求报头:

    // General
    Request URL: http://foo.com
    Request Method: POST
    
    // Request Headers
    content-type: application/json; charset=UTF-8
    
    // Request Payload
    x=1&y=2
    

    如果希望通过Form Data的方式来传递数据,则可以通过原生方法formData()来进行数据组装,且content-type需要设置为multipart/form-data。

    如下http请求报头:

    // General
    Request URL: http://foo.com
    Request Method: POST
    
    // Request Headers
    content-type: multipart/form-data; charset=UTF-8
    
    // Request Payload
    ------WebKitFormBoundaryAIpmgzV8Ohi99ImM
    Content-Disposition: form-data; name="x"
    
    1
    ------WebKitFormBoundaryAIpmgzV8Ohi99ImM
    Content-Disposition: form-data; name="y"
    
    2
    ------WebKitFormBoundaryAIpmgzV8Ohi99ImM--
    

    其中,WebKitFormBoundaryAIpmgzV8Ohi99ImM为浏览器随机生成的boundary,作为分隔参数,作用等同于&

    application/x-www-form-urlencoded 和 multipart/form-data

    The content type "application/x-www-form-urlencoded" is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type "multipart/form-data" should be used for submitting forms that contain files, non-ASCII data, and binary data.

    multipart/form-data的优势还伴随一些兼容性问题,详细请参考文章结束的参考文献。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     当我们使用ajax去异步请求数据时,会发现通过$.POST处理时数据出现在请求体的form-data,而用$.AJAX去异步请求数据时,数据出现在请求体的request payload。

    GET、POST方式提交的请求:

    Content-type:

    1、application/x-www-form-urlencoded:@RequestBody不是必须加的

    2、mutipart/form-data:@RequestBody不能处理这种格式

    3、其他格式,比如application/json,application/xml等,必须使用@RequestBody来处理

    PUT方式提交的请求:

    以上1和3的场景都是必须使用@RequestBody来处理的,2场景也是不支持的

  • 相关阅读:
    NoHttp封装--03 cookie
    NoHttp封装--02 自定义请求
    NoHttp封装--01
    Cookie管理 WebView同步
    Java注解处理器--编译时处理的注解
    Android联网更新应用
    shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
    磁盘管理 之 parted命令添加swap,文件系统
    磁盘管理之 raid 文件系统 分区
    用户管理上
  • 原文地址:https://www.cnblogs.com/yelongsan/p/10244037.html
Copyright © 2020-2023  润新知