根据以往的内容我们可以得知,大多数网络协议一共有五层标准,今天我们将 探索 应用层的 HTTP 协议。
一 什么是HTTP协议
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
HTTP 协议 ,全称超文本传输协议 ,顾名思义,他是一种规范了 超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器 的协议。
HTTP协议有众多版本,目前使用 最多的是 HTTP/1.1 版本 ,其它版本我们不做解释。
(其实目前我们使用最多的是 HTTPS 协议,但其实就是HTTP 加上了加密和认证机制,底层还是HTTP协议,因此我们也不做太多解释,只讲HTTP)
二 Web服务器,浏览器,代理服务器
当我们打开浏览器,在地址栏中输入网址,然后我们就看到了网页。 原理是怎样的呢?
实际上我们输入网址后,我们的浏览器给Web服务器发送了一个Request 请求, Web服务器接到Request 后进行处理,生成相应的 Response,然后发送给浏览器, 浏览器解析 Response 中的HTML,提取出网页资源,这样我们就看到了网页,过程如下图所示:
我们的浏览器就是一个客户端,Request 请求就是请求服务器给予客户端资源,response服务器给我们的资源。
当然,我们的 Request 有可能是经过了代理服务器,最后才到达Web服务器的。
过程如下图所示:
代理服务器就是网络信息的中转站,有什么功能呢?
1. 提高访问速度, 大多数的代理服务器都有缓存功能,代理服务器被众多用户使用,当申请频率较高的资源(网页)时,可以直接从代理服务器返回Response。
2. 突破限制, 也就是翻墙了。
3. 隐藏身份。(这两点我们以后再讲)
三 URL详解
3.1 URL的概念(网址)
URL(Uniform Resource Locator)是统一资源定位符,用于在互联网上标识和定位资源的地址。每个资源在互联网上都有一个唯一的URL,它包含了访问该资源所需的所有信息,如协议、服务器地址、端口号、路径和文件名等。
3.2 URL的组成部分
URL的组成部分
- 协议(Protocol):指定了资源访问所使用的传输协议,如HTTP、HTTPS、FTP等。例如,
http://
表示通过HTTP协议访问资源。- 主机(Host): 资源的服务器地址,可以是域名或IP地址。例如
www.baidu.com
。- 端口(Port):指定服务器上特定服务的端口号,默认端口通常是80。例如,
8080
表示使用8080端口。- 路径(Path):指定资源在服务器上的具体位置。例如,
/Public/linux/
表示资源位于服务器的Public/linux目录下。- 查询字符串(Query String):附加在URL末尾,用于传递参数给服务器。例如,
?param=value
。- 锚点(Anchor):用于页面内的定位,通常以
#
符号后跟一个标识符表示。例如,#section1
。
3.3 URL的格式和语法
URL的一般语法格式为:
protocol://hostname[:port]/path/[:parameters][?query]#fragment
其中,带方括号的部分是可选的。例如:
https://www.baidu.com/Public/linux/?fr=aladdin#23
在这个例子中,https
是协议,www.baidu.com
是主机名,端口号默认省略(HTTP默认端口80),/Public/linux/
是路径,?fr=aladdin
是查询字符串,#23
是锚点。
3.4 URL的应用场景和重要性
URL在互联网中起着至关重要的作用,它不仅方便用户通过浏览器访问特定的网页或资源,也为开发者提供了一种标准的方式来定位和引用资源。通过URL,可以建立与服务器上具体资源的映射关系,实现资源的访问和交互。
四 HTTP的工作原理
HTTP 协议基于客户端-服务器模型,遵循请求-响应的循环:
- 客户端发起连接: 客户端(例如浏览器)向服务器发送一个 TCP 连接请求,指定服务器的 IP 地址和端口号(HTTP 默认端口号为 80,HTTPS 默认端口号为 443)。
- 服务器接受连接: 服务器接受客户端的连接请求,建立 TCP 连接。
- 客户端发送请求: 客户端通过已建立的 TCP 连接向服务器发送 HTTP 请求消息。请求消息包含请求方法、URL、HTTP 版本、请求头和可选的请求体。
- 服务器处理请求: 服务器接收并解析客户端的 HTTP 请求,根据请求内容执行相应的操作,例如读取文件、查询数据库、运行程序等。
- 服务器返回响应: 服务器处理完请求后,向客户端返回 HTTP 响应消息。响应消息包含状态码、HTTP 版本、响应头和可选的响应体。
- 连接关闭(可选): 在 HTTP/1.0 中,连接通常在一次请求-响应后关闭。HTTP/1.1 引入了持久连接,允许在单个 TCP 连接上发送多个请求和响应,提高了效率。HTTP/2 和 HTTP/3 进一步增强了连接管理,允许多路复用,进一步提升性能。
五 HTTP 请求组成
HTTP 请求由几个关键部分组成,共同决定了服务器如何处理请求:
5.1 请求方法
请求方法 (Method): 指示要执行的操作类型。以下是常用的 HTTP 方法以及它们在增删改查中的应用:
- GET: 用于查询资源。它应该只用于检索数据,不应有任何副作用。请求参数通常附加在 URL 中。例如:GET /users?id=1。
- POST: 用于增加新资源或提交数据。请求数据包含在请求体中,可以是各种格式,例如表单数据、JSON 等。例如:POST /users (提交新用户数据)。
- PUT: 用于改更新现有资源。它要求客户端提供完整的资源表示。通常用于更新整个资源。例如:PUT /users/1 (更新 ID 为 1 的用户)。
- PATCH: 用于改更新现有资源的部分内容。它只提供需要修改的字段,比 PUT 更高效。例如:PATCH /users/1 (更新 ID 为 1 的用户的某些字段)。
- DELETE: 用于删除资源。例如:DELETE /users/1 (删除 ID 为 1 的用户)HEAD: 类似于 GET,但只返回响应头,不返回响应体。用于检查资源是否存在或获取元数据。
- OPTIONS: 用于查询服务器支持的 HTTP 方法。例如:OPTIONS /users。
- CONNECT: 用于建立到服务器的隧道连接,通常用于代理服务器。
- TRACE: 用于诊断,客户端可以查看服务器收到的请求。
5.2 其它组成
1. URL (Uniform Resource Locator): 指定要访问的资源位置。
2. HTTP 版本: 指定使用的 HTTP 协议版本,例如 HTTP/1.1、HTTP/2 或 HTTP/3。
3. 请求头 (Headers): 包含额外的元数据,例如客户端信息、可接受的编码格式、缓存控制等。一些常见的请求头包括:
- User-Agent: 标识客户端(例如浏览器)的类型和版本。
- Accept: 指定客户端可接受的响应内容类型。
- Content-Type: 指定请求体的数据类型。
- Authorization: 用于身份验证。
- f-Modified-Since: 用于条件请求,仅当资源在指定日期之后修改过才返回。
4.请求体 (Body): 可选部分,包含要发送的数据,例如表单数据、JSON 数据等。通常用于 POST、PUT 和 PATCH 请求。
六 HTTP 响应
服务器在收到请求后返回一个 HTTP 响应,包含以下部分:
6.1 状态码
状态码 (Status Code): 指示请求的结果。状态码分为五类:
1. 1xx (信息性): 表示请求已接收,继续处理。例如:100 Continue
2. 2xx (成功): 表示请求成功。
- 200 OK: 请求成功。
- 201 Created: 资源已创建。
- 204 No Content: 请求成功,但没有响应体。
3.3xx (重定向): 表示需要进一步操作以完成请求。
- 301 Moved Permanently: 资源永久移动到新位置。
- 302 Found: 资源临时移动到新位置。
- 304 Not Modified: 资源未修改,客户端可以使用缓存版本。
4. 4xx (客户端错误): 表示客户端请求有误。
- 400 Bad Request: 请求语法错误。
- 401 Unauthorized: 未授权。
- 403 Forbidden: 禁止访问。
- 404 Not Found: 资源未找到。
- 405 Method Not Allowed: 请求方法不被允许。
5. 5xx (服务器错误): 表示服务器端发生错误。
- 500 Internal Server Error: 服务器内部错误。
- 502 Bad Gateway: 网关错误。
- 503 Service Unavailable: 服务不可用。
6.2 其它组成
1.HTTP 版本: 指定使用的 HTTP 协议版本。
2.响应头 (Headers): 包含额外的元数据,例如内容类型、内容长度、缓存控制等。一些常见的响应头包括:
- Content-Type: 指定响应体的数据类型。
- Content-Length: 指定响应体的长度。
- Cache-Control: 指定缓存策略。
- Set-Cookie: 设置 Cookie。
3.响应体 (Body): 包含服务器返回的数据,例如 HTML 页面、JSON 数据等。