HTTP协议
超文本传输协议(Hypertext Transfer Protocol ),它定义了浏览器怎样向万维网请求万维网文档,以及怎样把万维网服务器文档传送给浏览器。
HTTP协议使用URL(Uniform Resource Locator)来定位互联网上的资源。URL由协议类型、服务器地址、端口号和资源路径组成。例如,http://www.example.com/index.html
一个URL,其中http
是协议类型,www.example.com
是服务器地址,index.html
是资源路径。
HTTP是一种无状态协议,服务器不会在两个请求之间保留任何数据(状态)。
HTTP遵循经典的客户端-服务器模型,客户端打开连接发出请求,然后等待直到收到响应。客户端发送一个HTTP请求到服务器,请求可以是获取某个资源、提交表单数据等。服务器接收到请求后,根据请求的内容进行处理,并返回一个HTTP响应给客户端。响应包含一个状态码、响应头和响应体。状态码表示请求的处理结果,响应头包含一些元数据信息,响应体则是实际的数据内容。
HTTP协议中常见的方法:
HTTP协议还支持缓存、Cookie、会话管理等功能,可以通过请求头和响应头来进行配置和控制。此外,HTTP协议还可以使用HTTPS进行加密传输,以保证数据的安全性。
为什么需要协议?
协议是用来描述进程之间信息交换数据时的规则术语。在计算机网络中,两个相互通信的实体处在不同的地理位置,其上的两个进程相互通信,需要通过交换信息来协调它们的动作和达到同步,而信息的交换必须按照预先共同约定好的过程进行。总之,通过约定协议,确保数据的可靠传输,实现数据的交换与共享。
协议里都有什么?
HTTP协议的请求流程
- 业务层:在业务层,应用程序需要发送HTTP请求来获取或提交数据。这些请求通常由应用程序的业务逻辑触发,例如用户在浏览器中点击链接或提交表单。应用程序构造HTTP请求,并将其发送到服务治理层/中间件层。
- 服务治理层/中间件层:在服务治理层/中间件层,HTTP请求可能会经过一系列的中间件组件,用于处理请求的前置和后置逻辑。这些中间件组件可以包括身份验证、授权、日志记录、缓存等功能。它们可以对请求进行预处理、校验、转发等操作,以提供额外的功能和增强性能。
- 路由层:在路由层,HTTP请求需要被路由到正确的目标服务器。这通常由负载均衡器或路由器来完成。负载均衡器根据预定义的策略,将请求转发到多个后端服务器中的其中一个。这样可以实现请求的分发和负载均衡,以提高系统的可伸缩性和性能。
- 协议编解码层:在协议编解码层,HTTP请求的数据需要进行编码和解码。编码将请求的各个部分转换为字节流,以便在网络上传输。解码将接收到的字节流转换回原始的请求格式,以便服务器能够理解和处理。这个过程通常由HTTP客户端和服务器的库或框架来处理。
- 传输层:在传输层,HTTP请求使用TCP/IP协议进行传输。TCP/IP协议负责将请求数据分割成小的数据包,并在网络上进行传输。这些数据包在网络中经过路由器、交换机等设备,最终到达目标服务器。一旦到达服务器,TCP/IP协议将数据包重新组装成完整的请求。
HTTP框架的设计
分层设计
HTTP框架采用分层设计,各层之间通过 API 通信,这样提高了代码的复用性和拓展性。
- 应用层——提供合理的API,确保可理解性、简单性、冗余性、兼容性、可测性和可行性
- 中间件层——对请求进行预处理和后处理
- 路由层——为 url 请求匹配相应的
Handler
处理函数 - 协议层——抽象出合适的接口,在连接上读取数据
- 传输层——为网络I/O提供了一个可移植的接口,包括TCP/IP、UDP、域名解析和Unix域套接字