HTTP 请求

HTTP 请求

1) 请求组成

请求由三部分组成

  1. 请求行
  2. 请求头
  3. 请求体

请求行(Request Line)

当一个客户端(例如,浏览器)向服务器发送HTTP请求时,请求的第一行就是请求行。请求行包括以下三个部分:

  1. 请求方法:这是一个动词,如 GETPOSTPUTDELETE 等,它告诉服务器要执行什么样的操作。
  2. 请求的URL路径:这是请求的目标资源的路径。
  3. HTTP协议版本:这表示客户端使用的HTTP协议的版本。

下面是一个请求行的例子:

GET /index.html HTTP/1.1

在这个例子中:

  • GET 是请求方法,表示客户端希望获取资源。
  • /index.html 是请求的URL路径,表示客户端希望获取的资源。
  • HTTP/1.1 是HTTP协议版本,表示客户端使用的是HTTP 1.1版本的协议。

请求头(Request Headers)

  • 请求头包含关于请求的元数据,如用户代理、所需的内容类型、所接受的内容类型等。

  • 请求头是由键值对组成的列表,每个键值对之间使用冒号分隔,键和值之间使用空格分隔。

  • 例如,一个包含常见请求头的请求可能是这样的:

    bashCopy codeHost: www.example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    
Content-Type【内容】

Content-Type 是一个 HTTP 头部信息,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。它在响应中,向客户端提供返回内容的实际内容类型。

Content-Type 的语法格式如下:

Content-Type: media-type; charset=character-set

其中:

常见的Content-Type值包括:

  1. application/x-www-form-urlencoded:【表单默认】
    • 这是用于HTML表单数据的默认编码类型。
    • 表单数据会以键值对的形式编码,并使用&符号分隔。
    • 例如:key1=value1&key2=value2
  2. multipart/form-data
    • 这是用于在HTML表单中上传文件或二进制数据的编码类型。
    • 表单数据会被划分为多个部分,并以多个部分的形式发送到服务器。
    • 这种编码类型允许在表单中包含文件上传字段。
    • 例如,一个包含文件上传的表单提交的请求可能使用multipart/form-data编码。
  3. application/json
    • 这是表示JSON数据的媒体类型。
    • 当客户端向服务器发送JSON格式的数据时,通常会使用这种类型。
    • 例如:{"key": "value"}
  4. text/plain
    • 这是纯文本数据的媒体类型。
    • 当实体主体包含普通文本时,可以使用这种类型。
    • 例如:普通文本消息或文本文件。
  5. application/xml
    • 这是表示XML数据的媒体类型。
    • 当客户端向服务器发送XML格式的数据时,通常会使用这种类型。
    • 例如:<xml><key>value</key></xml>
  6. image/jpeg、image/png等
    • 这些是表示图像数据的媒体类型。
    • 当实体主体包含图像数据时,会使用对应的图像媒体类型。

Content-Type字段的值告诉服务器如何解析请求的实体主体数据,以及如何格式化响应的实体主体数据。正确设置Content-Type对于正确解析和处理HTTP请求和响应非常重要。

请求体(Request Body)

  • 请求体包含实际发送到服务器的数据,通常用于POST请求或其他需要发送数据的请求。

  • 请求体的格式取决于请求的内容类型,例如,对于表单提交,请求体可能是经过URL编码或者多部分形式的数据。

  • 例如,对于一个包含表单数据的POST请求,请求体可能是这样的:

    makefileCopy code
    username=user&password=pass
    

    或者对于包含JSON数据的POST请求,请求体可能是这样的:

    jsonCopy code
    {"username": "user", "password": "pass"}
    

这三部分组成了一个完整的HTTP请求,客户端通过发送这些信息到服务器来请求资源或执行某些操作。

2) 请求方式与数据格式

get 请求示例

GET /test2?name=%E5%BC%A0&age=20 HTTP/1.1
Host: localhost
  • %E5%BC%A0 是【张】经过 URL 编码后的结果
  • GET请求用于向服务器请求特定资源,通常用于获取数据。

  • 请求参数是以URL查询字符串的形式附加在URL之后,以?开始,参数之间用&分隔。

  • GET请求的请求体为空。

  • GET请求的格式示例:

    GET /path/to/resource?param1=value1&param2=value2 HTTP/1.1
    Host: www.example.com
    

post 请求示例

POST /test2 HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 21

name=%E5%BC%A0&age=18
  • POST请求用于向服务器提交数据,通常用于向服务器发送数据并创建新的资源。

  • 请求参数通常包含在请求体中,而不是URL中。

  • POST请求的请求体的格式通常取决于请求的内容类型,可以是经过URL编码的表单数据,也可以是JSON格式的数据等。

  • POST请求的格式示例(以表单数据为例):

    makefileCopy codePOST /path/to/resource HTTP/1.1
    Host: www.example.com
    Content-Type: application/x-www-form-urlencoded
    
    param1=value1&param2=value2
    
  • 如果POST请求的内容是JSON格式的数据,则请求头中的Content-Type可能是application/json:

    bashCopy codePOST /path/to/resource HTTP/1.1
    Host: www.example.com
    Content-Type: application/json
        
    {"param1": "value1", "param2": "value2"}
    

application/x-www-form-urlencoed 格式细节:

  • 参数分成名字和值,中间用 = 分隔
  • 多个参数使用 & 进行分隔
  • 【张】等特殊字符需要用 encodeURIComponent() 编码为 【%E5%BC%A0】后才能发送

url:utf-8编码规则:每个字节转为16进制

json 请求示例

POST /test3 HTTP/1.1
Host: localhost
Content-Type: application/json
Content-Length: 25//发送字节长度

{"name":"zhang","age":18}

json 对象格式

{"属性名":属性值}

其中属性值可以是

  • 字符串 “”
  • 数字
  • true, false
  • null
  • 对象
  • 数组

json 数组格式

[元素1, 元素2, ...]

multipart 请求示例

可以上传文件

分隔符,划分为多部分

POST /test2 HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=123
Content-Length: 125

--123
Content-Disposition: form-data; name="name"

lisi
--123
Content-Disposition: form-data; name="age"

30
--123--
  • boundary=123 用来定义分隔符
  • 起始分隔符是 --分隔符
  • 结束分隔符是 --分隔符--

数据格式小结

客户端发送

  • 编码
    • application/x-www-form-urlencoded :url 编码 ,将特殊字符进行编码后发送
    • application/json:utf-8 编码
    • multipart/form-data:每部分编码可以不同
  • 表单只支持以 application/x-www-form-urlencoded 和 multipart/form-data 格式发送数据
  • 文件上传需要用 multipart/form-data 格式
  • js 代码可以支持任意格式发送数据

服务端接收

  • 对 application/x-www-form-urlencoded 和 multipart/form-data 格式的数据,Spring 接收方式是统一的,只需要用 java bean 的属性名对应请求参数名即可
  • 对于 applicaiton/json 格式的数据,Spring 接收需要使用 @RequestBody 注解 + java bean 的方式
  • 对于multipart/form-data格式的数据MultipartFile类型接收
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值