网络协议分层
物理层主要作用是定义物理设备如何传输数据
数据链路层在通信的实体间建立数据链路连接
网络层为数据在结点之间传输创建逻辑链路
传输层向用户提供可靠的端到端(End-To-End)服务,传输层向高层屏蔽了下层数据通信的细节
应用层为应用软件提供了很多服务,构建与TCP协议之上,屏蔽网络传输相关细节
HTTP发展历史
HTTP/0.9 只有一个命令GET 没有HEADER等描述数据的信息 服务器发送完毕 就关闭TCP连接
HTTP/1.0 增加了很多命令 增加status code和header 多字符集支持、多部分发送、权限、缓存等
HTTP/1.1 持久连接 pipeline 增加host和其他一些命令
HTTP/2.0 所有数据以二进制传输 同一个连接里面发送带哦个请求不再需要按照顺序来 头信息压缩以及推送等提高效率的功能
HTTP三次握手
URI URL URN
URI Uniform Resource Idetifier/统一资源标识符 用来唯一标识互联网上的信息资源 包括URL和URN
URL Uniform Resource Locator/统一资源定位器
URN 永久统一资源定位符 在资源移动之后还能被找到 目前还没有非常成熟的使用方案
请求报文
HTTP方法
用来定义对于资源的操作
常用有GET、POST等
从定义上讲有各自的语义
HTTP CODE
定义服务器对请求的处理结果
各自区间的CODE有各自的语义
好的HTTP服务可以通过CODE判断结果
CORS限制
允许方法
- GET
- HEAD
- POST
允许Content-Type
- text/plain
- multipart/form-data
- application/x-www-form-urlencoded
其他限制
- 请求头限制
- XMLHttpRequestUpload对象没有注册任何事件监听器
- 请求头没有使用ReadableStream对象
突破限制方法
‘Access-Control-Allow-Origin’:‘*’,
‘Access-Control-Allow-Headers’:‘X-Test-Cors’,
‘Access-Control-Allow-Methods’:‘POST,PUT,Delete’,
‘Access-Control-Max-Age’:‘1000’
Cache-Control
可缓存性
- public
- private
- no-cache
到期
- max-age= < seconds >
- s-maxage= < seconds >
- max-stale= < seconds >
重新验证
- must-revalidate
- proxy-revalidate
其他
- no-store
- no-transform
缓存
Last-Modified
上次修改时间
配合If-Modified-Since或者If-Unmodified-Since
对比上次修改时间以验证资源是否需要更新
Etag
数据签名
配合If-Match或者If-Non-Match使用
对比资源的签名判断是否使用缓存
Cookie
- 通过Set-Cookie设置
- 下次请求会自动带上
- 键值对,可以设置多个
属性
- max-age和expires设置过期时间
- Secure只在https的时候发送
- HttpOnly无法通过document.cookie访问
CSP
CSP(Content-Security-Policy)
作用
- 限制资源获取
- 报告资源获取越权
限制方式
- Default-src限制全局
- 制定资源类型
资源类型
- connect-src
- font-src
- frame-src
- img-src
- media-src
- script-src
- manifest-src
- style-src
- …
HTTPS
- 公钥
- 私钥