免责声明:文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行负责。如有侵权烦请告知,我会立即删除并致歉。谢谢!
在数字化世界中,HTTP 协议和 URL 是两个不可或缺的元素。它们共同构成了我们日常浏览网页的基础。今天,我们就来深入解析一下这两个概念。
HTTP 协议:速度与效率的代名词
HTTP,全称超文本传输协议(HyperText Transfer Protocol),是一种应用层的协议,它基于 TCP/IP 协议族进行通信。HTTP 协议的主要作用就是保证客户端和服务器之间的通信。无论是我们访问一个网页,还是从一个网页跳转到另一个网页,背后都是 HTTP 协议在默默地工作。
HTTP 协议的一个显著特点就是快。为了实现这一目标,HTTP 协议在设计和实现上做了很多优化。例如,它支持持久连接,这意味着客户端和服务器之间的连接可以保持一段时间,而不需要为每一个请求都重新建立连接。此外,HTTP/2 还引入了多路复用、头部压缩等技术,进一步提升了传输效率和性能。
URL:资源的全球唯一标识
URL,即统一资源定位符(Uniform Resource Locator),是互联网上用来标识某一资源的地址。通过 URL,我们可以告诉 Web 容器(如浏览器)我们想要访问的资源是什么,以及这个资源在哪里。
一个完整的 URL 通常由以下几部分组成,以下是一个URL模板的示例:
schema://login:password@address:port/path?query_string#fragment
-
schema
:协议,如http
或https
。 -
login
和password
:可选的用户名和密码,用于身份验证。 -
address
:域名或 IP 地址,表示服务器的位置。 -
port
:端口号,用于指定服务器上的特定服务。 -
path
:资源的路径,如/index.html
。 -
query_string
:查询字符串,用于传递参数。 -
fragment
:锚点,用于指定页面中的特定位置。
值得注意的是,URL 中并不是所有字符都可以直接使用。为了保证 URL 的正确性和安全性,一些特殊字符需要进行 URL 编码。编码后的字符通常以 %
开头,后面跟着两个十六进制数字。
请求报文分析:从请求行到请求正文
当我们通过浏览器访问一个 URL 时,浏览器会向服务器发送一个 HTTP 请求。这个请求由请求行、请求头和请求正文三个部分组成。
-
请求行:HTTP 请求的第一行,包含了请求方法(如 GET 或 POST)、资源路径和协议/版本等信息。
请求方法:GET /POST
-
资源路径:/admin
协议/版本:HTTP/1.1
-
请求头:从请求报文的第二行开始,到第一个空行为止。请求头中包含了关于请求的附加信息,如 Host、User-Agent、Referer、Cookie 等。这些字段可以帮助服务器更好地理解和处理请求。
字段 含义 Host 主要用于指定被请求资源的服务器地址和端口号 User-Agent 客户端浏览器信息,浏览器指纹 Referer 包含一个URL,代表当前URL的上一个URL Cookie 记录请求者的身份认证信息 Accept-Charset 用于指定浏览器接收的字符集 Content-Type 用于向接收方 (浏览器或服务器) 指示实体的介质类型 (数据类型,MIME) Content-Length 用于指明实体正文的长度,以字节方式存储的十进制数字来表示 Last-Modified 用于指示资源的最后修改时间 -
请求正文:从第一个空行开始以后的所有内容。通常 GET 请求正文=空。但对于 POST 请求,请求正文通常包含提交给服务器的数据。
响应报文:从状态码到内容
服务器在收到请求后,会返回一个 HTTP 响应。这个响应同样由响应报头、响应报文和状态码等部分组成。
-
响应报头:与请求报头类似,响应报头也包含了关于响应的附加信息,如 Content-Type、Content-Length 等。
响应报文:服务器返回给客户端的实际内容。对于 HTML 页面来说,响应报文通常就是页面的源代码。
状态码:一个三位数的数字,用于表示请求的处理结果。根据状态码的不同,我们可以知道请求是否成功、是否需要重定向、是否发生了错误等信息。
状态代码 类型 1XX 信息类状态码 2XX 成功类状态码 3XX 重定向状态码 4XX 客户端错误状态码 5XX 服务器错误状态码
原文始发于微信公众号(Adler学安全):HTTP 协议与 URL 的深入解析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论