HTTP协议
基本概念
HTTP协议(Hypertext Transfer Protocol)是一种用于在计算机网络中传输超文本(例如HTML)的应用层协议。它是互联网上应用最广泛的协议之一,用于在客户端和服务器之间传输数据。
除了传输超文本外,HTTP协议还可以用于传输其他类型的数据,例如JSON、XML和图像等。它还支持缓存、认证和安全等特性,以满足不同应用场景的需求。
原理
HTTP协议的基本原理是客户端发起请求,服务器接收请求并返回响应。客户端通常是Web浏览器,服务器则是存储和提供Web资源的计算机。
HTTP消息结构
Request数据包
结构
- 请求行(Request Line)
请求方式 请求URL 请求协议/版本
POST /webtranslate HTTP/1.1
- 请求头(Request Headers)
请求头名称: 请求头值
Host: clear44.work
- 空行
请求头中的空行(CRLF,即回车符和换行符的组合)用于分隔请求头和请求体,起到标识两者之间的作用。
- 请求体(Request Body)
包含在HTTP请求中的可选部分,用于向服务器传输数据。请求体通常用于POST、PUT等请求方法,用于发送数据给服务器,其内容可以是纯文本、JSON、XML、表单数据等各种格式。通常,请求体的格式由请求头中的”Content-Type”字段指定,以便服务器正确解析和处理请求体的数据。
常见请求方法
HTTP协议共有8种请求方法,常用的有GET和POST。
- GET方法:
- GET方法用于请求获取指定资源的表示形式。
- 使用GET方法,客户端向服务器发送一个请求,服务器将返回请求资源的内容。
- GET请求通过URL中的查询参数(Query Parameters)将数据附加在URL上,发送给服务器。
- GET请求的特点是幂等和安全:
- 幂等性:多次重复的GET请求对服务器的状态不产生影响,即相同的请求重复发送多次,得到的结果应该是一样的,不会产生副作用。
- 安全性:GET请求仅用于获取资源,不会对服务器上的数据进行修改或副作用操作。
- POST方法:
- POST方法用于向服务器提交数据,通常用于创建新资源或执行需要传输数据的操作。
- 使用POST方法,客户端向服务器发送一个请求,将请求的数据包含在请求体中,而不是像GET请求那样附加在URL上。
- POST请求的数据通常以表单形式(如HTML表单)提交,也可以是JSON或其他格式的数据。
- POST请求的特点是非幂等和不安全:
- 非幂等性:多次重复的POST请求可能对服务器的状态产生影响,即相同的请求重复发送多次,可能会导致服务器上的资源状态改变或重复创建。
- 不安全性:POST请求用于发送数据,并且可能对服务器上的数据进行修改、副作用操作或其他不可预测的操作。
- PUT:用于向服务器更新指定资源的表示形式。PUT方法要求完整地替换指定资源的内容,如果资源不存在,则会创建新资源。
- DELETE:用于请求删除指定的资源。DELETE方法会删除服务器上的指定资源。
- PATCH:用于对服务器上的指定资源进行局部更新。PATCH方法类似于PUT方法,但是仅更新指定资源的部分内容。
- HEAD:类似于GET方法,但是服务器只返回响应头,不返回响应体。HEAD方法通常用于获取资源的元数据,如文件大小、最后修改时间等,而不需要获取实际的内容。
- OPTIONS:用于获取目标资源支持的通信选项,例如服务器支持的请求方法、响应头支持的字段等。
- TRACE:用于执行一个远程回环测试,服务器接收到TRACE请求后会将请求的内容返回给客户端,用于调试或诊断网络请求。
常见请求头
- Accept:指定客户端可接受的内容类型,用于告知服务器可以返回哪种媒体类型的响应。
- Accept-Encoding:指定客户端可接受的内容编码方式,用于告知服务器可以返回哪种压缩方式的响应。
- Accept-Language:指定客户端可接受的语言类型,用于告知服务器可以返回哪种语言的响应。
- Authorization:用于进行身份验证的凭证信息,通常用于需要用户认证的请求。
- Cache-Control:控制缓存机制的行为,如缓存的存储和过期策略。
- Content-Type:指定请求体中的数据类型,常用于POST请求,表示发送的数据的格式。
- Cookie:发送与请求相关的Cookie信息,用于在请求中传递客户端的状态信息。
- Host:指定目标服务器的主机名和端口号,用于指示请求的目标。
- If-Modified-Since:用于条件请求,表示如果自指定日期之后资源未修改,服务器返回304状态码。
- If-None-Match:用于条件请求,表示如果指定的实体标签未改变,服务器返回304状态码。
- Referer:指定当前请求的来源URL,用于追踪请求的引用来源。
- User-Agent:指定发送请求的用户代理(通常是浏览器)的相关信息。
- Origin:用于CORS(跨域资源共享)请求,表示请求的来源域。
- X-Requested-With:用于Ajax请求,表示请求是通过XMLHttpRequest对象发起的。
Response数据包
结构
- 状态行(Status Line)
HTTP协议版本 状态码 状态消息
HTTP/1.1 200 OK
响应头(Response Headers):包含关于响应的附加信息,如服务器类型、内容类型、响应时间等。每个响应头由键值对组成,每个键值对占一行。
空行:响应头和响应体之间需要有一个空行进行分隔。
响应体(Response Body):包含了服务器返回的实际内容,如HTML页面、JSON数据等。
常见状态码
1 | 1xx:信息性状态码,表示请求已被接收并继续处理。 |
- 200 OK
最常见的就是成功响应状态码200了,这表明该请求被成功地完成,所请求的资源发送回客户端。
- 302 Found
重定向,服务器返回新的URL在响应头Location中,浏览器将会自动使用新的URL发出新的Request。
- 304 Not Modified
代表所请求的文档已经被缓存了,还可以继续使用,若不想使用本地缓存,Ctrl+F5强制刷新页面。
- 400 Bad Request
客户端请求与语法错误,不能被服务器所理解
- 403 Forbidden
服务器收到请求,但是拒绝提供服务
- 404 Not Found
请求资源不存在(输错了URL)
- 500 Internal Server Error
服务器发生了不可预期的错误
- 503 Server Unavailable
服务器当前不能处理客户端的请求,一段时间后可能恢复正常
协议特点
- HTTP协议是无状态的。当客户端向服务器发送请求时,服务器接收并处理该请求,并向客户端返回响应。每个请求和响应都是独立的,服务器不会记住之前的请求或与之相关的信息。服务器在每个请求之间没有记忆能力,不知道请求是否来自同一个客户端,也不知道之前的请求和响应的内容。
- 这种无状态的设计使得HTTP协议具有简单、可伸缩和高效的特点。服务器不需要为每个客户端维护状态信息,从而降低了服务器的负担,并且可以更好地应对高并发的请求。另外,客户端和服务器之间的连接可以在每个请求之后关闭,不需要保持长时间的连接,从而节省了网络资源。
- 然而,由于HTTP是无状态的,它在处理某些任务时可能会遇到一些限制。例如,如果需要在多个请求之间保持用户的登录状态,服务器就需要引入一种机制来跟踪用户的会话,如使用Cookie或会话ID等方式来维护状态信息。
Browser & Proxy Server & Web Server
在Web应用中,浏览器通过发送HTTP请求与Web服务器通信,而代理服务器可以在客户端和服务器之间进行中间处理和传输。这些组件之间的关系可以形成一个典型的请求——代理——服务器链,以实现数据的传输和处理。
浏览器
功能
浏览器是客户端应用程序,用于向Web服务器发出HTTP请求并显示返回的内容。浏览器负责解析HTML、CSS和JavaScript等前端技术,将其渲染成可视化的网页。用户通过浏览器与Web服务器进行交互,点击链接、填写表单或执行其他操作,浏览器会相应地发送适当的HTTP请求,并显示服务器返回的结果。
工作流程
用户在浏览器中输入网址或点击链接,浏览器将该URL转换为HTTP请求。
浏览器通过网络将HTTP请求发送到目标服务器。
目标服务器接收到请求后,处理请求并生成HTTP响应。
目标服务器将HTTP响应发送回浏览器。
浏览器接收到响应后,解析HTML、CSS和JavaScript等内容,将其渲染成可视化的网页。
如果网页中包含其他资源(如图像、样式表、脚本等),浏览器会发出额外的HTTP请求以获取这些资源,并将其显示在页面上。
代理服务器
功能
代理服务器可以看作是网络信息的中转站,它在客户端和目标服务器之间扮演中间人的角色,具有以下功能:
- 缓存:代理服务器可以缓存经常请求的资源,例如网页、图像和文件等。当客户端再次请求相同的资源时,代理服务器可以直接返回缓存的副本,减少了对目标服务器的访问,提高了响应速度并减轻了服务器负载。
- 提高访问速度:代理服务器位于客户端和目标服务器之间,可以充当网络的缓冲区,通过缓存和压缩等技术来优化数据传输,从而提高访问速度。
- 安全性和隐私保护:代理服务器可以提供安全性和隐私保护的功能。它可以过滤恶意请求、拦截广告或恶意软件,保护目标服务器和客户端免受攻击。此外,代理服务器可以隐藏客户端的真实IP地址,提供匿名性,保护用户的隐私。
- 访问控制:代理服务器可以根据预设的规则和策略限制客户端对特定资源的访问权限。例如,它可以基于IP地址、用户身份验证或URL过滤来控制访问。
- 负载均衡:代理服务器可以将客户端的请求分发到多个目标服务器,实现负载均衡。通过合理地分配请求,代理服务器可以减轻单个服务器的负载,提高系统的性能和可靠性。
- 内容过滤和修改:代理服务器可以检查和修改客户端和服务器之间的数据流。它可以进行内容过滤,例如屏蔽特定网站或关键词,防止访问非法或不适宜的内容。代理服务器还可以对传输的数据进行压缩、加密、重编码或转换等操作,以满足特定需求。
工作流程
当浏览器发送HTTP请求时,请求首先到达代理服务器。
代理服务器检查请求,可能会对请求进行修改、验证或过滤。
如果代理服务器具有缓存功能,并且缓存中存在请求的副本,代理服务器可以直接返回缓存的响应,而无需将请求发送到目标服务器。
如果代理服务器没有缓存或缓存已过期,它将将修改后的请求发送到目标服务器。
目标服务器接收到来自代理服务器的请求,处理请求并生成HTTP响应。
目标服务器将HTTP响应发送回代理服务器。
代理服务器接收到响应后,可能会对响应进行修改、验证或过滤。
最后,代理服务器将响应发送回浏览器。
Web服务器
功能
Web服务器是存储和提供Web资源的计算机。它接收来自客户端(如浏览器)的HTTP请求,并返回相应的HTTP响应。Web服务器可以是物理服务器或虚拟服务器,常见的Web服务器软件包括Apache、Nginx和Microsoft IIS等。它们负责处理请求、与数据库交互、生成动态内容并将静态资源(如HTML、图像和文件)发送回客户端。
工作流程
当Web服务器接收到来自浏览器或代理服务器的HTTP请求时,它会解析请求,包括请求方法、URL和请求头等信息。
Web服务器根据请求的内容和配置文件(例如服务器脚本或数据库)处理请求。
如果请求的资源存在,Web服务器会生成HTTP响应,包括状态码、响应头和响应体。
Web服务器将HTTP响应发送回浏览器或代理服务器。
如果请求的资源不存在或出现错误,Web服务器会生成相应的错误响应。
Web服务器可以同时处理多个请求,并且可以与其他服务器或数据库进行交互来获取所需的数据。
URL
URL(Uniform Resource Locator)是统一资源定位符的缩写,是互联网上用于定位和访问资源的标识符。它是一种由特定字符组成的字符串,用于标识资源的位置和访问方式。
URL的结构
URL通常由以下几个部分组成:
- 协议(Protocol):指定访问资源所使用的协议,例如HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)等。
- 主机名(Host Name):指定资源所在的服务器的域名或IP地址。
- 端口(Port):可选部分,指定用于访问资源的端口号。如果未指定,默认使用协议的默认端口。
- 路径(Path):指定资源在服务器上的具体位置,可以是文件路径或目录路径。
- 查询字符串(Query String):可选部分,用于向服务器传递参数,多个参数之间使用”&”分隔。
- 片段标识符(Fragment Identifier):可选部分,指定资源中的一个片段或锚点,用于在文档中定位特定的部分。
示例
https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section1
- 协议为HTTPS
- 主机名为www.example.com
- 端口为8080
- 路径为/path/to/resource
- 查询字符串为param1=value1¶m2=value2
- 片段标识符为section1
通过解析URL,浏览器或其他网络应用程序可以确定资源的位置,并使用适当的协议进行访问和获取所需的内容。