携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
HTTP 概述
HTTP是一种获取资源(如HTML文档)的协议。它是Web上任何数据交换的基础,是一种客户机-服务器协议,这意味着请求由收件人发起,通常是Web浏览器。从获取的不同子文档(例如,文本、布局描述、图像、视频、脚本等)重建完整的文档。
客户端和服务器通过交换单独的消息进行通信(与数据流相反)。客户端(通常是Web浏览器)发送的消息称为请求,服务器发送的消息作为应答称为响应。
HTTP设计于20世纪90年代初,是一种可扩展的协议,随着时间的推移而不断发展。它是通过TCP或TLS加密TCP连接发送的应用层协议,但理论上可以使用任何可靠的传输协议。由于其可扩展性,它不仅用于获取超文本文档,还用于图像和视频,或将内容发布到服务器,如HTML表单结果。HTTP还可以用于获取部分文档,以便根据需要更新网页。
基于 HTTP 的系统的组件
HTTP是一种客户机-服务器协议:请求由一个实体,即用户代理(或代表它的代理)发送。大多数情况下,用户代理是一个Web浏览器,但它可以是任何东西,例如,一个在Web上爬行以填充和维护搜索引擎索引的机器人。
每个单独的请求都被发送到服务器,由服务器处理并提供一个称为响应的答案。在客户端和服务器之间有许多实体,统称为代理,它们执行不同的操作,并充当网关或缓存。
实际上,在浏览器和服务器之间有更多的计算机处理请求:路由器、调制解调器等等。由于Web的分层设计,这些信息隐藏在网络和传输层中。HTTP位于应用层的顶部。虽然底层对于诊断网络问题很重要,但与HTTP的描述基本无关。
客户端:用户代理
用户代理是代表用户的任何工具。此角色主要由Web浏览器执行,但也可以由工程师和Web开发人员用于调试其应用程序的程序执行。
浏览器始终是发起请求的实体。它从来不是服务器(尽管多年来添加了一些机制来模拟服务器启动的消息)。
要显示网页,浏览器发送原始请求以获取表示该网页的HTML文档。然后它解析该文件,发出与执行脚本、要显示的布局信息(CSS)以及页面中包含的子资源(通常是图像和视频)相对应的附加请求。然后,Web浏览器组合这些资源以呈现完整的文档,即网页。浏览器执行的脚本可以在稍后阶段获取更多资源,并且浏览器相应地更新网页。
网页是一种超文本文档。这意味着显示内容的某些部分是链接,可以激活(通常通过单击鼠标)以获取新网页,从而允许用户引导其用户代理并在网络中导航。浏览器将这些指示转换为HTTP请求,并进一步解释HTTP响应,以向用户提供清晰的响应。
网络服务器
在通信通道的另一侧是服务器,它根据客户机的请求提供文档。一台服务器实际上只是一台机器;但它实际上可能是共享负载(负载平衡)的服务器的集合,或者是询问其他计算机(如缓存、DB服务器或电子商务服务器)的复杂软件,全部或部分按需生成文档。
服务器不一定是一台机器,但可以在同一台机器上托管多个服务器软件实例。使用HTTP/1.1和主机头,它们甚至可以共享相同的IP地址。
在通信通道的另一侧是服务器,它根据客户机的请求提供文档。一台服务器实际上只是一台机器;但它实际上可能是共享负载(负载平衡)的服务器的集合,或者是询问其他计算机(如缓存、DB服务器或电子商务服务器)的复杂软件,全部或部分按需生成文档。
服务器不一定是一台机器,但可以在同一台机器上托管多个服务器软件实例。使用HTTP/1.1和主机头,它们甚至可以共享相同的IP地址。
代理
在 Web 浏览器和服务器之间,许多计算机和计算机中继 HTTP 消息。由于Web堆栈的分层结构,其中大多数在传输,网络或物理级别运行,在HTTP层变得透明,并可能对性能产生重大影响。在应用程序层操作的代理通常称为代理。这些可以是透明的,转发他们收到的请求而不以任何方式改变它们,或者不透明,在这种情况下,他们会在将请求传递到服务器之前以某种方式更改请求。代理可以执行许多功能:
- 缓存(缓存可以是公共的,也可以是私有的,就像浏览器缓存一样)
- 过滤(如防病毒扫描或家长控制)
- 负载平衡(允许多个服务器处理不同的请求)
- 身份验证(用于控制对不同资源的访问)
- 日志记录(允许存储历史信息)