一、HTTP 请求报文由哪些部分组成

原笔记先从请求报文开始拆解。一个典型请求如下:

---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: baidu.com
Connection: Keep-Alive

---request end---

它可以拆成四部分:

  • 请求报文起始行
  • 请求头
  • 空行
  • 请求报文主体 body

其中,body 一般出现在上传等场景中,普通下载类请求很多时候并没有请求体。

二、请求起始行最需要掌握什么

原笔记把请求起始行列为重点,示例是:

GET / HTTP/1.1

这里至少要掌握三个信息:

2.1 请求方法

原笔记列出了三个最常见的方法:

请求方法 说明
GET 下载,大多数普通访问都是它
POST 上传、登录等带提交动作的请求
HEAD 类似 GET,但只返回响应头,常用于检查

2.2 URI 的含义

原笔记特别强调:
GET /lidao.mp4 HTTP/1.1 中的 / 不是 Linux 系统根目录,而是网站的站点目录。

例如:

  • 假设站点目录是 /app/code/www/
  • 那么访问 /lidaoav.mp4
  • 实际对应的就是 /app/code/www/lidaoav.mp4

这也是后面学习 Nginx root 指令时的基础。

2.3 用 HEAD 方法检查网站

原笔记给出了一个 curl -I 的例子:

[root@oldboy01 ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Wed, 27 Dec 2023 12:53:09 GMT
Etag: "575e1f59-115"
Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

其中 -I 表示只显示 HTTP 响应头,不显示响应体。

三、请求头里最常见的字段

原笔记把两个字段列为重点:

字段 含义
User-Agent 客户端代理,也就是用什么工具或浏览器访问
Host 访问的目标网站,通常是域名或 IP

除了命令行工具,原笔记还建议直接通过浏览器开发者工具查看网络请求:

  • F12Fn + F12
  • 打开“网络”面板
  • 查看请求头和响应头

这对于排查实际网站请求尤其有帮助。

四、HTTP 响应报文由哪些部分组成

原笔记把响应报文也拆成四部分:

  • 响应报文起始行
  • 响应头
  • 空行
  • 响应报文主体

其中响应体就是服务端真正返回的数据,例如 HTML 页面内容。

五、响应起始行和响应头要重点看什么

原笔记把响应起始行的重点放在状态码上,例如:

HTTP/1.1 200 OK

这行至少包含:

  • 协议与版本
  • 状态码
  • 状态码描述

在响应头里,笔记重点提到了这些字段:

字段 说明
Server 服务端使用的 Web 服务器及版本
Content-Type 返回内容的媒体类型
Content-Length 返回内容大小
Location 跳转后的新位置,常见于 301/302

例如查看 jd.com 时,原笔记给出了如下示例:

[root@oldboy01 ~]# curl -v jd.com
< HTTP/1.1 301 Moved Permanently
< Content-Type: text/html
< Content-Length: 178
< Connection: keep-alive
< Location: https://www.jd.com
< Server: jfe

从这里就能直接看出这是一次跳转响应。

六、HTTP 请求与响应的流程如何理解

原笔记配合流程图说明了完整过程,核心可以概括为:

1、用户在浏览器中输入网址 2、客户端向服务端发起 HTTP 请求 3、服务端接收请求并处理 4、服务端返回响应报文 5、浏览器拿到内容后进行展示

理解这条链路之后,再看抓包、日志和浏览器调试信息就不会混乱。

七、状态码该怎么记

原笔记给出了两层记忆方式。

先记大类:

状态码范围 含义
2xx 正常
3xx 需要跳转,整体仍属于正常处理
4xx 客户端问题
5xx 服务端问题

再记常见状态码:

状态码 说明
200 OK 访问正常
301 Moved Permanently 永久跳转
302 Found 临时跳转
304 Not Modified 浏览器缓存命中
403 Forbidden 权限拒绝,或首页文件存在问题
404 Not Found 文件找不到
500 Internal Error 服务端内部错误
502 Bad Gateway 网关错误,常见于反向代理或负载场景
503 Service Temporarily Unavailable 服务临时不可用
504 Gateway Time-out 网关超时

原笔记还给出了参考链接:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status

八、小结

HTTP 协议的重点不是死记术语,而是把报文结构看懂:

  • 请求看起始行、请求头和目标资源
  • 响应看状态码、响应头和返回内容
  • 排查问题时优先借助 curl、浏览器调试工具和状态码含义

把这几个核心点掌握住,后面学习 Web 服务和 Nginx 站点配置时会更有方向感。