3月阅读周·HTTP权威指南:Web服务器之接受客户端连接篇
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解...
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
Web服务器
Web服务器每天会分发出数十亿的Web页面。这些页面可以告诉你天气情况,装载在线商店的购物车,还能帮你找到许久未联系的高中同学。Web服务器是万维网的骨干。
实际的Web服务器会做些什么
Perl服务器是一个Web服务器的小例子。最先进的商用Web服务器要比它复杂得多,但它们确实执行了几项同样的任务:
(1) 建立连接——接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
(2)接收请求——从网络中读取一条HTTP请求报文。
(3)处理请求——对请求报文进行解释,并采取行动。
(4)访问资源——访问报文中指定的资源。
(5)构建响应——创建带有正确首部的HTTP响应报文。
(6)发送响应——将响应回送给客户端。
(7)记录事务处理过程——将与已完成事务有关的内容记录在一个日志文件中。
接受客户端连接
如果客户端已经打开了一条到服务器的持久连接,可以使用那条连接来发送它的请求。否则,客户端需要打开一条新的到服务器的连接。
处理新连接
客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。一旦新连接建立起来并被接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备。
Web服务器可以随意拒绝或立即关闭任意一条连接。有些Web服务器会因为客户端IP地址或主机名是未认证的,或者因为它是已知的恶意客户端而关闭连接。Web服务器也可以使用其他识别技术。
客户端主机名识别
可以用“反向DNS”对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。Web服务器可以将客户端主机名用于详细的访问控制和日志记录。但要注意的是,主机名查找可能会花费很长时间,这样会降低Web事务处理的速度。很多大容量Web服务器要么会禁止主机名解析,要么只允许对特定内容进行解析。
可以用配置指令HostnameLookups启用Apache的主机查找功能。
例1-1 配置Apache,为HTML和CGI资源查找主机名
HostnameLookups off
<Files ~ "\.(html|htm|cgi)$">
HostnameLookups on
</Files>
通过ident确定客户端用户
有些Web服务器还支持IETF的ident协议。服务器可以通过ident协议找到发起HTTP连接的用户名。这些信息对Web服务器的日志记录特别有用——流行的通用日志格式(Common Log Format)的第二个字段中就包含了每条HTTP请求的ident用户名。
如果客户端支持ident协议,就在TCP端口113上监听ident请求。客户端打开了一条HTTP连接。然后,服务器打开自己到客户端ident服务器端口(113)的连接,发送一条简单的请求,询问与(由客户端和服务器端口号指定的)新连接相对应的用户名,并从客户端解析出包含用户名的响应。
ident在组织内部可以很好地工作,但出于多种原因,在公共因特网上并不能很好地工作,原因包括:
- 很多客户端PC没有运行ident识别协议守护进程软件;
- ident协议会使HTTP事务处理产生严重的时延;
- 很多防火墙不允许ident流量进入;
- ident协议不安全,容易被伪造;
- ident协议也不支持虚拟IP地址;
- 暴露客户端的用户名还涉及隐私问题。
总结
可以通过Apache的IdentityCheck on指令告知Apache Web服务器使用ident查找功能。如果没有ident信息可用,Apache会用连字符(-)来填充ident日志字段。由于没有ident信息可用,在使用通用日志格式的日志文件中,第二个字段通常都是连字符。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)