对于http协议的认识

149 阅读4分钟

www.cnblogs.com/xiaozhuangA…

http网络协议栈

  1. HTTP 应用层
  2. TCP 传输层
  3. IP 网络层
  4. 网络特有的链路接口 数据链路层
  5. 物理网络硬件 物理层 

浏览器是怎样通过http显示位于远程服务器总的html资源的?


  1. 浏览器从url中解析出服务器的主机名
  2. 浏览器将服务器的主机名转换成服务器的ip地址
  3. 将端口号从url中解析出来
  4. 建立一条与web服务器的tcp连接
  5. 向服务器发送一条http请求报文
  6. 服务器向浏览器回送一条http响应报文
  7. 关闭连接

http报文

报文流动报文的三个组成部分起始行首部块主体请求报文:
响应报文:
请求和响应报文的区别请求报文支持的方法状态码200、201、300、301、304、400、401、403、404、500、502http首部键值对的列表通用首部(Date)请求首部(Accept:*/*)响应首部(Server:Tiki-Hut/1.0)实体首部(Content-Type)扩展首部()

TCP连接

TCP/IP是分组交换网络分层协议集

TCP的数据是通过名为IP分组的小数据块来发送的

每个IP分组包括

  • 一个IP分组首部(源和目的IP地址、长度和一些标记)
  • 一个TCP段首部(TCP端口号、TCP控制标记)
  • 一个TCP数据块

TCP是通过端口号来保持连接正确运行的

<源IP地址、源端口号、目的IP地址、目的端口号>独一无二

TCP性能

  • HTTP事务的时延


造成时延的主要原因:

  1. 客户端根据url获取服务器的ip地址和端口号,如果最近没有对该服务器进行访问,那通过DNS解析系统转换url中的IP地址可能花费数十秒的时间
  2. TCP连接请求,最多只有一两秒钟,但是http事务过多的话,时延会快速叠加
  3. 服务器读取请求报文,并对请求进行处理
  4. 回送http响应

性能聚焦

  1. TCP连接握手



  1. TCP慢启动拥塞控制

TCP为了防止因特网的突然过载和拥塞,有一个慢启动机制,一开始会限制连接的最大速度,如果数据传输成功,随着时间的推移提高传输的速度

  1. 数据聚集的Nagle算法
  2. TCP延迟确认算法
  3. TIME_WAIT时延和端口耗尽

二、http连接的处理

  1. connection首部
  2. 串行事务处理时延

简单的对连接处理,那么连接时延和慢启动时延就会叠加起来

处理方案:

  • 并行连接
  1. 并行连接可以提高加载速度,重叠时延时间,充分利用带宽(前提是带宽充裕)
  2. 浏览器通常会有4个并行连接,过多会消耗内存,引发自身的性能问题

   缺点:

  1. 每个事务都会维护一条连接,耗费时间和带宽
  2. TCP慢启动的存在,每条新连接的性能都会降低
  3. 并行连接的数量有限
  • 持久连接
  1. 站点本地性:同一个web页面上的资源大多来自同一个站点,浏览器可能会对同一个站点访问多次获取资源
  2. 降低时延和连接建立的开销,将连接保持在已调谐的状态,而且减少了打开连接的潜在数据量

   缺点

  1. 可能会出现大量空闲的连接,耗费本地和服务器的资源

    方案:

持久连接和并行连接配合使用,浏览器打开最多4条并行连接,每一条都是持久连接

http/1.0 => keep-alive http/1.1 persistent


http/1.0通过connection:keep-alive首部来使用持久连接,如果响应报文里没有keep-alive首部,说明服务器不支持keep-alive,之后会关闭连接

keep-alive:max=5,timeout=120

浏览器最多为5个事务保持连接的状态,或者将保持连接状态到连接空闲了2分钟之后

http/1.1持久连接

默认激活,需要关闭时,需要显示的增加connection:close首部

  • 管道化连接
  • 复用的连接(实验阶段)