HTTP概述
If we were to follow the path that the message "Hello computer 5.6.7.8!" took from our computer to the computer with IP address 5.6.7.8, it would happen something like this:
![Diagram 2](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135921742-1746949468.png)
-
消息将从计算机上的协议栈顶部开始,并向下运行。
-
如果要发送的消息很长,消息通过的每个堆叠层可能会将消息分解成更小的数据块。这是因为通过互联网发送的数据(和大多数计算机网络)都是以可管理的块发送的。在互联网上,这些数据块被称为数据包。
-
数据包将通过应用层并继续到TCP层。每个数据包都被分配一个端口号。稍后将解释端口,但足以说许多程序可能正在使用TCP / IP协议栈和发送消息。我们需要知道目标计算机上哪个程序需要接收消息,因为它将在特定端口上侦听。
-
经过TCP层后,数据包进入IP层。这是每个数据包接收目标地址的地方,5.6.7.8。
-
现在我们的消息包有一个端口号和一个IP地址,它们已经可以通过Internet发送了。硬件层负责将包含消息字母文本的数据包转换为电子信号,并通过电话线传输。
-
在电话线的另一端,您的ISP与互联网直接连接。ISP 路由器检查每个数据包中的目标地址,并确定发送到哪里。通常,数据包的下一站是另一个路由器。稍后更多路由器和互联网基础设施。
-
最终,数据包到达计算机5.6.7.8。这里,数据包从目标计算机的TCP / IP堆栈的底部开始,并向上工作。
-
当数据包向上通过堆栈时,发送计算机的堆栈添加的所有路由数据(如IP地址和端口号)都从数据包中被剥离。
- 当数据到达堆栈顶部时,数据包已经重新组合成其原始形式,“Hello computer 5.6.7.8!”
HTTP协议通常承载于TCP/IP协议之上。有时候也条件GET请求承载于TLS或SSL协议层之上,这个时候就成了HTTPS; 默认HTTP的端口号为80,HTTPS的端口号为443。
![](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135922470-592508686.png)
请求中浏览器使用If-Modified-Since头将最后时间发送给服务器
基于响应中的Last-Modified头,浏览器可以知道组件的最后修改时间。
![](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135923212-595021235.jpg)
-
Expires (失效)
![](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135923792-2004122694.png)
-
Cache-Control:max-age=******
- mod_expires Apache
![](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135924477-113013280.jpg)
![](https://images2018.cnblogs.com/blog/1251691/201803/1251691-20180323135925543-1667128405.png)