那些冷门的HTTP知识点

稍微了解过Web开发相关技术的人都对于HTTP协议都不会陌生,HTTP是个简单易上手的文本协议,以至于可能很多人做了很久web开发,依然对于很多HTTP协议的知识点不慎了解,本文就讨论下那些关于HTTP协议的出镜率不那么高的一些知识点。

关于URL,可以把网站的网址URL分为三部分:

以 http://marvinio.com/2018/03/ubuntu-init-config/ 为例

Scheme:大家现在都对http习以为常,但是在更遥远的年代,比如我的大学时代,大家更喜欢使用ftp协议去服务器down各种资源,ftp也是类似http一种scheme,scheme会告知web客户端怎样访问服务器资源。

域名:域名是告诉客户端服务器在哪里,域名经过DNS服务器转换为IP,IP定位到服务器,80端口定位到Web应用。

资源路径:/2018/03/ubuntu-init-config/,找到了服务器之后,还有具体定位到资源的详细位置,这个由资源路径来指明,当然通过web服务器的重写(rewrite),用户客户端上看到的资源路径可能未必是真实的。

HTTP的性能聚焦区域:TCP协议

TCP连接建立握手;

TCP慢启动拥塞控制;

数据聚集的Nagle算法;

用于捎带确认的TCP延迟确认算法;

TIME_WAIT时延和端口耗尽。

Web服务器都做了什么

建立连接——接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。

接收请求——从网络中读取一条HTTP请求报文。

处理请求——对请求报文进行解释,并采取行动。

访问资源——访问报文中指定的资源。

构建响应——创建带有正确首部的HTTP响应报文。

发送响应——将响应回送给客户端。

记录事务处理过程——将与已完成事务有关的内容记录在一个日志文件中。

代理与网关的对比

严格来说,代理连接的是两个或多个使用相同协议的应用程序。

网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。

HTTP缓存的处理步骤(以一个GET报文的基本缓存处理过程为例)

接收——缓存从网络中读取抵达的请求报文。

解析——缓存对报文进行解析,提取出URL和各种首部。

查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)。

新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。

创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文。

发送——缓存通过网络将响应发回给客户端。

日志——缓存可选地创建一个日志文件条目来描述这个事务。

Content-Length与持久连接

Content-Length首部对于持久连接是必不可少的。如果响应通过持久连接传送,就可能有另一条HTTP响应紧随其后。客户端通过Content-Length首部就可以知道报文在何处结束,下一条报文从何处开始。因为连接是持久的,客户端无法依赖连接关闭来判别报文的结束。

如果主体进行了内容编码,Content-Length首部说明的就是编码后(encoded)的主体的字节长度,而不是未编码的原始主体的长度。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180524G1TUWV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券