文章目录
Http 请求与响应
一、Http 请求格式
1、请求行
请求行
位于HTTP请求的第一行,包含了请求方式、请求地址、请求协议与版本等信息。
- GET请求的参数还会以「键值对」的形式拼接在URL之后(POST请求的参数在请求体中)
# 格式
POST:请求方式 请求地址 请求协议/版本号
GET: 请求方式 请求地址?请求参数 请求协议/版本号
# 举例
POST /app/static/login.html HTTP/1.1
GET /app/static/login.html?username=jack&password=123 HTTP/1.1
2、请求头
请求头
跟在请求行
之后,以「键值对」的形式出现,包含了关于客户端、请求、支持的内容等信息。
# 格式
key: value
key --> 请求头名称,固定值。
value --> 对应的属性值,动态变化。
# 举例
- Host: localhost:8080
访问的服务器地址(域名+端口)
- Accept: application/json, text/plain, */*
告诉服务端,客户端能够接受的响应内容类型。(MIME类型。*/* 表示客户端接受任何类型的响应)
- Content-Type: application/json;charset=UTF-8
告诉服务端,客户端发送的请求体的数据类型。(MIME类型。charset 指定数据的字符编码)
- Content-Length: 95
指示消息体的字节大小,以确保数据传输的完整性和正确解析。
- Origin: http://localhost:1024
告知服务端请求来源的站点,仅包含了请求的协议、域名、端口,不包括路径和查询参数。(一般用于跨域请求)
- Referer: http://localhost:1024/login?redirect=%2Findex
上一次访问的地址,包含了请求的页面的完整 URL(一般用于防盗链)
- Connection: keep-alive
长连接(http1.1协议)
- Upgrade-Insecure-Requests: 1
客户端支持https加密协议
- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) Chrome/63.0 Safari/537.36
浏览器兼容性,服务器会根据用户的浏览器版本,返回响应的数据(上面的是谷歌浏览器示例)
3、请求体(post请求才有)
请求体
包含了客户端向服务器发送的数据,例如表单数据、JSON数据等。
请求体
的内容格式通常由请求头
中的Content-Type
字段指定。
1)raw
# 使用场景
发送原始文本数据。
# 数据形式
txt、json、xml、html等原始文本格式(常用于json)
# 示例(json)
{
"name" : "jack",
"age" : 21,
"ids" : [1,2,3]
}
# Content-Type
txt - text/plain
html - text/html
xml - text/xml 或 application/xml
json - application/json
2)x-www-form-urlencoded
# 使用场景
表单提交(常规表单)
# 数据形式
键值对编码,每个键值对用 & 分隔,值经过 URL 编码
如果表单数据包含特殊字符(如空格、&、/ 等),它们会被编码成 %20、%26、%2F 等。
# 示例
name=jack&age=21&ids=1,2,3
# Content-Type
application/x-www-form-urlencoded
3)multipart/form-data
# 使用场景
文件上传 或 复杂表单提交。
# 特点
支持文件和表单字段混合,支持二进制数据传输,可以上传多个文件。
# 数据形式
这种编码格式在发送文件时,客户端将数据分割成多个部分,每个部分都有自己的头部,其中包含该部分的数据类型或其他相关信息。
每个部分之间用分隔符(boundary)隔开。
# 示例
----------------------------------------------------7de1a433602ac
Content-Disposition: form-data; name="name"
jack
----------------------------------------------------7de1a433602ac
Content-Disposition: form-data; name="file"; filename="photo.jpg"
Content-Type: image/jpeg
(binary data of the file)
----------------------------------------------------7de1a433602ac--
# Content-Type
multipart/form-data
4)binary
# 使用场景
传输图像、音频、视频等二进制文件。
# 数据形式
原始二进制数据,没有特定的编码方式。(一次只能上传一个文件)
# Content-Type
application/octet-stream
5)对比
x-www-form-urlencoded
对比 multipart/form-data
特点 | x-www-form-urlencoded |
multipart/form-data |
---|---|---|
编码格式 | 键值对形式 | 每个表单字段和文件作为独立部分,使用边界分隔 |
适用场景 | 纯文本数据,简单表单提交 | 表单包含文件上传,混合文本和文件数据 |
文件上传 | 不支持文件上传 | 支持文件上传(如图片、视频等) |
表单字段 | 仅支持文本字段(如字符串、数字、日期等) | 支持文本字段、文件字段以及其他类型的字段 |
浏览器默认提交方式 | 是(默认表单提交方式) | 否(需要在表单中指定 enctype="multipart/form-data" ) |
数据编码 | URL 编码(特殊字符转义) | 每个部分单独编码,文件数据以二进制流传输 |
适用大小限制 | 数据量较小,浏览器对 URL 编码有长度限制 | 数据量大,不受 URL 长度限制,适合上传大文件 |
复杂度 | 简单,易于处理 | 较复杂,需要解析多部分,特别是二进制数据 |
multipart/form-data
对比 binary
特点 | multipart/form-data |
binary |
---|---|---|
编码方式 | 使用边界分隔多个部分,字段与文件都分为独立部分 | 文件数据直接作为二进制数据发送 |
适用场景 | 用于 Web 表单提交,支持文本和文件混合提交 | 用于单一文件上传,通常通过 API 或 cURL 上传 |
支持数据类型 | 支持文本和文件数据的混合提交 | 只支持文件数据上传,不支持文本字段< |