核心 · Key Idea
一句话:HTTP 是浏览器和服务器之间的请求-响应协议。客户端发一个请求(方法 + URL + headers + body),服务器回一个响应(状态码 + headers + body)。
是什么#
最朴素的一次 HTTP 1.1 请求长这样:
GET /index.html HTTP/1.1
Host: example.com
User-Agent: curl/8.0
Accept: */*
服务器回:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
<html>...纯文本协议,可以肉眼读懂 —— 这是 HTTP 流行的关键。
打个比方#
打个比方 · Analogy
HTTP 像点餐:
- 客户端:「GET(我要拿)/索引页 1.1 协议;我是 curl」 = 服务员我要这个;
- 服务端:「200 OK,下面是 HTML,1234 字节」 = 好的,菜上来了。
每次都是一问一答,服务器默认不记得你(无状态)。
关键概念#
方法Method
GET 拿 / POST 提交 / PUT 替换 / PATCH 局部改 / DELETE 删 / HEAD 只要头 / OPTIONS 询问能力。
状态码Status Code
1xx 信息 / 2xx 成功 / 3xx 重定向 / 4xx 客户端错 / 5xx 服务端错。
请求头Headers
键值对,描述请求 / 响应的元信息:Host、Accept、Content-Type、Authorization。
Body正文
POST/PUT 携带的数据。GET 不带 body。
无状态Stateless
HTTP 本身不记忆。会话通过 Cookie / Token 在每个请求里重发实现。
幂等Idempotent
GET / PUT / DELETE 多次调用结果一致;POST 不一定。
怎么工作#
打开一个网页通常发出几十个 HTTP 请求,每个静态资源、API 调用都是一次。
实操要点#
- 常用状态码记几个:
200OK、301/302重定向、304没变、400参数错、401没鉴权、403没权限、404没这资源、500服务器炸了、502/504网关 / 上游问题。 curl -i URL:看响应头。curl -v URL:看完整收发。- POST 别滥用:能用 GET 就 GET(可缓存、可书签、可重放)。
- Content-Type 决定 body 怎么解析:
application/json/application/x-www-form-urlencoded/multipart/form-data。 - 跨域是浏览器做的:CORS 不是 HTTP 规则、是浏览器安全策略。后端配响应头(
Access-Control-Allow-Origin)放行。
易混点#
HTTP/1.1
文本协议,一个 TCP 连接一次只能跑一个请求。
并发靠多开连接。
并发靠多开连接。
HTTP/2
二进制 + 多路复用,一个连接跑很多并发。
Header 压缩。
Header 压缩。