JDKHOME JDKHOME
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • HTTP数据传输方式

    • url传参
      • application/x-www-form-urlencoded
        • multipart/form-data
          • application/json 、application/xml、 application/text 等
          linkji
          2020-06-10
          随笔

          HTTP数据传输方式

          # HTTP数据传输方式

          最近研究了http协议的数据包,结构大概是

          请求方法 URI 协议/版本
          请求头
          
          请求正文
          
          
          1
          2
          3
          4
          5

          其中在URI 请求头 请求正文中 都可以放自定义的数据

          这里总结一些常用方法

          # url传参

          GET /api/test?key=xxxxx HTTP/1.1
          
          
          1
          2

          这种在各种method中都能使用,缺点是长度有限

          # application/x-www-form-urlencoded

          POST /api/test HTTP/1.1
          Content-Type: application/x-www-form-urlencoded;charset=utf-8
          key1=val1&key2=val2
          
          
          1
          2
          3
          4

          这是最常见的传参方式,浏览器表单、还有jquery的ajax默认都是这种。 所有参数会拼成一串传递,key和val都要进行URL转码

          # multipart/form-data

          POST /api/test HTTP/1.1
          Content-Type: multipart/form-data; boundary=--------------------------388849051993559283843200
          
          ----------------------------388849051993559283843200
          Content-Disposition: form-data; name="key1"
          
          val1
          ----------------------------388849051993559283843200
          Content-Disposition: form-data; name="key2"
          
          val2
          ----------------------------388849051993559283843200--
          
          
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13

          表单上传文件时,常用这种方式,相对复杂一些,首先是生成一个boundary放到请求头中

          然后消息主体中 用 --boundary 来切割每个参数,最后以--boundary--标识结束

          # application/json 、application/xml、 application/text 等

          POST /api/test HTTP/1.1 
          Content-Type: application/json;charset=utf-8
          {"key":"vaue","list":[1,2,3]}
          
          1
          2
          3

          前面几种方式都是以key/value的形式传参,而本类方式则适合传递复杂结构的参数, Content-Type 中告诉服务端,是用json、xml、还是直接用字符串解析

          上次更新: 2020/06/10, 18:06:00
          最近更新
          01
          搭建redis
          11-21
          02
          istio安装
          10-25
          03
          搭建K8S高可用集群
          09-13
          更多文章>
          鄂ICP备15015406号 | Copyright © 2015-2020 jdkhome
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式