用于 HTTP 协议交互的信息被称为 HTTP 报文。 客户端的 HTTP 报文叫请求报文,服务端的 HTTP 报文叫响应报文。
请求报文 是由请求行(请求方法、协议版本)、请求首部(请求URI、客户端信息等)和内容实体(用户信息和资源信息等,可为空)构成。
响应报文 是由状态行(协议版本、状态码)、响应首部(服务器名称、资源标识等)和内容实体(服务端返回的资源信息)构成。
请求方法
- GET:一般用于获取服务器资源
- POST:一般用于传输实体主体
- PUT:一般用于传输文件
- DELETE:一般用于删除文件
- HEAD:用于获取报文首部,不返回报文主体
- OPTIONS:用于询问请求 URI 资源支持的方法
状态码
HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。
2xx 系列
成功(表明请求被正常处理了)
| 200 | OK,表示从客户端发来的请求在服务器端被正确处理 |
|---|---|
| 204 | No Content,表示请求成功,但响应报文不含实体的主体部分 |
| 206 | Partial Content,进行范围请求成功 |
3xx 系列
重定向(表明浏览器需执行特殊处理)
| 301 | Moved Permanently,永久重定向,表示自愿已被分配了新的 URL |
|---|---|
| 302 | Found,临时性重定向,表示资源临时被分配了新的 URL |
| 303 | See Other,表示资源存在着另一个 URL,应使用 GET 方法获取资源 |
| (对于 301/302/303 响应,几乎所有浏览器都会删除报文并自动用 GET 重新请求) | |
| 304 | Not Modified,表示服务器允许访问的自愿,但请求未满足条件的情况(与重定向无关) |
| 307 | Temporary Redirect,临时重定向,和 302 含义类似。但是期望客户端保持请求方法不变向新的地址发出请求 |
4xx 系列
客户端错误
| 400 | Bad Request,请求报文存在语法错误 |
|---|---|
| 401 | Unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 |
| 403 | Forbidden,表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述 |
| 404 | Not Found,表示在服务器上没有找到请求的资源 |
5xx 系列
服务器错误
| 500 | Internal Server Error,表示服务器在执行请求时发生了错误 |
|---|---|
| 501 | Not Implemented,表示服务器不支持当前请求所需要的某个功能 |
| 503 | Service Unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求 |
首部字段
下面是请求首部和响应首部中的字段名称和作用
通用首部
- Cache-Control
- 控制缓存的行为
no-cache:强制向服务器再次验证no-store**:**不做任何缓存max-age=111111:资源可缓存最大时间(秒)public:客户端、代理服务器都可利用缓存private:代理服务器不可以缓存
- Connection
- 浏览器想要优先使用的连接类型
keep-alive:开启持久连接close:关闭持久连接
- Date
- 创建报文时间
- Pragma
- 只用于请求报文,客户端要求中间服务器不返回缓存的资源
- Via
- 代理服务器相关信息,每经过一个代理服务器就会添加相关信息,用逗号分割
- Transfer-Encoding
- 传输编码方式
chunked:分块传输
- Upgrade
- 要求客户端使用的升级协议
- 需配合
Connection: Upgrade一起使用:websocket
- Warning
- 缓存相关问题的警告
请求首部
- Accept
- 能正确接收的媒体类型
application/jsontext/plain
- Accept-Charset
- 能正确接收的字符集
unicode-1-1
- Accept-Encoding
- 能正确接收的编码格式列表
gzipdeflate
- Accept-Language
- 能正确接收的语言列表
zh-cn,zh;q=0.9,en,q=0.8q=0.9代表当前语言的权重
- Authorization
- 客户端认证信息
- 一般存 token 用于鉴权
- Cookie
- 发送给服务器的 Cookie 信息
- Expect
- 期待服务端的指定行为
- From
- 请求方邮箱地址
- Host
- 服务器的域名,用于区分单台服务器多个域名的虚拟主机
- 是 **HTTP/1.1 **唯一必须包含的字段
- User-Agent
- 客户端信息
- Referer
- 请求发起页面的原始 URI
响应首部
- Accept-Ranges
- 告知客户端服务器是否可接受范围请求
- Age
- 资源在代理缓存中存在的时间
- Location
- 客户端重定向到某个 URL
- Server
- 服务器名字
ApacheNginx
实体首部
- Allow
- 资源的正确请求方式
GET POST PUT
- Content-Language
- 内容使用的语言
zh-CN
- Expires
- 内容的过期时间
- Last-modified
- 内容的最后修改时间