《HTTP权威指南》笔记(一)

本文插图源至:《HTTP权威指南》

首先了解一个概念:URI、URL、URN,其中URL称之为统一资源定位符,URI称之为统一资源名,这两个都可以用来描述网络中某一个资源的位置,它们是URI的子集。我们最多讨论的是URL,举个例子。

https://www.csdn.net就是一个url,其中https:是指遵循的方案https(在http基础上增加了加密技术),www.csdn.net指的是域名,在实际请求中会通过DNS(Domain Name System)解析成服务器ip地址。而通用的url包含以下内容:

《HTTP权威指南》笔记(一)_第1张图片

HTTP是应用层的协议,其通过TCP/IP协议使客户端与服务端建立连接(TCP位于传输层,而IP位于网络层)。在建立一条连接时需要经历三次握手:

《HTTP权威指南》笔记(一)_第2张图片

每次建立新连接都需要经历这个过程,这个过程会产生一定的时延。(时延取决于硬件、网络拥堵状态、报文大小、服务端处理速度等)

在链接中发送的数据称之为数据包:

《HTTP权威指南》笔记(一)_第3张图片

区分不同连接是通过<源ip、源端口、目的ip、目的端口>这四个数值的组合,不同的连接这四个值不可能完全一样。

延时确认:在报文传输过程中,为了防止报文损坏或丢失,需要在发送报文后收到确认报文、以确认报文成功传输。确认报文作为单独的tcp数据段会增加网路负载,延时确认会在一个很小的时间段内(通常100~200ms)将确认报文放在缓存区,如果此时有其它同向传输的报文A,则将确认报文放进A中进行捎带,如果没有则依然需要作为单独数据段发送。

慢启动:为了避免某时刻大量发送数据造成网络拥堵,TCP连接会经历一个慢启动过程,首次只能发送1个tcp段,如果收到确认报文则可以继续发送2个tcp段,以此类推使得发送数据有一个缓速增长的过程。而慢启动就意味着,一个tcp连接使用越久,其发送数据能力可能就越强。

持久连接:

在HTTP/1.0中使用的是在Keep-Alive:在Connection首部添加此字段能让连接的双方知道这是一个持久连接,而默认情况下都不是持久连接,代理在接收到此条请求后会将Connection首去除,再添加自己的Connection首部,如果代理支持持久连接,那么该首部仍然会包含Keep-Alive。服务端接收到包含Keep-Alive的首部之后会认为这是一条持久连接。但是这样操作会引发哑代理问题,如果在客户端->服务端这个传输过程中,有一个代理无法理解Connection首部,那么它会把这个首部原封不动的传到服务端,服务器会认为代理能够保持持久连接,实际情况是代理对此毫不知情。并且客户端在此连接发送新请求时,毫无准备的代理压根就不会响应这个请求,导致请求被挂起。

在HTTP/1.1中使用的是在Persistent connection:所有连接默认就是持久连接,除非Connection首部包含Connection:close。

支持不同http协议版本的请求-相应端不应该建立持久连接,因为它们处理方式不一致。

服务端状态码及其含义:

100~199 信息状态码

200~299 成功状态码

300~399 重定向状态码

400~499 客户端错误状态码

500~599服务器错误状态码

你可能感兴趣的:(网络基础)