HTTP报文格式
HTTP报文格式
- HTTP报文格式
- 一、HTTP 请求(客户端发给服务器)
- 二、HTTP 响应(服务器发给客户端)
- 思考
- 1、发送大HTTP报文,如何确认对端缓存区的大小?
HTTP报文格式
一、HTTP 请求(客户端发给服务器)
请求由三部分构成:请求行 + 请求头 + 请求体(可选)。
- 请求行:核心信息,格式为 请求方法 URL 协议版本
例:GET /index.html HTTP/1.1(表示用 GET 方法获取/index.html资源,协议版本 1.1); - 请求头:键值对格式,传递额外信息(如客户端类型、支持的数据格式)
例:User-Agent: Mozilla/5.0(告诉服务器 “我是浏览器”)、Cookie: sessionid=xxx(传递登录状态); - 请求体:仅 POST、PUT 等方法使用,存放提交的数据(如表单信息、JSON 参数)
例:username=test&password=123(表单提交)、{“name”:“test”,“age”:20}(JSON 数据)。
常见 HTTP 请求方法:
- GET:获取资源(如浏览网页、查询数据),请求体为空,参数拼在 URL 后;
- POST:提交资源(如登录、上传文件),参数存放在请求体,更安全;
- PUT:更新资源(全量更新);
- DELETE:删除资源;
- HEAD:仅获取响应头(不返回响应体,用于检查资源是否存在)。
二、HTTP 响应(服务器发给客户端)
响应由三部分构成:状态行 + 响应头 + 响应体。
- 状态行:格式为 协议版本 状态码 状态描述
例:HTTP/1.1 200 OK(协议 1.1,状态码 200 表示请求成功); - 响应头:键值对格式,传递服务器信息、数据格式等
例:Content-Type: text/html; charset=utf-8(告诉客户端 “响应体是 UTF-8 编码的 HTML”)、Set-Cookie: sessionid=xxx(服务器给客户端设置 Cookie); - 响应体:服务器返回的核心数据(如 HTML 网页、JSON 结果、图片二进制数据)
例:首页内容(HTML 网页)、{“code”:200,“data”:“success”}(JSON 接口响应)。
常见 HTTP 状态码(按大类划分):
- 2xx(成功):
- 200 OK(请求成功)、
- 204 No Content(成功但无响应体);
- 3xx(重定向):
- 301 永久重定向、
- 302 临时重定向、
- 304 Not Modified(资源未修改,使用缓存);
- 4xx(客户端错误):
- 400 Bad Request(请求参数错误)、
- 401 未授权(需登录)、
- 403 禁止访问、
- 404 Not Found(资源不存在);
- 5xx(服务器错误):
- 500 Internal Server Error(服务器内部错误)、
- 503 Service Unavailable(服务器过载)。
思考
1、发送大HTTP报文,如何确认对端缓存区的大小?
- 「小 HTTP 报文」:一个 TCP 段即可装下完整的 HTTP 报文(头部 + 载荷 = 完整 HTTP 数据);
- 「大 HTTP 报文」(如上传大文件、返回大 HTML/JSON):TCP 会按「MSS(最大报文段长度)」拆分 HTTP 字节流,分成多个 TCP 段传输(MSS 是 TCP 协商的 “单个段的最大载荷长度”,默认约 1460 字节,避免超过 IP 层的 MTU 限制导致分片)
窗口大小(Window Size):告知对方 “我当前能接收的最大字节数”,用于流量控制(避免 HTTP 大报文撑爆接收方缓冲区)
