HTTP指南 | 青训营笔记

40 阅读4分钟

HTTP指南

这是我参与「第四届青训营 」笔记创作活动的的第9天

1.重点内容

这节课主要了解HTTP相关的内容

2.重要的知识点

  • 什么是HTTP?
  • HTTP的协议发展
  • HTTP结构
  • Method
  • HTTP状态码
  • RESTful API
  • 常见请求头
  • 常见响应头
  • 缓存
  • cookie

3.详尽的知识点

什么是HTTP?

  • HTTP(Hyper Text Transfer Protocol)是一种超文本传输协议
  • 应用层协议,基于TCP协议
  • 分为请求和响应两部分
  • 简单可扩展
  • 无状态,请求之间是孤立的

HTTP的协议发展

  • HTTP/0.9

    • 请求GET
    • 响应只有HTML文档
  • HTTP/1.0

    • 增加了Header
    • 添加了状态码
    • 支持多种文档类型
  • HTTP/1.1

    • 链接复用
    • 添加缓存
    • 内容协商
  • HTTP/2

    • 二进制协议
    • 压缩Header
    • 服务器推送
  • HTTP/3

HTTP结构

Request结构

POST / HTTP/1.1
Host: Localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
...
​
-123u3io113
(more data)

Response结构

HTTP/1.1 403 Forbidden
Server: Apache
Content-Type: text/html;charset=iso-8859-1
Date: Wed;10 Aug 2016 09:23:25 GMT
Keep-Alive: timeout=5, max=1000
Connection:Keep-Alive
...
​
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
(more data)

可以看出Request和Response都由start line,HTTP headers,empty line,body组成

Method

Method作用
GET请求一个指定资源的表示形式,获取数据
POST将实体提交到指定的资源
PUT替换目标资源所以当前状态
DELETE删除指定的资源
HEAD请求一个与GET请求的响应相同的响应,没有响应体
CONNECT建立一个到目标资源服务器的隧道
OPTIONS用于描述资源的通信选项
TRACE沿着路径进行消息回环测试
PATCH对资源应用的部分修改

请求的特点

  • Safe

    • 不会修改服务器的数据
    • GET HEAD OPTIONS
  • Idempotent

    • 同样的请求一次和多次效果,服务器状态都一样
    • 所以safe方法都是idempotent的
    • GET HEAD OPTIONS PUT DELETE

HTTP状态码

状态码信息
1xx请求以接收,继续处理
2xx请求已被成功接收
3xx重定向,需要进一布操作
4xx客户端错误
5xx服务器端错误

常见状态码

  • 200 OK
  • 301 永久转移
  • 302 临时跳转
  • 401 未授权
  • 404 请求资源不存在
  • 500 服务器内部发生错误
  • 504 Gateway Timeout

RESTful API

  • 每一个URL都代表一种资源
  • 客户端和服务器之间,传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器资源进行操作,实现"表现层状态转化"

常见请求头

请求头信息
Accept接收类型,表示浏览器支持的MIME类型
Content-type客户端发送出去的实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制
If-Modified-Since对应服务器端的Last-Modified查看文件是否变动
Expires缓存控制,不会请求,直接使用缓存
Max-age表示资源再本地缓存多少秒,不会请求,直接使用缓存
If-None-Match对应服务器端的ETag,匹配内容是否改变
Cookies有cookie且同域时会自动带上
Referer该页面的来源URL
Origin最初的请求发起者
User-Agent用户客户端的必要信息

常见响应头

请求头信息
Content-type服务器返回实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制
Last-Modified请求资源的最后修改时间
Expires判断什么时候过期,不再缓存
Max-age本地资源应该缓存多少秒
ETag特定版本标识符
Set-Cookies设置页面关联的cookies
Server服务器相关信息
Access-Control-Allow-Origin允许的请求Origin头部

缓存

  • 强缓存
  • 协商缓存

Cookie

Set-Cookie信息
Name=value各种cookie的名称和值
Exprires=datecookie的有效期
Path=path限制cookie的发送范围的文件目录
Domain=domain限制cookie生效的域名
secure仅在HTTPS安全链接时,才发送cookie
HttpOnlyJavaScript脚本无法获得cookie
SameSite=[NoneStrictLax]None 同站、跨站请求都可发送 Strict 仅在同站发送 Lax 允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送

4.课后总结

HTTP协议作为不管是用户还是开发人员都日常接触到的协议,应该多了解其底层原理,为将来HTTP3的发展做出自己的贡献。