ArcLibrary

HTTP 基础

万维网的语言 —— 浏览器怎么和服务器对话。

HTTP请求响应
核心 · 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 调用都是一次。

实操要点#

  • 常用状态码记几个200 OK、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 压缩。

延伸阅读#