1.TCP/IP
  1. 7层协议
1. 一个数据的传输过程类似于 7654321(机器A) 123->21(路由器1) 123->21(路由器2) 12->21(交换机1) 12->21(交换机2) 123->21(路由器3) 1234567(机器B)
2. ARP 属于2.5连接层 IP→MAC 根据IP地址查询当前链路/局域网中的MAC地址
层级 层级名称 核心标识/地址 典型设备/协议 主要作用
765 会/表/应 应用程序数据 HTTP、DNS(域名解析)、FTP(文件传输) 等 处理数据的业务逻辑
4 传输层 Port 端口号 TCP / UDP 负责从A机器的端口到B机器的端口
3 网络层 IP 地址 路由器、三层交换机 通过IP地址+路由表决定数据包的下一跳(每经过1次第3层转发记为1跳hop)(最大255跳)
2 数据链路层 MAC 地址 交换机、网卡 通过MAC地址完成当前局域网/链路上的一跳传输 (交换机把多个路由器组成了一个局域网)
1 物理层 比特流 (Bit) 网线、集线器 传输光/电信号
  1. url属于uri(资源定位标识符) 包括的内容:协议名(http/ftp/..)/[登录信息]/服务器ip+端口/带层次的路径/标识符
2.HTTP
  1. 一问一答的模式,服务器没收到请求之前不会主动发送响应
  2. 请求包括:方法(get/post/..)   uri   协议版本   请求首部字段   内容实体
    回包包括:协议版本   状态码   状态码的原因   响应首部字段 主体
  3. 属于无状态协议
  4. cookie:为了保存状态引入的技术。比如用户登录一家购物网站,在购物网站的其他页面也要保持登录状态
浏览器服务器Redislogin 用户名+密码保存 session_id→用户信息保存成功Set-Cookie: session_id=abc123浏览器请求会自动带上 Cookie通过session_id查询 用户信息用户信息处理请求请求返回浏览器服务器Redis
  1. 防cookie被盗

    http.SetCookie(w, &http.Cookie{
     Name:     "session_id",
     Value:    "abc123",                                         //顺带加上 跨域问题:A网站的JS能不能读取B源(非同源)的响应 同源:协议/域名/端口 都相同
     HttpOnly: true,                                             //F12无法通过命令document.cookie读取cookie 防止当前网站JS直接读取
     Secure:   true,                                             //cookie只通过https发送 防止传输过程中被窃取
     SameSite: http.SameSiteLaxMode,                             //防止CSRF:限制浏览器向另外一个网站请求时携带这个网站的Cookie
     Expires:  time.Now().Add(time.Duration(5*60) * time.Second) //过期时间5min
     MaxAge:   5*60,                                             //过期时间5min 有2个过期设置是为了兼容浏览器的新旧版本
     Path:     "/",
    })
  2. Cookie/Session ID 被盗以后,如何尽量降低风险
    有效期给redis的session设置过期时间
    用户重新登录以后换一个新的Session
    用户退出注销Session
    异常登录检测 比如ip变了 设备变了 异常请求频率 综合判断是否需要重新登录验证
    在进行敏感操作时 需要重新登录验证

  3. jwt+cookie 服务器不存储用户数据的状态(相对于4不用redis)
    如果token被盗就只能依赖于旧的token过期,或者服务器牺牲部分无状态属性:记录token的版本号

JWT(客户端请求携带数据)
│
├── Header
│   {"alg":"HS256","typ":"JWT"}                //签名算法(HS256对称密钥 RS256非对称密钥)
│
├── Payload
│   {"user_id":10001,"role":"user","exp":...}  //用户信息(uid 权限 过期时间..)
│
└── Signature
    用密钥对 Header+Payload 进行签名            //用于校验前面两个信息是否被篡改 (以上数据都可以被第三方拿到)
浏览器服务器login 用户名+密码生成 JWTSet-Cookie: access_token=JWT浏览器请求会自动带上 Cookie校验JWT签名 检查exp等信息从JWT获取用户信息处理请求请求返回浏览器服务器
  1. 方法
方法 典型用途 请求数据
OPTIONS 询问服务器/某个URL支持的方法 通常无body
TRACE 回显请求,有风险所以基本没人用 通常无body
GET 获取资源 通常放 URL/query
HEAD 获取报文首部,用于检测资源是否存在/大小/是否更新 通常无body
POST 提交数据、创建/触发处理 通常放 body
PUT 完整替换资源 通常放 body
PATCH 部分更新资源 通常放 body
DELETE 删除资源 通常无body
  1. 持久连接:http1.0之前每次请求都包括建立和断开tcp连接; http1.1之后单次请求后不再断开连接,只有在客户端/服务器有明确的断开指令,连接才会断开
    (http1.0之前,每次请求只是tcp连接断开,但是cli和svr的进程还在跑。所以客户端可以通过php脚本获取到gateway在redis的状态,进而确认tcp连接哪个gateway)
    管线化:上一个请求还没有收到回包就发下一个请求
