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
  1. 消息将从计算机上的协议栈顶部开始,并向下运行。

  2. 如果要发送的消息很长,消息通过的每个堆叠层可能会将消息分解成更小的数据块。这是因为通过互联网发送的数据(和大多数计算机网络)都是以可管理的块发送的。在互联网上,这些数据块被称为数据包。

  3. 数据包将通过应用层并继续到TCP层。每个数据包都被分配一个端口号。稍后将解释端口,但足以说许多程序可能正在使用TCP / IP协议栈和发送消息。我们需要知道目标计算机上哪个程序需要接收消息,因为它将在特定端口上侦听。

  4. 经过TCP层后,数据包进入IP层。这是每个数据包接收目标地址的地方,5.6.7.8。

  5. 现在我们的消息包有一个端口号和一个IP地址,它们已经可以通过Internet发送了。硬件层负责将包含消息字母文本的数据包转换为电子信号,并通过电话线传输。

  6. 在电话线的另一端,您的ISP与互联网直接连接。ISP 路由器检查每个数据包中的目标地址,并确定发送到哪里。通常,数据包的下一站是另一个路由器。稍后更多路由器和互联网基础设施。

  7. 最终,数据包到达计算机5.6.7.8。这里,数据包从目标计算机的TCP / IP堆栈的底部开始,并向上工作。

  8. 当数据包向上通过堆栈时,发送计算机的堆栈添加的所有路由数据(如IP地址和端口号)都从数据包中被剥离。

  9. 当数据到达堆栈顶部时,数据包已经重新组合成其原始形式,“Hello computer 5.6.7.8!”

HTTP协议通常承载于TCP/IP协议之上。有时候也条件GET请求承载于TLS或SSL协议层之上,这个时候就成了HTTPS;    默认HTTP的端口号为80,HTTPS的端口号为443。

 
如果浏览器在其缓存中保留了组件的一个副本,但并不确定他是否仍然有效,就会生成一个条件GET请求。缓存副本的有效性源自最后修改时间。

请求中浏览器使用If-Modified-Since头将最后时间发送给服务器
基于响应中的Last-Modified头,浏览器可以知道组件的最后修改时间。

  •  Expires  (失效)

条件GET请求和304响应有助于让页面加载更快,但仍需要在客户端和服务器之间进行一次往返确认,以执行有效性检查。
Expires头通过明确指出浏览器是否可以使用组件的缓存副本来消除这个需要
 Expxires 使用一个特定时间,这就要求了客户端与服务器时间必须严格同步。
  • Cache-Control:max-age=******

使用max-age指令指定以秒为单位定缓存时间。
 
如果同时指定Expires和Cache-Control,HTTP规范规定max-age指令重写expires头。
  • mod_expires Apache
 
 
Keep-Alive
持久链接解决了多对一请求服务器导致的socket连接低效性的问题。它使浏览器可以在一个单独的连接上进行多个请求。
 
 
 
posted @ 2018-03-23 14:00  paopaolee  阅读(93)  评论(0编辑  收藏  举报