51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4893|回复: 0
打印 上一主题 下一主题

[原创] HTTP_POST请求的数据格式

[复制链接]
  • TA的每日心情
    无聊
    前天 09:00
  • 签到天数: 1019 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-1-11 10:06:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     在HTTP的请求头中,可以使用Content-type来指定不同格式的请求信息。
      Content-type的类型
      常见的媒体格式类型:
      text/html:HTML格式
      text/plain:纯文本格式
      text/xml:XML格式
      image/gif:gif图片格式
      image/jpeg:jpg图片格式
      image/png:png图片格式
      以applicaton开头的没提类型:
      application/json:JSON数据格式
      application/xhtml+xml:XHTML格式
      application/xml:XML数据格式
      application/atom+xml:Atom XML聚合格式
      application/pdf:pdf格式
      application/javascript:js格式
      application/msword:Word文档格式
      application/octet-stream:二进制流数据(如常见的文件下载)
      application/x-www-form-urlencoded:form表单默认的数据格式类型,form表单数据被编码为key/value格式发送到服务器。
      另外一种常见的媒体格式是上传文件之时使用的:
      multipart/form-data:需要在表单中进行文件上传时,就需要使用该格式。
      除了原生的content-type,开发人员也可以完全自定义数据提交格式!
      最常用的三种:
      application/x-www-form-urlencoded,form表单默认的数据格式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。比如下面的http请求格式:
    1. # Request Headers

    2. POST /adduser HTTP/1.1
    3. Host: localhost:8030
    4. Connection: keep-alive
    5. Content-Length: 16
    6. Pragma: no-cache
    7. Cache-Control: no-cache
    8. Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    9. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    10. Content-Type: application/x-www-form-urlencoded
    11. Accept: */*
    12. Accept-Encoding: gzip, deflate, br
    13. Accept-Language: zh-CN,zh;q=0.9


    14. # Form Data

    15. name=name&age=11
    复制代码
    application/json,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。服务端语言也有很多函数去解析JSON,使用JSON可以支持更加复杂的结构化数据。比如下面的http请求格式:
    1. # Request Headers

    2. POST /adduser HTTP/1.1
    3. Host: localhost:8030
    4. Connection: keep-alive
    5. Content-Length: 24
    6. Pragma: no-cache
    7. Cache-Control: no-cache
    8. Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    9. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    10. Content-Type: application/json
    11. Accept: */*
    12. Accept-Encoding: gzip, deflate, br
    13. Accept-Language: zh-CN,zh;q=0.9


    14. # Request Payload

    15. {"name":"121","age":121}
    复制代码
     multipart/form-data,对用于在表单中上传文件时,也可以上传普通数据,只需要让from的ectyle等于multipart/form-data就可以了。比如下面的http请求格式:
    1. # Request Header

    2. POST /adduser HTTP/1.1
    3. Host: localhost:8030
    4. Connection: keep-alive
    5. Content-Length: 232
    6. Pragma: no-cache
    7. Cache-Control: no-cache
    8. Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
    9. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    10. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBRi81vNtMyBL97Rb
    11. Accept: */*
    12. Accept-Encoding: gzip, deflate, br
    13. Accept-Language: zh-CN,zh;q=0.9


    14. # Request Payload

    15. ------WebKitFormBoundaryBRi81vNtMyBL97Rb
    16. Content-Disposition: form-data; name="name"

    17. name1
    18. ------WebKitFormBoundaryBRi81vNtMyBL97Rb
    19. Content-Disposition: form-data; name="age"

    20. 12
    21. ------WebKitFormBoundaryBRi81vNtMyBL97Rb--
    复制代码
    这种格式的数据会有一个边界线boundary(这里就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂。消息主体以boundary开始,紧接着就是内容描述信息,然后是回车,最后是字段具体的内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体以boundary结束。
      Request Headers部分各个字段的功能
      通过上面的例子,我们可以看到在Request Headers里面以后很多字段,比如Content-type,Host这些,那么这些字段又有什么意思呢,下面通过表格来介绍一下:





    拓展知识:
      User-Agent里面包含了浏览器客户端的信息,比如:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
      通过这个信息可以看到使用的是Chrome浏览器,内核是Apple的WebKit。
      其实前世界上主要有来自四个不同机构的四种的Web浏览器内核。每一家机构都推出了至少一种使用自己的内核的浏览器产品。
      这四家机构分别是Microsoft、Mozilla、Apple和Opera SAS,提供的内核则分别叫做Trident、Gecko、WebKit和Presto,推出的主打浏览器则分别叫做Internet Explorer、Firefox、Safari和Opera。我们最常使用的Chrome浏览器就是用的苹果公司的Webkit。国内的一些浏览器也是基于webkit内核的,其所谓的双核中的极速模式就是webkit内核,兼容模式就是ie的trident内核。
      Response Headers部分各个字段的功能
      Request Headers是请求头,Response Headers是响应头,同样,它也包含了一些字段信






    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-16 13:43 , Processed in 0.073551 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表