介绍
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 | 表示服务器在执行请求时发生了错误 |
502 | 网关错误 | |
503 | service unavailable | 表明服务器暂时处于超负载或正在停机维护,无法处理请求 |
504 | 网关超时 |
参考博客
大佬文章
[3]http://showme.codes/
相关面试题
HTTP常见的状态码
类似403,404,503等状态码HTTP状态码(HTTP Status Code)