https://zhuanlan.zhihu.com/p/60450391?utm_medium=social&utm_source=wechat_session
面试一年多,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验。请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正规军。
起因
面试官:请问你了解HTTP协议吗?
前端开发:这不是应该后端清楚的吗?
后端开发:这不是前端知道的吗?
面试官:……
我们先一本正经的来了解下HTTP(不包含传输层TCP),然后总结其中的精华回复面试官。
HTTP协议简介
HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)
- 协议
协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。
- 无状态
无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。
- 客户端/服务端模型
![](https://pic3.zhimg.com/80/v2-84d680358640772f37816fc5837c8256_hd.jpg)
五层网络模型
![](https://pic4.zhimg.com/80/v2-7db617ac704abbcf13bed02df24252c7_hd.jpg)
URL构成
用了这么久,你注意过吗?
![](https://pic1.zhimg.com/80/v2-1462172cd3712d4af4b161cf7c1fb81c_hd.jpg)
协议内容
请求(Request)
客户端发送一个HTTP请求到服务端的格式:
- 请求行
- 请求头
- 请求体
![](https://pic1.zhimg.com/80/v2-054ba2c979cd2792840d99a1d0f4dc1c_hd.jpg)
响应(Response)
服务端响应客户端格式:
- 状态行
- 响应头
- 响应体
![](https://pic2.zhimg.com/80/v2-e2447b28c4e1fd60d43bfa3976ff1531_hd.jpg)
状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
![](https://pic3.zhimg.com/80/v2-9bc6885acd01ef2b91ed80dc91ae2a6e_hd.jpg)
更详细的状态码可查看 HTTP状态码
但一般我们只需要知道几个常见的就行,比如 200,400,401,403,404,500,502.
请求方法
截止到HTTP1.1共有下面几种方法:
![](https://pic1.zhimg.com/80/v2-a1204f1884e4677f2e2fa37b36b85bb8_hd.jpg)
请求和响应常见通用头
![](https://pic1.zhimg.com/80/v2-84b43fb3632d75b0dcaafba4adc9a730_hd.jpg)
注意
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
常见的媒体格式类型如下:
![](https://pic4.zhimg.com/80/v2-d967ed0521834abc35a6930df8fafb8f_hd.jpg)
以application开头的媒体格式类型:
![](https://pic3.zhimg.com/80/v2-582680d7ec61510c1105ef557d9bbc1a_hd.jpg)
常见请求头
![](https://pic2.zhimg.com/80/v2-955dee285d0654cc1dc6332a27ba44d9_hd.jpg)
常见响应头
![](https://pic3.zhimg.com/80/v2-a3c9bff1d3f64f61db94075d0df775d2_hd.jpg)
总结
清楚的知道这些内容,不仅仅是为了应对面试官,而是能实实在在的提高自己的效率,这一点在前后端联调接口最明显,当你在应用中去请求其他接口或转发请求时这些也是要知道的。不然出现问题的概率会大大提高。
更多技术文章尽在微信公众号 : 码上实战