http入门篇
前端接触浏览器是非常频繁的,做什么都离不开浏览器。比如页面性能优化、CDN加载、API调试等都离不开http协议。
一、http 简介
http(超文本传输协议)是应用层上客户端/服务器端模型的通信协议,它的请求和响应都是无状态的。
· 协议:是客户端/服务器端必须都遵守的传输数据协议。
· 无状态:是上次通信连接结束后,到下次继续通信时,上一次通信的信息是不会记录的,每一次都是新的请求。
二、TCP/IP 分层管理
1. 应用层
规定应用程序的数据格式,可以传输各式各样的格式。比如:FTP、文件、网页等。
http协议是在应用层。
2. 传输层
在两台可以联网的主机上建立通信。UDP/TCP协议是在传输层
· UDP协议:简单、容易实现,不需要建立通信就可以发送封装ip数据报的方法。但是它在发送数据报后不知道对方是否收到,可靠性差。
· TCP协议:为了解决UDP的问题,TCP协议诞生了,TCP可靠性高,每发出一个数据报都要确认请求,收不到请求,发出方就知道有必要重新发一次。但是缺点是过程复杂、实现困难、消耗较多的资源。
TCP的持久链接、管道化链接
- 持久链接:TCP链接成功后,只要任意一段没有明确提出断开,就会一直保持链接状态。
- 管道化链接:之前的发送请求后需要等待并收到响应后才可以继续发送下一个请求。管道化技术出现后,可以不用等待相应就可以直接发送下一个请求。
3. 网络层
就是在众多线路选择一条传输线路,把数据传输给对方。
4. 链路层
用来链接网络的硬件部分。包括操作系统、网卡、光纤等。
三、TCP/IP通信传输流

(图解http中的图)
发送端(每通过一层增加首部):应用层(包裹一层HTTP报文) -> 传输层(上一层基础下包裹一层TCP首部) -> 网络层(上一层基础下再包裹一层IP首部) -> 链路层(最后再包裹一层以太网首部)
接收端:在链路层接收到数据,按序往上层发送,每经过一层会去掉对应层的首部,直到应用层。
四、TCP协议三次握手 四次挥手
1. 三次握手

(图解http中的图)
客户端:发送带有SYN(同步序列编号)标记的数据包给服务器端。
服务器:回传带有SYN(同步序列编号)/ACK(确认字符)标记的数据包给客户端。
客户端:再发送ACK(确认字符)标记的数据包给服务器端。至此三次握手完成。
2. 四次挥手
客户端:发送带有FIN标记的数据包给给服务器端,客户端进入等待ACK状态。
服务器端:发送带有FIN标记的数据包给客户端,服务进入关闭(CLOSE_WAIT)等待状态。
服务器端:发送带有ACK(确认字符)标记的数据包给客户端,服务器进入最后一次确认状态(LAST_ACK)。
客户端:发送带有ACK(确认字符)标记的数据包给服务器端。至此四次挥握手完成,客户端进入等待状态,服务器进入关闭状态。
五、负责解析域名的DNS服务
DNS服务和HTTP协议一样都是位于应用层的协议。DNS提供域名到IP之间的解析服务。

(图解http中的图)
客户端:输入访问的域名地址。
DNS服务:会把域名对应的IP地址返回给客户端。
客户端:拿到DNS返回的IP地址,向这个IP地址发送访问请求。
六、从输入域名到返回页面,http协议的通信过程

(图解http中的图)
1. 输入访问的域名地址。
2. 会把域名对应的IP地址返回给客户端。
3. 拿到DNS返回的IP地址,向这个IP地址发送访问请求。
4. 发送请求前会建立TCP连接,三次握手。
5. 建立TCP连接后,依次用对应的首部(应用层、传输层、网络层、链路层)包裹数据包,然后发送到服务器。
6. 服务器拿到数据包后会对应去掉包裹数据包的首部(链路层、网络层、传输层、应用层)。最后拿到请求的信息。
7. 拿到请求的信息后,服务器根据请求信息,响应对应的数据,返回到客户端。(服务器响应客户端数据也需要包裹数据包,然后客户端去掉对应的首部)。
8. 浏览器解析数据,展示给用户。
七、URI 和 URL
· URI(统一资源标识符):用字符串标识某一互联网资源 · URL(统一资源定位符):表示资源的地点
八、HTTP报文

(图解http中的图)
HTTP报文包括:请求报文、响应报文。
· 请求报文:报文首部、空行、报文主体。
— 报文首部:
请求行:请求方法(get)、地址(/index.html)、协议版本
首部字段
其它
· 响应报文:报文首部、空行、报文主体。
— 报文首部:
状态行:协议版本、响应状态码、解释状态码的原因
首部字段
其它
九、返回结果的HTTP状态码

(图解http中的图)
· 1XX:信息性状态码
· 2XX:成功状态码
— 200:请求被正常处理了
— 204:请求成功了,但是没有资源返回
— 206:表示客户端进行了范围请求并且服务器成功执行了这部分的get请求
· 3XX:重定向状态码
— 301:永久性重定向(资源已被分配到新的URI,以后使用现在所指的资源URI)
— 302:临时性重定向(资源已被分配到新的URI,希望用户本次使用新的URL)
— 303:临时性重定向(资源存在另一个新的URI,应使用GET方法定向获取请求的资源)
— 304:资源已找到,但未符合条件请求
· 4XX:客户端错误状态码
— 400:表示客户端发生错误的原因所在
— 403:表示请求的资源被服务器拒绝
— 404:服务器没有请求的资源
· 5XX:服务器错误状态码
— 500:服务器端执行请求时发生了错误
— 503:服务器正处于超负荷状态或正在停机维护