HTTP协议 IV 识别,连接,认证与安全

声明的,无状态的

HTTP 本身是一种声明式的,不负责状态存储的协议。

其构造本身只提供了简单的控制/访问流程 (方法,路径,协议号,以及首部的控制字段 → 状态码,响应首部,以及可能存在的响应内容)。 这个过程中的所有内容都是描述性的,需要外部的介质(一般是一些中间设备如客户端代理,网关,防火墙,服务端等)根据其描述来完成保活,存储,状态保存等一系列扩展功能。

状态存储

在面向应用的协议中,状态存储是一个很重要的属性。通过对状态的存储,可以为用户和服务端提供许多有用的扩展,如用户的个性化定制,会话的管理等。

HTTP首部

From 一般会用来承载一个邮箱地址

User-Agent 告知用户浏览器的相关信息

IP 地址

Authenticate 传输认证相关信息

cookie是服务器端在客户端安置的小型存储

cookie描述了一些键值信息,可以供服务器进行访问查询确认用户的信息

1
2
3
4
5
NAME=VALUE   键值描述
Expire 过期日期
Domain 定义Cookie生效的作用域
Path 定义在某个路径下Cookie会生效
Secure 定义后,只有在TLS/SSL生效后才会发送cookie

认证

Web应用程序收到一条HTTP请求报文时,服务器没有按照请求执行动作,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明他是谁,从而对其进行质询。

用户再次发起请求时,要附上保密证书(用户名和密码)。如果证书不匹配,服务器可以再次质询客户端,或产生一条错误信息。如果证书匹配,就可以正常完成请求了。

基本认证

  1. 客户端发送访问请求
  2. 服务端返回未授权,说明客户需求提供对应的用户名和密码
  3. 客户端重新发送带有认证信息的请求
  4. 服务端验证后正确则回复认证成功的响应

Base-64

将 8位数据转换为6位编码,用64个字符重新表示

基本认证存在很多缺陷,明文传输,以及在过于复杂的网络环境中有被监听和篡改报文的风险

摘要认证

客户端发送请求信息

1
2
GET /protected/resource HTTP/1.1
Host: example.com

服务器响应请求,请求进行授权认证

1
2
3
4
5
6
7
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="example.com",
nonce="abc123", ← 服务端生成的随机数,防止重放攻击
qop="auth",
algorithm=MD5

客户端对收到的随机数 和本地密码进行MD5计算,响应

1
2
3
4
5
6
7
8
9
10
Authorization: Digest
username="alice",
realm="example.com",
nonce="abc123",
uri="/protected/resource",
response="dcd98b7102dd2f0e8b11...", ← 由客户端计算出的摘要
qop=auth,
nc=00000001,
cnonce="xyz789"

字段与功能点

字段名 所在报文 典型组合 对应功能
Connection+Upgrade 请求 & 响应 Connection: Upgrade,Upgrade: websocket 协议升级机制(如 HTTP → WebSocket)
Host 请求头 - 虚拟主机路由(同 IP 多域名支持)
Content-Type+Content-Length 请求/响应 Content-Type: application/json 请求体格式标识与数据边界控制
Transfer-Encoding 响应头 Transfer-Encoding: chunked 分块传输机制(适合大文件/流式内容)
Cookie+Set-Cookie 请求 + 响应 Set-Cookie: sessionId=abc123 客户端会话状态管理
Authorization+WWW-Authenticate 请求 + 响应 Authorization: Bearer <token> 身份验证机制(如 OAuth、Basic)
ETag+If-None-Match 响应 + 请求 ETag: "123abc" 协商缓存:基于内容校验
Last-Modified+If-Modified-Since 响应 + 请求 Last-Modified: Tue, 12 May 2025 10:00:00 GMT 协商缓存:基于时间戳
Cache-Control 请求/响应 Cache-Control: no-cache 缓存行为控制(是否缓存、最大时长)
Accept+Content-Type 请求 + 响应 Accept: application/json 内容协商机制
Accept-Encoding+Content-Encoding 请求 + 响应 Content-Encoding: gzip 压缩格式协商
Accept-Language 请求头 - 响应语言偏好协商
Origin+Access-Control-* 请求 + 响应 Access-Control-Allow-Origin: * CORS 跨域访问控制
Referer 请求头 - 来源追踪、防盗链、分析跳转
Location+3xx状态码 响应头 Location: <https://new.url> 重定向机制
X-Forwarded-For 请求头 - 获取客户端真实 IP(经代理)
X-Requested-With 请求头 X-Requested-With: XMLHttpRequest AJAX 请求标识

长连接

将HTTP 会话变为维持TCP连接,从请求-响应-关闭 变为 请求-响应-等待超时-关闭

HTTPS

重定向与负载均衡

HTTP重定向

1
2
实现 :服务器接收HTTP请求,服务器返回重定向消息,客户端将请求重新发送到选中服务器
局限 :服务器需要可以对请求进行处理,且重定向步骤较多

客户端 发送请求报文 :

1
2
3
GET /hammers.html HTTP/1.0
Host: www.joes-hardware.com
User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

服务端响应一个重定向报文

1
2
3
HTTP/1.0302 Redirect
Server: Stronghold/2.4.2 Apache/1.3.6
Location: <http://161.58.228.45/hammers.html>

客户端向服务端提供的重定向地址重新发送请求

1
2
3
GET /hammers.html HTTP/1.0
Host: 161.58.228.45
User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

DNS重定向

1
2
实现 :DNS服务器决定URL的主机名中返回IP地址中的哪一个
局限 :需要配置DNS服务器

IP MAC转发

1
2
实现 :通过绑定目的IP到对应的MAC地址
局限 :同一广播域内

IP 地址转发

1
2
实现 :通过识别目的端口,重定向IP地址到代理或镜像服务器
局限 :服务器或代理看不到真正的客户端IP地址

HTTP协议 IV 识别,连接,认证与安全
http://gadoid.io/2025/05/13/HTTP协议-IV-识别,连接,认证与安全/
作者
Codfish
发布于
2025年5月13日
许可协议