一,何为HTTP协议
- 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
- HTTP是一个基于TCP的、请求与响应模式的、无状态的、应用层的协议。
二,何为TCP/IP
- TCP/IP 指:传输控制协议 / 网际协议(Transmission Control Protocol / Internet Protocol)。
- TCP/IP 用于定义计算机如何连入因特网,以及数据如何在它们之间传输的标准。
- TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/IP在一定程度上参考了OSI的体系结构。 具体如下:
OSI 七层模型,七层模型从上到下依次是:
- 应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
- 表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等
- 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
- 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
- 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
- 物理层:建立、维护、断开物理连接。
TCP 3次握手
- 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
- 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
- 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP 4次挥手
- 所谓四次挥手(Four-Way Wavehand )即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 在socket编程中, 这一过程 由客户端或服务端任一方执行close来触发。
- 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
- 第二次挥手:Server收到FIN后 ,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
- 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1 , Server进入CLOSED状态, 完成四次挥手。
三,HTTP的状态码列表
四,个人总结
个人认为,理解HTTP协议,首先要对TCP/IP有一定了解,对握手、挥手有一点了解,明白其中原理。另外,熟练认识常用的HTTP状态码也是十分重要的,它可以帮助我们快速判断网页错误的原因。
其中经常遇到的200,400,408,500要格外注意,也应注意前端与后端的链接,不仅要会在前端发现问题,也要注意可能存在的后端定义语法问题。