Web 安全的一切都建立在 HTTP 之上。不理解协议,漏洞原理就只能是死记硬背。这篇带你吃透 HTTP 的核心结构。
一、一次请求长什么样
当你在浏览器输入网址按下回车,浏览器向服务器发送了一个 HTTP 请求:
GET /tutorial/http HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Cookie: session=abc123
Accept: text/html
它由三部分组成:
- 请求行:方法(GET)、路径(/tutorial/http)、协议版本
- 请求头:键值对形式的元信息(Host、Cookie、User-Agent 等)
- 请求体:GET 通常没有;POST 提交的表单数据放在这里
二、常见请求方法
| 方法 | 语义 | 安全注意点 |
|---|---|---|
| GET | 读取资源,参数在 URL 中 | 参数会留在日志/历史记录里,别传敏感信息 |
| POST | 提交数据,参数在请求体 | 不代表安全,一样需要校验 |
| PUT / DELETE | 修改 / 删除资源 | 必须有权限校验 |
一个常见误区:很多人以为 POST 比 GET「安全」,因为参数不在 URL 里。实际上两者都是明文传输,真正的安全靠的是 HTTPS + 服务端校验。
三、响应与状态码
服务器返回的响应结构类似:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: session=abc123; HttpOnly; Secure
<!DOCTYPE html>...
重点记住这几类状态码:
200成功、301/302重定向、403无权限、404不存在、500服务器错误- 渗透测试中,
403和404的差异常被用来目录探测
四、HTTPS:给 HTTP 穿上铠甲
HTTP 是明文的,在公共 Wi-Fi 下任何人都可以嗅探你的流量。HTTPS = HTTP + TLS,提供三个保证:
- 加密:第三方无法读取内容
- 完整性:内容不会被篡改
- 身份认证:证书证明「你访问的确实是这个网站」
这也是为什么本站配置了 Let’s Encrypt 证书并强制 HTTP 跳转 HTTPS。
动手练习
按 F12 打开浏览器开发者工具,切到 网络(Network) 面板,刷新本页面:
- 找到本文档的请求,查看它的请求头和响应头
- 观察状态码、
Content-Type和Cache-Control - 对比 HTTP 和 HTTPS 站点,看看地址栏锁形标志的差异
理解了 HTTP,下一篇我们就可以正式进入 Web 安全的世界了。