面试被问到:HTTP请求报文包含什么?好久没看基础知识,只知道有请求头、响应头、请求内容、相应内容、状态码。一时语塞,模糊的记忆中涌现了TCP和HTTP的知识,有点混乱,再回顾一下。
TCP/IP 与 HTTP 的关系?
TCP/IP(传输控制协议/网际协议)是传输层的协议,主要解决数据如何在网络中传输。
TCP/IP不仅仅指的是这两个协议,而是由FTP、SMTP、UDP、TCP、IP等多个协议构成的协议簇。由于TCP协议、IP协议最具有代表性,所以被称为TCP/IP协议。
HTTP(超文本传输协议)是应用层中的协议,主要解决如何包装数据。
小结
TCP协议对应于传输层,而HTTP协议对应于应用层。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。
TCP请求报文
主要有:源端口号(16位),目标端口号(16位),序号(32位),确认序号(32位),校验和(16位),紧急指针(16位),数据体
- 包的序号:为了解决乱序问题,用来标记数据先来后到的顺序。
- 确认序号:发出去的包需要确认操作,这样才能知道目标端是否收到,没有收到应该重新发送包,保证不丢包的问题。
- 状态位:SYN发起一个链接,ACK回复,RST重新连接,FIN结束连接。因为TCP是面向连接的,是全双工的,因此需要双端维护连接的状态。
Http请求报文
主要分为:请求报文和响应报文
请求报文:请求行、请求头、请求体
-
请求行:请求方法,如Get、Post、Delete、Put、Head等;
URL地址,与请求头的Host组成完成的请求URL;
协议版本。 -
请求头:包含若干属性,如Host:主机:端口号;Range:请求体字节范围;Cookie;Referer:引用来源
-
请求体:请求参数,通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。
响应报文:响应行、响应头、响应体
- 响应行:协议版本、状态码
- 响应头:响应报文头有多个属性,如服务版本、数据格式、日期
- 响应体:真正的数据,从数据库取出的真实数据。一般是Json格式。
OSI七层模型
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP四层模型:网络接口层、网络层、传输层、应用层
应用层 ==> 应用层、表示层、会话层、传输层
OSI | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 无 |
会话层 | 控制应用程序之间会话能力;如不同软件数据分发给不同软件 | ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets |
传输层 | 端到端传输数据的基本功能 | TCP、UDP |
网络层 | 定义IP编址,定义路由功能;如不同设备的数据转发 | IP,ICMP,RIP,OSPF,BGP,IGMP |
数据链路层 | 定义数据的基本格式,如何传输,如何标识 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802 |