# 面试官:说一下Http请求的报文格式及常用状态码

# http协议详解
http协议我们应该再熟悉不过,毕竟我们每天都使用浏览器。http协议是基于tcp协议的。所以进行http通信前要建立tcp/ip的连接。
# http请求报文和响应报文的格式
请求报文格式
为了理解的更清楚,我用Wireshark抓包来看看到底表现形式是啥(\r\n是换行)
其中GET / HTTP/1.1是请求行。
由3个部分组成
- 请求方法(GET)
- 请求目标,通常是一个URI(/)
- 版本号(HTTP/1.1)
响应报文格式
为了更深入理解,同样抓包看一下。
其中HTTP/1.1 304 Not Modified是状态行
由3个部分组成
- 版本号(HTTP/1.1)
- 状态码(304)
- 数字状态码补充,原因描述(Not Modified)
# 常用的头部字段
我举几个例子,你就能看懂大部分的首部字段。 看上面请求头例子,有一个为Accept,类似如下
Accept: text/html,application/xml
这表明客户端通过type/subtype的形式告诉服务端,我可以接收哪些文本类型 常见有的
text/html 文本
image/gif、image/jpeg、image/png 图片
video/mp4 音视频
application 数据格式不固定,由上层应用解释,如application/json,application/pdf等
Accept-Encoding客户端支持的压缩格式,gzip、deflate 服务端对应的属性为Content-Encoding,如下表明服务端使用的是gzip这种压缩方式
Content-Encoding: gzip
客户端能识别的语言为
Accept-Language: zh-CN, zh, en
服务端返回的语言为
Content-Language: zh-CN
解释完毕,还是很好理解的吧
常见的首部如下:
通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间 Connection:连接的管理 Cache-Control:缓存的控制 Transfer-Encoding:报文主体的传输编码方式
请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器 Accept:可处理的媒体类型 Accept-Charset:可接收的字符集 Accept-Encoding:可接受的内容编码 Accept-Language:可接受的自然语言
响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:可接受的字节范围 Location:令客户端重新定向到的URI Server:HTTP服务器的安装信息
实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法 Content-Type:实体主类的类型 Content-Encoding:实体主体适用的编码方式 Content-Language:实体主体的自然语言 Content-Length:实体主体的的字节数 Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
# 状态码的类别
状态码对识别错误非常有用,所以也经常被问到,总结如下
| 类别 | 原因短语 | |
|---|---|---|
| 1XX | (信息性状态码) | 收到的请求正在处理 |
| 2XX | (成功状态码) | 请求正常处理完毕 |
| 3XX | (重定向状态码) | 需要进行附加操作已完成请求 |
| 4XX | (客户端错误状态码) | 服务器无法处理请求 |
| 5XX | (服务器错误状态码) | 服务器处理请求出错 |
2XX 成功:
| 状态码 | 英文 | 解释 |
|---|---|---|
| 200 | OK | 表示从客户端发来的请求在服务器端被正确处理 |
| 204 | No content | 表示请求成功,但响应报文不含实体的主体部分 |
| 206 | Partial Content | 进行范围请求 |
3XX 重定向:
| 状态码 | 英文 | 解释 |
|---|---|---|
| 301 | moved permanently | 永久性重定向,表示资源已被分配了新的 URL |
| 302 | found | 临时性重定向,表示资源临时被分配了新的URL |
| 303 | see other | 表示资源存在着另一个 URL,应使用 GET 方法定向获取资源 |
| 304 | not modified | 表示服务器允许访问资源,但因发生请求未满足条件的情况 |
| 307 | temporary redirect | 临时重定向,和302含义相同 |
4XX 客户端错误:
| 状态码 | 英文 | 解释 |
|---|---|---|
| 400 | bad request | 请求报文存在语法错误 |
| 401 | unauthorized | 表示发送的请求需要有通过HTTP认证的认证信息 |
| 403 | forbidden | 表示对请求资源的访问被服务器拒绝 |
| 404 | not found | 表示在服务器上没有找到请求的资源 |
5XX 服务器错误:
| 状态码 | 英文 | 解释 |
|---|---|---|
| 500 | internal sever error | 表示服务器在执行请求时发生了错误 |
| 503 | service unavailable | 表明服务器暂时处于超负载或正在停机维护,无法处理请求 |