了解http协议
浏览器背后的故事
用户打开浏览器输入域名-》查询dns服务器-》获取到对应IP-》发送请求给到对应web服务器-》返回数据给到浏览器
http
- 超文本传输协议【通信协议】允许将超文本标记语言【html】文档从web服务器传到浏览器
- 属于应用层的面向对象的协议
web和http
- web是一种基于超文本和http的分布式图形信息系统
- 建立在internet上的一种网络服务
http协议前世今生
略
透过tcp/ip看http
- http是构建在tcp/ip之上,是他们的一个子集
tcp/ip协议族
- tcp/ip其实是一系列与互联网相关联的协议集合的总称
- 分层管理是tcp/ip协议的重要特征
tcp/ip协议族分层
- tcp/ip协议族是由一个四层协议组成的系统,四层分别为:应用层,传输层,网络层和数据链路层
- 应用层【http】- 传输层【tcp】-ip【网络层】- 网络【链路层】
应用层
- 应用层一般是我们编写的应用程序,决定了向用户提供的应用服务,应用层可以通过系统调用与传输层进行通信。如:ftp dns http等
传输层
- 传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能
- tcp/udp
网络层
- 网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径【传输路线】到达对应计算机,并把数据包传输给对方
链路层
- 链路层用来粗合理链接网络的硬件部分,包括控制操作系统,硬件设备驱动,nic【网络适配器】以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内
http数据传输过程
- 发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。接收端接受数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除
三次握手
DNS域名解析
抓包工具
wireshark
熟悉http协议结构和通讯原理
http协议特点
- 支持客户/服务器模式
- 简单快速
- 灵活 传输类型由content-type控制
- 无连接 【限制每次连接只处理一个请求】
- 无状态
url和uri
- uri 一个紧凑的字符串用来表示抽象或物理资源
- uri可以进一步被分为定位符,名字或者两者都是
- 术语 uniform resource locator URL是URI的子集,除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络"位置")
- uri就像一个人的名字,url就像一个人的地址
http报文结构分析
通用报文头
请求报文头
响应报文头
实体报文头
Accept
浏览器端可以接受的媒体类型
accept:/ 代表浏览器接受所有
http请求方法剖析
GET
- 请求访问已被URI识别的资源
- 指定的资源经服务器解析后返回响应内容
POST
- 一般用来传输实体的主体
- 主要目的不是获取响应主体的内容
PUT
- 从客户端向服务器传送的数据取代指定文档的内容
- put方法与post方法最大的不同是:put是幂等的,而post不是幂等的
- 更多时候将put用作传输资源
HEAD
- 类似于GET,只不过返回的响应没有具体内容,用于获取报头
DELETE
OPTIONS
- 用来查询针对请求URI指定的资源支持的方法
TRACE/CONECT
- TRACE 回显服务器收到的请求,主要用于测试或诊断
- connect 开启一个客户端与所请求资源之间的双向沟通的通过,可以用来创建隧道 【主要用于代理】
响应状态码拆解
状态码
- 用以表示网页服务器超文本传输协议响应状态的3位数字代码
状态码详解
- 1xx 表示消息
- 2xx 表示成功
- 4xx 表示请求错误
- 5xx 表示服务器错误
常用http状态码
- 200 【略】
- 202 已接受,未处理
- 206 处理了部分GET请求【断点续传】
- 301 重定向
- 302 和重定向类似,但是资源只是临时被移动。客户端应该继续使用元URL
- 400 客户端语法错误,服务器无法理解
- 401 请求要求用户验证
- 403 服务器理解客户端请求,但是拒绝执行
- 404 服务器无法根据客户端请求找到资源
- 500 服务器内部错误,无法完成请求
- 502 充当网关或者代理服务器,从远端服务器收到了一个无效的请求
状态管理Cookie和Session
常见编码规范
- ascii 一个字节
- GBK 汉字 2个字节
- ISO-8859-1
- unicode 这个里面中文占三个字节
基本认证
Basic 基本认证
DIGEST 认证
SSL客户端认证
- 借由https的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端
基于表单的认证
- 并不在http协议中定义
- 使用由web应用程序各自实现基于表单的认证方式
- 通过cookie和session方式来保持用户的状态
长连接与短链接
- 本质上是tcp长连接和短链接
- http1.0,默认使用短链接
- http1.1,默认使用长连接
- 短链接 建立链接 – 数据传输 – 关闭连接 – 建立链接 – 数据传输 – 关闭连接
- 长连接;建立连接 – 数据传输 (保持连接)… 数据传输 – 关闭连接
http中介之代理
http中介之网关
- 网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法,网关是资源和应用程序之间的粘合剂
- 网关扮演的是“协议转换器”的角色
常见的网关类型
- (http/*)服务器web网关
- (http/https)服务器端安全网关
- (https/http)客户端安全加速器网关 【微服务】
- 资源网关
http缓存
Cache-Control 请求/响应头,缓存控制字段
Expires
- 响应头,代表资源过期时间,由服务器返回提供,是http1.0的属性,在与max-age共存的情况下,优先级要低
Last-modified
- 响应头。资源最新修改时间,由服务器告诉浏览器
if-modified-since
- 请求头,资源最新修改时间,由浏览器告诉服务器,和last-modified是一对,它两会进行对比
Etag
- 响应头,资源表示,由服务器告诉浏览器
if-none-match
请求头,缓存资源标识,由浏览器告诉服务器(其实就是上次服务器给的Etag)和etag是一对,它两会进行对比
缓存改进方案
- md5/hash缓存
- cdn 缓存
浏览器操作对http缓存影响
内容协商机制
- 客户端驱动
- 服务器驱动
- 透明协商
断点续传和多线程下载
- 客户端发请求对应的是Range 服务端响应是Content-Range
https
概述
- https可以认为是http+tls
- tls是传输层加密协议,前身是ssl协议
https功能介绍
-
内容加密
-
身份认证
数字证书 -
数据完整性
https使用成本
- 证书费用以及更新维护
- https降低用户访问速度
- 消耗cpu资源,需要增加大量机器
对性能影响
- 协议交互所增加的网络RTT
- http
- https
- 计算耗时
- 浏览器计算耗时
- 服务端计算耗时
影响http网络请求的因素
- 带宽
- 延迟
http协议的瓶颈
- 一条连接上只可发送一个请求
- 请求只能从客户端开始,客户端不可以接受除响应以外的指令
- 请求/响应头部不经压缩就发送
- 每次互相发送相同的头部造成的浪费较多
- 非强制压缩发送
websocket
和https
- 一次握手建立连接
特点
- 真正的全双工方式
- 减少通信量
spdy
Http的缺陷
- 淡路连接 请求低效
- http只允许由客户端主动发起请求
- http头部冗余
Spdy的改进
- 多路复用 请求优化
- 支持服务器推送技术
- spdy压缩了http头
- 强制使用ssl传输协议
http 2.0
http2.0性能增强核心:二进制分帧
http2.0 首部压缩
多路复用
单连接多资源的优势
- 可以减少服务连接压力,内存占用少了,连接吞吐量大了。
- 由于TCP连接减少而使网络拥塞状况得以改善
- 慢启动时间减少,拥塞和丢包恢复速度加快
并行双向字节流的请求和响应
- 并行交错的发送请求,请求之间互不影响
- 并行交错的发送响应,相应之间互不干扰
- 只使用一个连接即可并行发送多个请求和响应
- 消除不必要的延迟减少页面加载的时间
请求优先级
- 高优先级的流都应该优先发送
- 优先级不是绝对的
- 不同有优先级混合也是必须的
WebDAV协议
- 通俗的说就是 直接对Web服务器上的文件进行操作 【NAS,或者在线文档】
请求实例
http3.0
http2.0的问题
- 队头阻塞
- 建立连接的握手延迟大
quic的特性
-
0 RTT
-
没有队头阻塞的多路复用