HTTP实用指南 | 青训营笔记

140 阅读3分钟

HTTP实用指南 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第6天

有了今天的学习我发现,HTTP协议常用的知识并不是很难,所以让我们走进它吧。

初识HTTP

什么是HTTP

  • Hyper Text Transfer Protocol 超文本传输协议
  • 应用层协议,基于TCP
  • 请求 响应
  • 简单可扩展
  • 无状态

协议分析

协议分析--发展

  • HTTP/0.9单行协议(响应只有HTML文档)
  • HTTP/1.0构建可扩展性
  • HTTP/1.1标准化协议
  • HTTP/2更优异的表现

协议分析-报文

Method

Safe(安全的):不会修改服务器的数据的方法GET HEAD OPTIONS Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的所有safe的方法都是Idempotent的GET HEAD OPTIONS PUT DELETE

状态码

  • 200 OK--客户端请求成功
  • 301 --资源(网页等)被永久转移到其它URL
  • 302 --临时跳转
  • 401 Unauthorized --请求未经授权
  • 404 --请求资源不存在,可能是输入了错误的URL
  • 500 --服务器内部发生了不可预期的错误
  • 504 Gateway Timeout --网关或者代理的服务器无法在规定的时间内获得想要的相应

RESTful API

RESTful API: 一种API设计风格

(1)每一个URI代表一种资源;

(2)客户端和服务器之间,传递这种资源的某种表现层;

(3)客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”

场景分析

  • 打开chrome
  • 输入网址
  • 打开控制台
  • 切换到network

场景分析-静态资源

状态码200一定发起了请求吗?

缓存策略是怎样的?

强缓存

Cache-conteol:一年

还有什么信息吗?

允许所有域名访问

资源类型:css

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

  • CDN:Content Delivery Network
  • 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务

实战

实战-浏览器篇

AJAX之XHR

XHR:XMLHttpRequest readyState

(0)UNSENT 代理被创建,但尚未调用open()方法。

(1)OPENED open()方法已经被调用

(2)HEADERS_RECEIVED send()方法已经被调用,并且头部和状态已经可获得

(3)LOADING 下载中;responseText属性已经包含部分数据

(4)DONE 下载操作已完成

image.png

AJAX之Fetch

  • XMLHttpRequet的升级版
  • 使用Promise
  • 模块化设计,Response,Request,Header对象
  • 通过数据流处理对象,支持分块读取

1661334355375.png

实战-node篇

标准库:HTTP/HTTPS

  • 默认模块,无需安装其他依赖
  • 功能有限/不是十分友好

image.png

常用的请求库:axios

  • 支持浏览器、nodejs环境
  • 丰富的拦截器

image.png

实战-用户体验

稳定性

  • 重试机制

1、超时 2、错误

  • 缓存
  • 数据安全

1、HTTPS 2、劫持

其他了解内容

扩展-通信方式

WebSocket

  • 浏览器与服务器进行全双工通讯的网络技术
  • 典型场景:实时性要求高,例如聊天室
  • URL使用ws:// 或wss:// 等开头

1661325928465.png

QUIC:Quick UDP Internet Connection

  • 0-RTT建联(首次建联除外)
  • 类似TCP的可靠传输
  • 类似TLS的加密传输,支持完美向前安全
  • 用户空间的拥塞控制,最新的BBR算法
  • 支持h2的基于流的多路复用,但没有TCP的HOL问题
  • 向前纠错FEC
  • 类似MPTCP的Connection migration

总结

有了今天的学习,让我了解了超文本传输协议,对我后续前端的学习帮助也很大。

如果你有任何建议都可以在评论区留言,或发电子邮箱,欢迎大家评论留言(ˆ⌣ˆ)

作者:Yifan

日期:2022年7月24日

电子邮箱:1279640748@qq.com