3.HTTP报文
  1. 是否编码压缩 否:报文=实体 是:报文≠实体
  2. 回包错误码
错误码 类别 原因短语 常用
1XX Informational(信息性) 接收的请求正在处理
2XX Success(成功) 请求正常处理完毕 200:ok   204:ok但没有返回实体内容   206:响应cli进行了的范围请求
3XX Redirection (重定向) 需要请求新的uri 301:资源永久性重定向   302:资源临时重定向   303:限定用GET方法请求新资源 307:须保持POST/PUT等方法请求新资源   304:缓存数据没有变化用浏览器缓存
4XX Client Error(客户端错误) 服务器无法处理请求 400:报文有语法错误   401:访问资源需要认证   403:没有权限   404:没有该资源 或者拒绝请求且不想说明原因   429:请求频率限制
5XX Server Error(服务器错误) 服务器处理请求出错 500:服务器执行请求时发生错误   503:服务器超负荷或者在维护
  1. 首部分类
    按是否跨代理传递首部分为: End-to-end(一直传递到最终接收者) Hop-by-hop(只对当前这一跳有效)
    按报文角色/用途分为:通用、请求、响应、实体/内容

  2. 首部字段

通用首部 含义 示例
Cache-Control 控制缓存:1.是否缓存 2.TTL 3.过期后如何处理 4.客户端对缓存的要求(从哪获取,剩余过期时间) no-store:不能缓存 max-age:缓存过期时间 no-cache:可缓存使用前须验证
Connection 1.控制Hop-by-hop首部 2.管理当前TCP连接 1.标识发给下一代理时需要删掉的字段 2.Keep-Alive:保存连接 close:关闭连接
Content-Type 请求/响应正文的媒体类型 application/json(大类:给程序处理的数据/小类:json)
请求首部 含义 示例
Accept 客户端希望接收什么媒体类型 application/json image/png video/mp4 q=0.3(优选权重)
Accept-Encoding 客户端支持什么压缩格式 gzip、br
Accept-Language 客户端偏好的语言
Host 请求哪个域名/虚拟主机
Referer 当前uri请求从哪个web页面发起的
Cookie 身份认证:浏览器自动携带 常用于登录
Authorization 身份认证:客户端手动携带 天然防止CSRF;常用于API
User-Agent 客户端/浏览器/程序的信息
If-None-Match 配合ETag做缓存验证 If开头的为条件请求,服务器只有判断条件为真的时候才会执行请求
If-Modified-Since 配合Last-Modified做缓存验证
Range 请求资源的一部分 适合场景:断点续传 返回码200:返回全部资源 206:返回部分资源
响应首部 含义 示例
Accept-Ranges 告诉客户端是否支持范围请求 bytes:支持 none:不支持
Age 资源在代理缓存中存在的时间(s)
ETag 资源的唯一标识/版本标识 比如同一个uri资源 用于区分不同语言的版本
Location 告诉客户端应该重定向到哪个uri 3xx 常见
Proxy-Authenticate 代理要求客户端进行身份认证 代理认证
Retry-After 告诉客户端多久后/什么时候再重试 503、429 等常见
Server 服务器软件信息 如 nginx、Apache
Vary 告诉缓存:响应取决于哪些请求首部 缓存管理 todo:
WWW-Authenticate 告诉客户端服务器要求什么认证方式 401 常见
Set-Cookie 服务器让客户端设置 Cookie
实体首部 含义 重点
Allow 当前uri支持哪些HTTP方法 GET、POST、HEAD
Content-Encoding 正文使用的压缩格式 gzip、br
Content-Language 正文使用的自然语言 zh-CN、en
Content-Length 正文长度,单位字节 body 大小
Content-Range 当前正文对应的字节范围 断点续传
Expires 响应内容的过期时间 缓存
Last-Modified 资源最后修改时间 缓存
4.web服务器
  1. 可以多个域名指向同一个ip+prot 然后通过nginx或者web服务器自己做分拣
    www.a.com → 127.0.0.1:80
    www.b.com → 127.0.0.1:80
    www.c.com → 127.0.0.1:80
  2. web服务器的分类 代理:可以缓存、过滤、转发;   网关:可以把HTTP请求转换成其他协议后交给别的服务处理;

–140

文档更新时间: 2026-10-23 11:31   作者:morninglu