这是我参与「第四届青训营 」笔记创作活动的第7天
Day7 HTTP实用指南
大纲
- 初识
- 协议分析
- 常见场景
- 实际应用
- 了解更多
初识
没办法,这里用一张官方的截图(因为实在太好)
左边是用户输入浏览器后发生的动作,右边是OSI、TCP/IP协议(计网重点)
HTTP:超文本传输协议(Hyper Text Transfer Protocol )是一个基于TCP协议的应用层协议,简单无扩展且每个请求孤立。
协议分析——报文
协议发展
协议分析
最常用的肯定是POST/GET,其他说实话都不太常见(包括一部分用于测试)
具体内容
请求分类
safe:GET/HEAD/OPTIONS(不会去修改服务器数据)
Indemponent(幂等):顾名思义,执行一次请求和连续多次请求,结果和服务器状态一样
他包含所有safe类请求和PUT、DELETE
状态码
最常见:
| 状态码 | 含义 |
|---|---|
| 200 | OK |
| 301/302 | 重定向 |
| 401 | 未授权允许 |
| 404 | 资源不存在,访问错误 |
| 500 | 服务器内部不可预知错误 |
| 504 | 服务器超时 |
| 还有很多状态码 | …… |
RESTfUl API
- 每一个URL代表一种资源
- 客户端与服务器传递资源的某种表现层
- 客户端通过HTTP Method,对服务器资源进行操作
常见请求头
Cookie、Accept、Origin、User-Agent、……
缓存
强缓存
本地有、直接使用。包含字段:Expire,Cache-Control
协商缓存
本地也有一段缓存,但是要和服务器协商,判断资源是否最新。包含字段:ETag、Last-Modified
Set-Cookie-response
HTTP2:更快、更稳定、更简单
包含帧、数据流,HTTP2的连接永久。
HTTPS:HTTP+TSL/SSL 加密
对称加密
加密解密用一个密钥
非对称加密
加密解密需要两种不同的密钥:公钥(Public Key)、私钥(Private Key)
常见场景
静态资源(www.toutiao.com)
缓存策略
Cache-Control :max-age = 31536000(一年)
更多
access-control-allow-origin : * 允许所有域名访问
content-type:text/css; charset = utf-8 资源类型CSS
静态资源部署方案
缓存+CDN+文件名Hash
缓存
存到用户本地,这样一定能更快的访问,但是第一次打开没有缓存怎么办呢?
CDN(Content Delivery Network)
根据用户的就近性和负载,以极高效率为用户提供请求。那怎样保证用户拿到的资源最新呢?
文件名Hash
刚刚的例子中缓存了一年,那会不会一年都拿不到最新资源呢?
我们在文件名上做一些手脚,每次变化一下,让文件名和之前缓存的match不上,这样就能访问到最新资源了。
登录场景(表单登录)
OPTIONS请求,跨域问题
跨域
一个域名由三部分请求 https://(scheme) www.example.com(host name):443(port)
CORS(Cross Origin Recourse Sharing)
预处理:是否允许跨域请求?
相关协议头:Origin、Access-Control-Allow-Origin、Access-Control-Max-Age
代理服务器
同源主要是浏览器的安全策略,所以代理服务器跨越浏览器,就可以绕过同源策略。
具体:浏览器先向代理服务器进行请求,之后代理服务器真实的向服务器进行请求;
服务器相应给代理服务器,代理服务器再将相应转发给浏览器。
登录具体
向地址做了什么?
- POST方法
- 目标域名www.toutiao.com
- 目标:某路径
携带/返回了那些信息?
携带
- POST body
- 自己已有的Cookie
- 希望获取的json数据格式
返回
- 数据格式json
- 种cookie的信息
实际应用
浏览器
node
常见的请求库axios
- 支持浏览器,nodejs环境
- 丰富的API拦截器
了解更多
WebSocket
QUIC协议