Appearance
HTTP 协议
HTTP 协议报文结构
>
表示客户请求的消息结构<
表示服务端响应数据,包含{ [1027 bytes data]
的数据- 请求行和请求头部以
\r\n
分隔,请求数据与请求头部以\r\n\r\n
分隔 - 请求行之后是请求头部(即 http header),header 之后是请求数据,请求数据过大,会以多个数据包传输(这是 TCP/IP 范畴,这里就不详细介绍)
- 请求行结构
- 请求方法 GET/POST/HEAD/PUT/PATCH/OPTIONS/DELETE/CONNECT/TRACE
- 请求路径 URL
- 协议版本 HTTP/1.0、HTTP/1.1、HTTP/2.0
- 响应体结构
- 状态行
- 协议版本
- 状态码:200、403、404 ...
- 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
- 1xx:指示信息--表示请求已接收,继续处理
- 2xx:成功--表示请求已被成功接收、理解、接受
- 3xx:重定向--要完成请求必须进行更进一步的操作
- 4xx:客户端错误--请求有语法错误或请求无法实现
- 5xx:服务器端错误--服务器未能实现合法的请求
- 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
- 状态消息:OK、Forbidden、Not Found
- 消息状态
- 空白行
\r\n\r\n
- 响应正文
- 状态行
bash
phantom:~ ydl$ curl -sv http://www.sourcedev.cc|head
* Rebuilt URL to: http://www.sourcedev.cc/
* Trying 42.192.78.57...
* TCP_NODELAY set
* Connected to www.sourcedev.cc (42.192.78.57) port 80 (#0)
> GET / HTTP/1.1
> Host: www.sourcedev.cc
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: openresty/1.19.3.1
< Date: Mon, 12 Jul 2021 16:21:13 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/7.3.27
< Set-Cookie: ndj__Session=l7v5pn34h1qhavqv86bcahvdqs; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
<
{ [1027 bytes data]
<!DOCTYPE html>
<html>
<head>
HTTP Cache 策略
- Private Cache
- Public Cache CDN,中间代理
- Cache-control
- no-store(禁止缓存)
- no-cache(强制缓存)
- 缓存过期机制
- max-age:过期最大时间
- 缓存验证确认
- must-revalidate 验证状态再选择是否更新