HTTP
完整的HTTP请求
1. 请求行(Request Line)
位置:第一行
格式:<方法> <请求目标> <HTTP版本>
作用:定义请求的基本动作
示例:
1 | text |
详细解释:
方法:
表示客户端希望服务器执行的操作
最常见的有:
GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)、HEAD(获取响应头)等
请求目标:
通常是你想要访问的资源的路径,例如
/index.html(单空格就为根目录)在某些情况下(例如使用代理时),它也可能是完整的URL,如
http://www.example.com/index.html
HTTP版本:
声明客户端使用的HTTP协议版本,以便服务器能够以兼容的方式响应。
常见的有:
HTTP/1.1(目前最广泛使用的)、HTTP/2(二进制协议,性能更好)、HTTP/3(基于QUIC协议)。
2. 请求头(Request Headers)
位置:请求行之后,空行之前
格式:一系列 key: value 对
作用:提供请求的元数据和上下文信息
常见请求头示例:
1 | text |
1. 基础信息头
这些头提供了关于请求本身的最基本信息
Host: (HTTP/1.1 必需字段)指定请求的服务器的域名和端口号
示例:
Host: www.example.com:443
User-Agent:描述发起请求的客户端软件(浏览器、操作系统、应用程序)的身份
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept:告知服务器客户端能够处理哪些类型的响应内容(MIME 类型)
示例:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
2. 内容协商头
客户端用它来声明自己的偏好,服务器可以根据这些信息返回最合适的内容
Accept-Language:声明客户端偏好的自然语言
示例:
Accept-Language: zh-CN, zh;q=0.9, en;q=0.8
Accept-Encoding:声明客户端能够理解的内容编码方式(通常是压缩算法)。这可以节省带宽
示例:
Accept-Encoding: gzip, deflate, br
3. 缓存控制头
用于验证缓存的有效性或直接控制缓存行为
If-Modified-Since:条件请求。如果请求的资源在指定的日期之后没有被修改过,服务器将返回
304 Not Modified,而不是资源本身示例:
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
If-None-Match:条件请求。携带之前服务器返回的
ETag值。如果资源的ETag没变,服务器返回304 Not Modified示例:
If-None-Match: "737060cd8c284d8af7ad3082f209582d"
Cache-Control:用于指定请求/响应链中的所有缓存机制都必须遵守的指令
示例(表示不要使用缓存):
Cache-Control: no-cache
4. 请求体描述头
当请求带有消息体(如 POST、PUT 请求)时,这些头用于描述消息体的信息
Content-Type:指定请求体的媒体类型(MIME 类型)。对于 POST 请求非常重要
示例(提交表单):
Content-Type: application/x-www-form-urlencoded示例(提交 JSON):
Content-Type: application/json示例(上传文件):
Content-Type: multipart/form-data; boundary=something
Content-Length:以字节为单位,指明请求体的长度
示例:
Content-Length: 348
5. 身份认证头
用于向服务器证明客户端的身份
Authorization:包含用于认证用户代理的凭证,例如 Bearer Token 或基本认证
示例(Bearer Token):
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...示例(基本认证):
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
6. 其他重要头
Connection:控制当前事务完成后,网络连接是否保持打开。
keep-alive表示保持,close表示关闭。示例:
Connection: keep-alive
Cookie:将之前由服务器通过
Set-Cookie响应头发送的 Cookie 回传给服务器。示例:
Cookie: name=value; theme=light
Referer:表示当前请求是从哪个页面链接过来的。
示例:
Referer: https://www.example.com/previous-page.html
3. 空行(Empty Line)
位置:请求头之后
作用:标识请求头结束,分隔头部和消息体
格式:一个单独的CRLF(回车换行)
4. 消息体(Message Body)
位置:空行之后
作用:包含要发送给服务器的数据(可选)
内容:表单数据、JSON、XML、文件等
示例:
1 | json |
完整的HTTP响应
- [[#1. 状态行(Status Line)|1. 状态行(Status Line)]]
- [[#2. 响应头(Response Headers)|2. 响应头(Response Headers)]]
- [[#2. 响应头(Response Headers)#基础信息头|基础信息头]]
- [[#2. 响应头(Response Headers)#内容描述头|内容描述头]]
- [[#2. 响应头(Response Headers)#缓存控制头|缓存控制头]]
- [[#2. 响应头(Response Headers)#其他重要头|其他重要头]]
- [[#3. 空行(Empty Line)|3. 空行(Empty Line)]]
- [[#4. 消息体(Message Body)|4. 消息体(Message Body)]]
1. 状态行(Status Line)
位置:第一行
格式:<HTTP版本> <状态码> <原因短语>
作用:告知客户端请求的处理结果
示例:
1 | text |
2. 响应头(Response Headers)
位置:状态行之后,空行之前
格式:一系列 字段名: 值 对
作用:提供关于响应的元数据信息
常见响应头分类:
基础信息头
Server: 服务器软件信息
Server: nginx/1.18.0Date: 响应生成时间
Date: Wed, 21 Oct 2023 07:28:00 GMT
内容描述头
Content-Type: 响应体的媒体类型
Content-Type: text/html; charset=utf-8Content-Length: 响应体的长度(字节)
Content-Length: 1234Content-Encoding: 内容编码方式(压缩)
Content-Encoding: gzip
缓存控制头
Cache-Control: 缓存指令
Cache-Control: max-age=3600ETag: 资源版本标识符
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"Last-Modified: 资源最后修改时间
Last-Modified: Tue, 15 Nov 2022 08:12:31 GMT
其他重要头
Set-Cookie: 服务器向客户端设置 Cookie
Set-Cookie: sessionId=abc123; Path=/; HttpOnlyLocation: 重定向目标 URL(用于 3xx 响应)
Location: https://example.com/new-pageAccess-Control-Allow-Origin: CORS 跨域权限
Access-Control-Allow-Origin: *
3. 空行(Empty Line)
位置:响应头之后
作用:标识响应头结束,分隔头部和消息体
格式:一个单独的 CRLF(回车换行)
4. 消息体(Message Body)
位置:空行之后
作用:包含服务器返回的实际数据(可选)
内容:HTML 页面、JSON 数据、图片、文件等


