HTTP/1.1协议
浏览器发起HTTP请求的典型场景
- 用户在浏览器中输入相应的网址,在此过程中如果存在历史访问的记录,浏览器引擎查询其内置的数据库补全相应网址
- 浏览器引擎调用渲染引擎通过网络模块发送第一个请求
- 浏览器接收到第一个响应之后,如果其中存在超链接,比如一个JavaScript请求,那么浏览器会继续调用网络请求响应的js文件,并调用JS解释器解析相应js文件
- 浏览器接收到所有的html、JavaScript、css、其他媒体文件之后,通过UI后端将完整的界面绘制到用户界面中
浏览器发起HTTP请求的典型场景中背后的细节:
- 服务器监听80等web端口,浏览器从URL中解析出域名
- 浏览器根据域名查询DNS从而获取到对于的IP地址
- 通过查询到的IP地址与服务器建立TCP链接(如果是https协议还需要万TLS/SSL握手)
- 构造HTTP请求,在这个过程中填充上下文至HTTP头部
- 浏览器发送HTTP请求,服务器收到HTTP请求后将HTML页面作为包体返回给浏览器
- 浏览器引擎解析响应,渲染包体至用户界面,并根据超链接构造其他的HTTP请求
HTTP协议的定义
HTTP(超文本传输协议):一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。
HTTP协议的格式
ABNF(扩充巴科斯-瑙尔范式)
巴科斯范式的英文缩写为 BNF,它是以美国人巴科斯 (Backus) 和丹麦人诺尔 (Naur) 的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯 - 诺尔形式 (Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。
ABNF操作符
ABNF核心规则
基于ABNF描述的HTTP协议格式
HTTP请求实例:
GET /wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?v.1.0 HTTP/1.1
HOST: www.taohui.pub
HTTP响应实例:
# 响应
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Sun, 05 May 2019 15:30:31 GMT
Content-Type: text/css
Content-Length: 108
Last-Modified: Thu, 27 Dec 2018 07:35:33 GMT
Connection: keep-alive
ETag: "5c2480c5-6c"
Expires: Sun, 12 May 2019 15:30:31 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes
pre.pure-highlightjs {
background-color: transparent;!important;
border: none;
padding: 0;
}
OSI七层概念模型
- 应用层:负责解决业务问题
- 表示层:负责把网络中的消息转换成应用层可以读取的消息
- 会话层:负责建立会话、握手、维持连接、关闭
- 传输层:负责解决进程与进程之间的通信,例如TCP保证报文的可达性和流量的控制
- 网络层:负责解决广域网(Internet)中主机之间数据的传递
- 网络层
- 数据链路层:负责局域网中根据MAC地址连接的相应的交换机/路由器进行报文的转发
- 物理层:物理传输介质
TCP/IP模型对照
分层模型的优点在于当前层只需要考虑与其相邻层的对接交互,即每一层只为其之上的层服务,并使用在其之下的层所提供的服务,而不需要考虑其相邻层之外的其他层做了什么。分层模型的缺点在于不同层之间数据交互需要耗费更多的时间,从而影响网络性能。
报文头部
HTTP协议解决了什么问题?
Form Follows Function 形式服务于功能
解决的是人与机器之间高效的信息交互
解决WWW信息交互必须面对的需求
- 低门槛
- 可拓展性
- 分布式系统下的超文本传输
- Internet规模
- 无法控制的可伸缩性
- 不可预测的负载、非法格式的数据、恶意消息
- 客户端不能保存所有服务器信息,服务器不能保持多个请求间的状态信息
- 独立的组件部署:新老组件并存
- 向前兼容
评估Web架构的七大关键属性
-
性能:影响高可用的关键因素
-
可伸缩性:支持部署可以互相交互的大量组件
-
简单性:易理解、易实现、易验证
-
可见性:对两个组件间的交互进行监视或者仲裁的能力。如缓存、分层设计等
-
可移植性:在不同的环境下运行的能力
-
可靠性:出现部分故障时对整体的影响程度
-
可修改性:对系统做出修改的难易程度,由可进化型、可定制性、可扩展性、可配置性、可重用性构成
架构属性:性能
- 网络性能
- 吞吐量:小于等于带宽
- 开销:首次开销,每次开销
- 用户感知到的性能
- 延迟:发起请求到接收到响应的时间
- 完成时间:完成一个应用动作所花费的时间
- 网络效率
- 重用缓存、减少交互次数、数据传输距离更近、COD(按需代码)
架构属性:可修改性
- 可进化性:一个组件独立升级而不影响其他组件
- 可扩展性:向系统添加功能时,不会影响到系统的其他部分
- 可定制性:临时性、定制性地更改某一要素来提供服务,不对常规客户产生影响
- 可配置性:应用部署后可通过修改配置提供新的功能
- 可重用性:组件可以不做修改在其他应用中使用
REST架构下的Web
五种架构风格
- 数据流风格 Data-flow Styles
优点:简单性、可进化性、可扩展性、可配置性、可重用性 - 复制风格 Replication Styles
优点:用户可察觉的性能、可伸缩性,网络效率、可靠性也可以得到提升 - 分层风格 Hierarchical Styles
优点:简单性、可进化性、可伸缩性 - 移动代码风格 Mobile Code Styles
优点:可移植性、可扩展性、网络效率 - 点对点风格 Peer-to-Peer Styles
优点:可进化性、可重用性、可扩展性、可配置性
REST架构的推导
统一接口的分层、缓存、无状态、客户端服务器模型+按需代码构成了REST结构
URI的基本格式以及与URL的区别
当没有URI时:
有了URI:
什么是URI
Uniform Resource Identifier 统一资源标识符
URI的组成
合法的URI
URI的格式
hier-part
相对URI
URI的编码
为什么要进行URI编码
保留字符与非保留字符
URI百分号编码
标签: 网络