HTTP 协议字段与状态码完整指南
一、HTTP 字段(哀求头与相应头)
HTTP 头字段用于传递客户端和服务器之间的元数据,分为 哀求头(Request Headers) 和 相应头(Response Headers)。
1. 常见哀求头字段
字段名阐明示例值Host目标服务器的主机名和端标语(必填字段)。Host: example.com:8080User-Agent客户端标识(浏览器、操作体系或应用程序信息)。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)Accept客户端支持的相应内容类型(MIME 类型)。Accept: application/json, text/htmlAccept-Encoding支持的压缩编码。Accept-Encoding: gzip, deflateContent-Type哀求体的媒体类型。Content-Type: application/jsonAuthorization身份凭证(如 JWT Token)。Authorization: Bearer eyJhbGciOiJ...Cookie客户端发送的 Cookie 信息。Cookie: session_id=abc123; user=adminCache-Control缓存计谋。Cache-Control: no-cache(禁用缓存)Referer当前哀求的来源页面 URL。Referer: https://google.comAccept-Charset声明客户端支持的字符集及其优先级(如 UTF-8、ISO-8859)。现代浏览器通常默认支持 UTF-8,此字段已较少显式利用。Accept-Charset: utf-8, iso-8859-1; q=0.5(q 值表示权重)Accept-Language指定客户端期望的天然语言(如中文、英文)。服务端根据优先级返回多语言内容。Accept-Language: zh-CN, en-US; q=0.8Cookie客户端向服务器发送已存储的 Cookie 数据。Cookie: session_id=abc123; user=adminIf-Modified-Since资源在指定时间后未修改则返回 304 状态码,利用当地缓存。关联字段:Last-Modified(相应头)。If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMTIf-None-Match携带资源的 ETag 值,若未变革则返回 304。比时间戳更精确,避免时间同步问题。If-None-Match: "737060cd8c284d8af7ad3082f209582d"X-Forwarded-For标识客户端的原始 IP(常用于署理链中记载真实来源)。非标准字段,需署理服务器显式添加。X-Forwarded-For: 192.168.1.1, 10.0.0.1(第一个 IP 为客户端)Priority提示服务器哀求的优先级(如资源加载序次)。优化页面加载性能,需浏览器和服务端共同支持(当前支持度有限)。在 HTTP/2 和 HTTP/3 中,优先级机制通过专门的 PRIORITY_UPDATE 帧实现,而非头字段。Priority: u=1, i(表示高优先级) 2. 常见相应头字段
字段名阐明示例值Content-Type相应体的媒体类型及编码。Content-Type: text/html; charset=UTF-8Content-Encoding相应体的压缩方式。Content-Encoding: gzipServer服务器软件信息。Server: Apache/2.4.1Set-Cookie服务器设置的 Cookie。Set-Cookie: session_id=def456; Path=/; HttpOnlyLocation重定向目标 URL(用于 3xx 状态码)。Location: https://new-example.comCache-Control资源缓存计谋。Cache-Control: public, max-age=3600(缓存 1 小时)Access-Control-Allow-Origin答应跨域哀求的源。Access-Control-Allow-Origin: *(答应所有域名)ETag资源的唯一标识符(用于缓存验证)。ETag: "12345abcde"WWW-Authenticate定义身份验证方式(如 Basic、Bearer Token)。共同 401 状态码要求客户端提供凭证。WWW-Authenticate: Basic realm="Access to site"Last-Modified资源最后修改时间,用于缓存验证。关联哀求头:If-Modified-Since。Last-Modified: Tue, 15 Nov 1994 08:12:31 GMTExpires指定资源过期时间(HTTP/1.0 缓存机制)。已被 Cache-Control 的 max-age 取代,优先级更低。Expires: Thu, 01 Dec 2025 16:00:00 GMT 3. 通用字段
字段名阐明示例值Connection控制连接是否在当前事务完成后关闭。优化性能时启用长连接,减少重复握手开销。Connection: keep-alive(HTTP/1.1 默认,保持长连接)Connection: close(HTTP/1.0 默认,关闭连接)Content-Length表示哀求或相应体的字节长度。若利用分块传输(Transfer-Encoding: chunked),则无需此字段。Content-Length: 348Date报文创建时间,格式为格林威治时间(GMT)。用于缓存验证和日记记载。Date: Tue, 15 Nov 1994 08:12:31 GMT 4. 哀求头与相应头完整示例
哀求示例
- GET /api/user?id=123 HTTP/1.1
- Host: example.com
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
- Accept: application/json
- Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- Cache-Control: no-cache
- Cookie: session_id=abc123
复制代码 相应示例
- HTTP/1.1 200 OK
- Content-Type: application/json; charset=utf-8
- Content-Encoding: gzip
- Cache-Control: max-age=3600
- Set-Cookie: session_id=def456; Path=/; HttpOnly
- ETag: "12345abcde"
- Content-Length: 128
- {"id": 123, "name": "John Doe"}
复制代码 二、HTTP 状态码详解
HTTP 状态码由三位数字构成,分为五类:
1. 1xx(信息相应)
- 100 Continue
客户端应继续发送哀求体(用于大文件上传前的确认)。
- 101 Switching Protocols
服务器同意切换协议(如从 HTTP 切换到 WebSocket)。
2. 2xx(成功)
- HTTP/1.1 200 OK
- Content-Type: text/html
- <html>...</html>
复制代码
- 201 Created
资源已创建(常用于 POST 哀求)。
- HTTP/1.1 201 Created
- Location: /api/users/789
- {"id": 789, "message": "User created"}
复制代码
- 204 No Content
哀求成功,但无返回内容(如 DELETE 哀求)。
3. 3xx(重定向)
- 301 Moved Permanently
资源永久迁移到新 URL(SEO 友好)。
- HTTP/1.1 301 Moved Permanently
- Location: https://new-example.com
复制代码
- 302 Found
资源暂时重定向(浏览器下次仍哀求原 URL)。
- HTTP/1.1 302 Found
- Location: /temp-page
复制代码
- 304 Not Modified
资源未修改,客户端利用当地缓存。
- HTTP/1.1 304 Not Modified
- ETag: "12345abcde"
复制代码 4. 4xx(客户端错误)
- 400 Bad Request
哀求格式错误(如缺少必填字段)。
- HTTP/1.1 400 Bad Request
- {"error": "Missing 'email' field"}
复制代码
- 401 Unauthorized
需要身份验证(未提供有效凭证)。
- HTTP/1.1 401 Unauthorized
- WWW-Authenticate: Bearer realm="example.com"
复制代码
- 403 Forbidden
服务器拒绝访问(权限不足)。
- HTTP/1.1 403 Forbidden
- {"error": "Access denied"}
复制代码
- HTTP/1.1 404 Not Found
- <h1>404 Page Not Found</h1>
复制代码 5. 5xx(服务器错误)
- 500 Internal Server Error
服务器内部错误(通用错误码)。
- HTTP/1.1 500 Internal Server Error
- {"error": "Database connection failed"}
复制代码
- 502 Bad Gateway
署理服务器从上游服务器收到无效相应。
- 503 Service Unavailable
服务器暂时不可用(维护或过载)。
- HTTP/1.1 503 Service Unavailable
- Retry-After: 3600
复制代码 三、关键总结与最佳实践
- HTTP 字段
- 利用 Cache-Control 和 ETag 优化缓存性能。
- 跨域哀求时配置 Access-Control-Allow-Origin。
- 敏感信息通过 Authorization 头传递,而非 URL 参数。
- 状态码利用原则
- 精准匹配场景:避免滥用 200 或 500。
- 资源不存在 → 404
- 身份未认证 → 401
- 权限不足 → 403
- 重定向区分:
- 客户端错误:提供清晰的错误描述(如 400 时指明缺失字段)。
- 安全建议
- Cookie 设置 HttpOnly 和 Secure 属性。
- 利用 HTTPS 加密传输敏感数据。
四、特殊状态码(彩蛋)
- HTTP/1.1 418 I'm a Teapot
- Content-Type: text/plain
- I'm a teapot. Can't brew coffee.
复制代码 源自 RFC 2324,用于幽默或测试场景。
附录:完整 HTTP 状态码列表可参考 MDN Web Docs。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |