码迷,mamicode.com
首页 > Web开发 > 详细

HTTP协议详解&TCP&OSI七层概念模型

时间:2020-03-14 11:11:10      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:c99   格式   第一个   客户   而且   性能   rest   art   key   

HTTP/1.1协议

浏览器发起HTTP请求的典型场景

  1. 用户在浏览器中输入相应的网址,在此过程中如果存在历史访问的记录,浏览器引擎查询其内置的数据库补全相应网址
  2. 浏览器引擎调用渲染引擎通过网络模块发送第一个请求
  3. 浏览器接收到第一个响应之后,如果其中存在超链接,比如一个JavaScript请求,那么浏览器会继续调用网络请求响应的js文件,并调用JS解释器解析相应js文件
  4. 浏览器接收到所有的html、JavaScript、css、其他媒体文件之后,通过UI后端将完整的界面绘制到用户界面中

技术图片

浏览器发起HTTP请求的典型场景中背后的细节:

  1. 服务器监听80等web端口,浏览器从URL中解析出域名
  2. 浏览器根据域名查询DNS从而获取到对于的IP地址
  3. 通过查询到的IP地址与服务器建立TCP链接(如果是https协议还需要万TLS/SSL握手)
  4. 构造HTTP请求,在这个过程中填充上下文至HTTP头部
  5. 浏览器发送HTTP请求,服务器收到HTTP请求后将HTML页面作为包体返回给浏览器
  6. 浏览器引擎解析响应,渲染包体至用户界面,并根据超链接构造其他的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七层概念模型

技术图片

  1. 应用层:负责解决业务问题
  2. 表示层:负责把网络中的消息转换成应用层可以读取的消息
  3. 会话层:负责建立会话、握手、维持连接、关闭
  4. 传输层:负责解决进程与进程之间的通信,例如TCP保证报文的可达性和流量的控制
  5. 网络层:负责解决广域网(Internet)中主机之间数据的传递
  6. 网络层
  7. 数据链路层:负责局域网中根据MAC地址连接的相应的交换机/路由器进行报文的转发
  8. 物理层:物理传输介质

TCP/IP模型对照

技术图片

分层模型的优点在于当前层只需要考虑与其相邻层的对接交互,即每一层只为其之上的层服务,并使用在其之下的层所提供的服务,而不需要考虑其相邻层之外的其他层做了什么。分层模型的缺点在于不同层之间数据交互需要耗费更多的时间,从而影响网络性能。

报文头部

技术图片

HTTP协议解决了什么问题?

Form Follows Function 形式服务于功能

解决的是人与机器之间高效的信息交互

解决WWW信息交互必须面对的需求

  • 低门槛
  • 可拓展性
  • 分布式系统下的超文本传输
  • Internet规模
    • 无法控制的可伸缩性
    • 不可预测的负载、非法格式的数据、恶意消息
    • 客户端不能保存所有服务器信息,服务器不能保持多个请求间的状态信息
  • 独立的组件部署:新老组件并存
  • 向前兼容

评估Web架构的七大关键属性

  1. 性能:影响高可用的关键因素

  2. 可伸缩性:支持部署可以互相交互的大量组件

  3. 简单性:易理解、易实现、易验证

  4. 可见性:对两个组件间的交互进行监视或者仲裁的能力。如缓存、分层设计等

  5. 可移植性:在不同的环境下运行的能力

  6. 可靠性:出现部分故障时对整体的影响程度

  7. 可修改性:对系统做出修改的难易程度,由可进化型、可定制性、可扩展性、可配置性、可重用性构成

架构属性:性能

  • 网络性能
    • 吞吐量:小于等于带宽
    • 开销:首次开销,每次开销
  • 用户感知到的性能
    • 延迟:发起请求到接收到响应的时间
    • 完成时间:完成一个应用动作所花费的时间
  • 网络效率
    • 重用缓存、减少交互次数、数据传输距离更近、COD(按需代码)

架构属性:可修改性

  • 可进化性:一个组件独立升级而不影响其他组件
  • 可扩展性:向系统添加功能时,不会影响到系统的其他部分
  • 可定制性:临时性、定制性地更改某一要素来提供服务,不对常规客户产生影响
  • 可配置性:应用部署后可通过修改配置提供新的功能
  • 可重用性:组件可以不做修改在其他应用中使用

REST架构下的Web

技术图片

五种架构风格

  1. 数据流风格 Data-flow Styles
    优点:简单性、可进化性、可扩展性、可配置性、可重用性
  2. 复制风格 Replication Styles
    优点:用户可察觉的性能、可伸缩性,网络效率、可靠性也可以得到提升
  3. 分层风格 Hierarchical Styles
    优点:简单性、可进化性、可伸缩性
  4. 移动代码风格 Mobile Code Styles
    优点:可移植性、可扩展性、网络效率
  5. 点对点风格 Peer-to-Peer Styles
    优点:可进化性、可重用性、可扩展性、可配置性

REST架构的推导

统一接口的分层、缓存、无状态、客户端服务器模型+按需代码构成了REST结构

技术图片

技术图片

URI的基本格式以及与URL的区别

当没有URI时:

技术图片

有了URI:

技术图片

什么是URI

技术图片

Uniform Resource Identifier 统一资源标识符

技术图片

URI的组成

技术图片

合法的URI

技术图片

URI的格式

技术图片

hier-part

技术图片

相对URI

技术图片

URI的编码

为什么要进行URI编码

技术图片

保留字符与非保留字符

技术图片

URI百分号编码

技术图片

HTTP协议详解&TCP&OSI七层概念模型

标签:c99   格式   第一个   客户   而且   性能   rest   art   key   

原文地址:https://www.cnblogs.com/sea520/p/12490703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!