HTTP 使用指南|青训营笔记

74 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

一、本堂课重点内容:

  • 本堂课的知识要点有哪些?
  1. HTTP 协议的基本定义
  2. HTTP 协议主要特征
  3. HTTP 协议发展历程
  4. HTTP 协议的报文结构
  5. 场景分析 - 静态资源
  6. 场景分析 - 登录
  7. HTTP 协议实战 - 浏览器
  8. HTTP 协议实战 - Node篇
  9. 网络优化手段
  10. HTTP 协议拓展 - 通信方式

二、详细知识点介绍:

  • 本堂课介绍了哪些知识点?

http协议

输入地址栏到网页出现:

image.png 超文本传输协议,是应用层协议,基于TCP

分为请求 响应

简单可扩展

无状态协议

http1.1是标准化协议,http2.0性能更好(当前用)

标准http/1.1报文

image.png

常见参数

method:get/post/head/options

所有幂等的协议都是安全的

image.png

状态码:

image.png

RESTful API:一种API设计风格,每个uri代表一种资源,

image.png

常用请求头:Accept/Content-type:接收类型/客户端发送实体内容的类型;Cache-Control、Cookie、

常用响应头:

image.png

缓存:强缓存 协商缓存,强缓存包括Expires,Cache-Control;协商缓存包括Etag/If-None-Match,Last- Modified/If-Modified-Since

image.png

读取缓存的优先级:先强缓存,协商缓存

image.png

cookie,借助cookie存储用户信息,每个cookie都是键值对,set-cookie-response:

image.png

http/2更快更稳定

帧是http/2通信的最小单位,二进制编码通信

消息和数据流

帧是交错发送,接收方重新组织

http/2连接是永久的,且仅需要每个来源一个连接

流控制:组织发送方向接收方发送大量数据的机制

服务器推送

https:http经过TSL/SSL加密

对称加密:加密解密用一个密钥

非对称加密:加密解密用2个不同的密钥,公钥和私钥

补充

  • 通信方式
    • websocket
    • 传输层优化QUIC image.png

三、实践练习例子:

  1. 场景分析 - 静态资源

    方法:F12-network

    状态码是200不一定发起了请求,可能是从缓存中读取的from disk cache,可以看缓存策略

    静态资源方案:缓存+CDN+文件名hash

  2. 场景分析 - 登录

    preserve log里过滤quick_login,得到两个请求:OPTIONS请求和POST请求

    遇到跨域问题:image.png三者有任何一个部分不一样都是跨域 image.png 解决方案:

    • CORS,先发起一个预请求问server是否允许,Access-Control-XXX协议头,server通过之后才可以发起真实请求
    • 代理服务器,放一个同域的代理服务器,帮我们转发请求(eg:webpack-dev-server)
    • image.png
    • Iframe不推荐 真实请求:POST请求向目标域名发起,携带了1.post body(form),2.希望获取json,3.已有的cookie;返回信息:数据格式json;种cookie(set-cookie)

    下次登陆为什么还能保留登陆信息?因为http是无状态协议,所以涉及到鉴权方案

    session+cookie方案(互相种cookie,和本地信息比较)和JWT(json web token,把token放到请求头里)

    点新请求为什么能记录登陆状态?涉及到单点登录SSO image.png

  3. 利用AJAX发起http请求:

  • 浏览器环境:内置XHR对象用来发起请求
    • XHR方法 image.png
    • Fetch方法:XHR的升级版,支持promise

image.png

  • node环境
    • 基础库

image.png

  -   axios

image.png 4. 网络优化

快: image.png 稳定性:

image.png

四、课后个人总结:

  • 本章有什么知识点不容易掌握?
  • 什么地方容易与其他内容混淆?

后面再看一遍,第一遍记不住

五、引用参考:

  • 我参考了哪些外部博客/笔记/文章?
  • 文章中有什么地方是我参考引用了外部博客/笔记/文章的?