Skip to content

HTTP 速查手册

一、通用身份验证

bash
# 服务端返回401,并告知验证类型为Basic
GET 401 Unauthorized
WWW-Authenticate: Basic realm="description"

# 浏览器输入验证信息后,请求头中携带验证信息
Authorization: Basic xxxxxxxxxx

二、Cookie

bash
# 服务端返回set-cookie
set-cookie: name=xxxxx
set-cookie: age=xxxxx

# 用户代理记录Cookie,并在下次请求时携带Cookie
Cookie: name=xxxxx; age=xxxxx

三、永久重定向

bash
# 状态码配置为301

GET 301
Location: http://example.com

四、临时重定向

bash
# 状态码配置为302

GET 302
Location: http://example.com

五、HTML 重定向

html
<!-- 通过HTML标签实现重定向 -->

<meta http-equiv="Refresh" content="0; URL=http://example.com/" />
js
// 通过JS实现重定向

window.location = "http://example.com/";

六、访问控制策略

js
// headers配置

// 允许所有来源
Access-Control-Allow-Origin: *
// 允许所有方法
Access-Control-Allow-Methods: *
// 允许所有Headers
Access-Control-Allow-Headers: *
// 响应的有效时间为 86400 秒,也就是 24 小时。在有效时间内,浏览器无须为同一请求再次发起预检请求。
Access-Control-Max-Age: 86400

七、HTTP 缓存

混存的种类:

  • 私有缓存。eg:浏览器
  • 共享缓存
    • 代理缓存。eg:代理设备(Nginx 代理)
    • 托管缓存。eg:反向代理、CDN 和 service worker 与缓存 API 的组合。

7.1 Cache-Control

Response:

valuedescription
private数据可以被私有缓存存储(eg:浏览器)
public数据可以被共享缓存存储 (eg:代理缓存、托管缓存)
no-cache相应的数据可以被缓存,但之后的每次请求需要向源服务端做文件有效性校验
no-store任何种类的缓存(私有缓存、共享缓存)都不应缓存数据
max-age=0不直接使用本地缓存,需向目标服务端做新鲜度
must-revalidate缓存未过期时,可以直接使用;过期后,需要向源服务端做文件有效性校验
proxy-revalidate等价于must-revalidate ,但仅共享缓存有效

Request

valuedescription
no-cache要求缓存做新鲜度校验
no-store即使源服务端的响应,可以被缓存,也不应该缓存
max-age客户端告诉服务端,客户端允许的最大缓存时长(秒)

7.2 验证响应

基于文件最后更新时间

Last-Modified / If-Modified-Since

基于正文内容 Hash

ETag / If-None-Match

强制重新验证

方式一:

Cache-Control: no-cache

方式二:

Cache-Control: max-age=0, must-revalidate

八、范围请求

STEP 1:检测是否支持范围请求

bash
curl -I http://example.com

# 若支持范围请求,则Headers中存在Accept-Ranges、Content-Length
HTTP/1.1 200 OK
...
Accept-Ranges: bytes
Content-Length: 146515

Accept-Ranges字段存在,且值非none,则支持范围请求。

STEP 2:发送范围请求

bash
curl http://exmaple.com/test.jpg -i -H "Range: bytes=0-1023"

# 响应头
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
...
(binary content)

Released under the MIT License.