Contents
Open Contents
应用层基础概念
URL 是什么?它的组成结构是什么?
URL(统一资源定位器)是互联网上唯一资源的地址。它是浏览器用来检索已发布资源的关键机制之一,例如 HTML 页面、CSS 文档、图像等。理论上,每个有效的 URL 都指向一个唯一的资源。在实践中,有一些例外,最常见的是指向不再存在或已移动的资源的 URL,它们指向的文件可能已经被重定位到另一个位置,这样就有多个 URL 指向同一个文件。
- 协议(Scheme):指定用于访问资源的协议类型,常见的有
http://、https://、ftp://、file://、mailto:等。其中http是超文本传输协议,而https是安全版本,使用 SSL/TLS 加密来保护数据传输的安全性。协议后面通常跟着://分隔符,这是 URL 结构中的重要标识。 - 域名(Domain Name):标识服务器在互联网上的位置,由多个部分组成并用点号分隔。例如在
www.example.com中,com是顶级域名,example是二级域名,www是子域名。域名通过 DNS 系统解析为对应的 IP 地址,这样浏览器才能找到正确的服务器位置。 - 端口(Port):指定服务器上运行特定服务的端口号,HTTP协议默认使用80端口,HTTPS 协议默认使用443端口。当使用默认端口时,端口号可以省略不写,格式为域名后加冒号,如
:8080表示使用8080端口。 - 资源路径(Path to the file):指定服务器上资源的具体位置,类似于文件系统中的路径结构。路径以
/开头,表示从服务器根目录开始,例如/images/logo.png表示服务器根目录下 images 文件夹中的 logo.png 文件,/api/users表示 API 接口路径。 - 参数(Parameters):也称为查询字符串(Query String),以
?开头并包含键值对形式的参数。多个参数之间用&连接,用于向服务器传递额外的信息,例如?name=value&id=123表示传递 name 和 id 两个参数给服务器。 - 锚点(Anchor):也称为片段标识符(Fragment Identifier),以
#开头,用于定位页面内的特定位置。锚点不会发送到服务器,仅在客户端浏览器中使用,例如#section1可以跳转到页面中 id 为 section1 的元素位置。
HTTP 与 HTTPS 协议是什么?
HTTP 协议
超文本传输协议(HTTP,HyperText Transfer Protocol) 是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。HTTP 使用客户端-服务器模型,客户端向服务器发送 HTTP Request(请求),服务器响应请求并返回 HTTP Response(响应)。过程如下:
HTTP 的请求示例:
- Method:请求方法,例如 GET、POST、PUT、DELETE
- Path:请求路径,例如 /、/api/users
- Protocol version:协议版本,例如 HTTP/1.1、HTTP/2
- Headers:请求头,例如 Host、Accept-Language、User-Agent、Content-Type 等
HTTP 响应示例:
- Protocol version:协议版本,例如 HTTP/1.1、HTTP/2
- Status code:状态码,例如 200、404、500
- Status message:原因短语,例如 OK、Not Found、Internal Server Error
- Headers:响应头,例如 Content-Type、Content-Length、Set-Cookie、Cache-Control 等
HTTP 的主要特点:
- 简单可扩展:HTTP 的报文格式非常直观,请求和响应的头部(Headers)都是 Key: Value 的形式,易于人类阅读和理解。同时,开发者可以自定义头部字段,来增加新的功能,扩展性很强。
- 无状态(Stateless):“无状态”意味着服务器不会记录任何关于客户端之前请求的信息,需借助 Cookie/Session/Token 维持登录等状态。
- 基于 TCP/QUIC 协议:HTTP/1.1 与 HTTP/2 运行在 TCP 之上,HTTP/1.1 通过 Keep-Alive 复用连接但易受队头阻塞影响;HTTP/2 在单个 TCP 连接内多路复用并压缩头部以提升并发与效率,但仍受 TCP 级队头阻塞约束。需要注意,HTTP/3 改为运行在基于 UDP 的 QUIC 之上(保持 HTTP 语义),减少握手时延并从传输层消除队头阻塞。
HTTPS 协议
HTTPS 协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。
SSL/TLS 的工作原理:SSL/TLS 的核心在于一个叫做“握手 (Handshake)”的过程。这个过程的目标是让客户端和服务器在不安全的网络上,安全地协商出一个共享的、对称的加密密钥。一旦握手成功,后续的所有通信都用这个密钥来加密。
这个过程非常精妙,我们可以简化为以下几个步骤:
准备阶段: 网站运营者需要向一个叫做 CA (Certificate Authority,证书颁发机构) 的权威机构申请一张数字证书。这张证书里包含了网站的域名、一个公钥 (Public Key),以及 CA 对此证书的数字签名。网站服务器会保存这个证书和与之配对的私钥 (Private Key)。
握手过程:
- 客户端问好 (Client Hello)
- 你的浏览器向服务器发送一个消息,说:“你好,我想建立一个安全连接。我支持这些加密算法(比如 AES、RSA),这里还有一个随机数(Client Random)。”
- 服务器回应与出示证书 (Server Hello & Certificate)
- 服务器收到后,回应说:“你好,咱们就用你列表里的这个加密算法吧。这是我的‘身份证’(数字证书),里面有我的公钥。这里也有一个我的随机数(Server Random)。”
- 客户端验证与密钥交换 (Client Verification & Key Exchange)
- 验证身份:浏览器会检查服务器发来的证书。
- 证书是否过期?
- 证书上的域名和正在访问的域名是否匹配?
- 证书是不是由一个受信任的 CA 颁发的?(你的操作系统和浏览器里内置了一份受信任的 CA 列表)。
- 如果验证通过,浏览器就确认了服务器的身份是可信的。
- 生成“暗号”:浏览器再生成一个随机数(Pre-master Secret)。这个数是后续生成最终加密密钥的关键。
- 安全地发送“暗号”:浏览器用从证书里拿到的公钥,将这个“暗号”加密,然后发送给服务器。
- 验证身份:浏览器会检查服务器发来的证书。
- 服务器解密与生成会话密钥 (Server Decryption & Session Key Generation)
- 服务器收到加密的“暗号”后,用自己的私钥进行解密,从而得到了和浏览器一样的那个“暗号”(Pre-master Secret)。
- 现在,客户端和服务器都拥有了三个相同的信息:Client Random、Server Random 和 Pre-master Secret。
- 双方使用一个预先商定好的算法,将这三个数混合在一起,各自独立地计算出最终用于通信的会话密钥 (Session Key)。
- 握手完成 (Handshake Finished)
- 双方互相发送一条用刚刚生成的会话密钥加密的消息,告诉对方:“我这边准备好了,咱们开始用这个新密钥加密通信吧。”
- 如果对方能成功解密,就证明握手成功。
之后的所有通信(比如 HTTP 请求和响应),都会使用这个会话密钥进行对称加密,既高效又安全。