概述

HTTP(HyperText Transfer Protocol)是应用层协议,默认端口 80,明文传输。特点是无状态、无连接、明文不安全

理解 HTTP 是学 Web 安全的第一步 —— 抓包、改包、重放、接口调试、挖漏洞全靠它。

HTTP 整体流程

  1. 建立 TCP 三次握手(传输层连接)
  2. 直接在 TCP 连接上传输 HTTP 明文内容(无加密、无 TLS 握手)
  3. 按 HTTP 标准格式完成请求/响应
  4. 通信完成后,发起 TCP 四次挥手断开连接

请求结构

1
2
3
4
5
6
7
POST /user/login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Content-Type: application/x-www-form-urlencoded
Cookie: SESSIONID=abc123

username=admin&password=123456

1. 请求行

  • 请求方法GET / POST / PUT / DELETE
  • 请求 URL/user/login
  • HTTP 版本HTTP/1.1HTTP/2

2. 请求头

头部 作用
Host 目标主机
User-Agent 客户端标识(浏览器类型)
Cookie 用户身份/登录状态
Referer 从哪个页面跳过来
Content-Type 请求体的数据类型

3. 空行(必须有)

4. 请求体

传给服务器的数据:登录账号密码、表单内容、上传的文件、JSON 数据等。

1
{ "username": "admin", "password": "123456" }

记忆规则

  • GET没有请求体
  • POST / PUT / PATCH → 一般有请求体

常用请求方法

方法 用途 特点
GET 获取资源 参数在 URL 中,可缓存
POST 提交数据 参数在请求体,相对安全
PUT 完整覆盖修改 幂等
PATCH 局部修改 只改某个字段
DELETE 删除资源 幂等
HEAD 只拿响应头 探活、省流量
OPTIONS 问支持哪些方法 跨域预检

响应结构

1
2
3
4
5
6
HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: text/html; charset=utf-8
Set-Cookie: session=abc123

<html>...</html>

常见状态码

2xx 成功

  • 200 OK — 请求成功

3xx 重定向

  • 301 — 永久重定向(换域名)
  • 302 — 临时重定向
  • 304 — 资源没变,用本地缓存

4xx 客户端错误

  • 400 — 请求参数错误
  • 401 — 未登录/没 token
  • 403 — 禁止访问(登录了但没权限)
  • 404 — 资源不存在
  • 405 — 方法错误(该用 POST 却发了 GET)

5xx 服务端错误

  • 500 — 服务器内部错误(代码报错/数据库崩了)
  • 502 — 网关错误(超时/负载/挂了)
  • 503 — 服务器维护中

连状态码都没拿到的情况

  • 无法连接 / DNS 解析失败 / 超时
  • 这是网络层面就断了,HTTP 请求根本没到达服务器

为什么 HTTP 不够安全

  • 明文传输:易被窃听、篡改、劫持
  • 无加密:中间人可以随意修改
  • 无身份校验:无法确认通信对方是否伪冒

现在 Web 已逐步迁移到 HTTPS(443 端口)


渗透测试要点

  1. Burp Suite 抓包,分析请求/响应结构
  2. 重点关注 Cookie、Authorization、Referer 等头部
  3. 修改参数值测试是否存在注入、越权、XSS
  4. 观察状态码变化判断后端行为