这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
http
http有八种常见请求
- get:参数在url上,浏览器长度有限制,不安全
- post:参数不可见,长度不受限制
- put:上传最新内容到指定位置
- delete:删除请求的url所表示的资源
- head:不返回相应主体,主要用于客户端查看服务器性能
- options:与head类似,是客户端用于查看服务器的性能,可以获取服务器支持的http请求方法(黑客)。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送预检请求,以判断是否有对指定资源的访问权限
- connect:http1.1预留的,将连接方式改为管道方式,通常用于SSL加密服务器的链接与 HTTP非加密的代理服务器之间的通信
- trace:请求服务器[回显收到的请求信息]主要用于HTTP请求的测试或诊断
- patch:出现的较晚,用于更新局部的资源,不存在时,会创建一个新的(http1.1之后使用的较多的)
http header
请求头
- Accept:接收类型,表示浏览器支持的MIME类型,对应服务端返回的Content-Type
- content-type:多媒体资源类型,application/json
- location:重定向返回的要访问的新网址
- cache-control:大小写不敏感
- Cache-Control: max-age=< seconds>,no-cache
- Cookie:有cookie且同域访问时会自动带上
- connection:长连接如何处理,如keep-alive
- Origin:最初的请求是从哪里发起的(只会精确到端口),Origin比Referer更尊重隐私
- Referer:该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段)
- user-agent:浏览器身份表示,可以乱设置,postman、axios会设置自己的标号
- Accept-Encoding:能够接受的编码方式列表
- Accept-Encoding: gzip, deflate;
响应头
- vary:告诉代理服务器/缓存/CDN,如何判断请求是否一样,值要么是*要么是header中key名称组合(服务器判断的一句),设置cors的时候配置origin
- Set-Cookie:设置和页面关联的cookie
- access-control-allow-:跨域复杂请求设置预检;如-origin服务端允许的请求origin头部
- x-powered-by;x-Forwarded-For查看客户端IP地址nginx负载均衡加的
缓存请求头
- If-Modified-Since:匹配看文件是否变动,只能精确到1s之内,http1.0中;
- expires:缓存控制,在这个时间内不会请求,直接使用缓存,http1.0,而且是服务端时间;
- if-none-match:用来匹配文件内容是否改变(非常精确),http1.1中
缓存响应头
- Last-Modified:请求资源的最后修改时间;
- cache-control:告诉浏览器或其他客户,什么环境可以安全的缓存文档;
- ETag:请求变量的实体标签的当前值
http版本
http2
- 帧(frame):使用二进制分帧作为最小通信单位,每个帧包含帧头,至少标识当前帧所属数据流
- 消息:与逻辑请求或响应消息对应的完整的一系列帧
- 数据流:已建立连接内的双向字节流,可以承载一条或多条消息
- 交错发送,接收方重组织
- 每一个来源和目标地址建立连接之后这个链接就可以被永久利用
- 流控制:阻止发送方向接收方发送大量数据的机制(可以选择优先级更高的)
应用场景
静态缓存
- 状态码是200不一定请求成功了,可能是用本地缓存强缓存
- 加快静态资源访问速度来性能优化,要求能快速拿到缓存且拿到的是最新的缓存
- 静态资源部署:缓存+CDN+文件名hash,文件名加hash值保证每个缓存改变了文件名变化
鉴权
- session+cookie
- JWT:JSON web token,唯一,有效期短,只希望被用一次(单点登录和会话管理不适用)
单点登录
Single Sign On,会有一个sso服务器,如果用户到a产品没登录cookie,就会先重定向到sso服务器查找
用户体验
- 速度
- 稳定性