网络篇-HTTP1.1协议(上)-概述
前言:
参考 极客时间 《Web协议详解与抓包实战》
一、浏览器发起HTTP请求的典型场景
1. 浏览器端
流程:
- 在用户界面(浏览器界面)的url地址,浏览器引擎联想url地址(通过浏览器轻量级数据库获取)
- 敲下回车后,浏览器引擎调用渲染引擎,渲染引擎发出请求,通过网络模块获取数据
- 等到html响应后,渲染引擎可能发现 javascript请求,发起二次请求
- 当渲染引擎获取到需要的文件后,会通过ui后端绘制完整界面
2. 网络端
流程:
- 服务器监听80/443等端口
- 浏览器从url中解析出域名,根据域名查询DNS,获取到域名对应的ip地址
- 浏览器使用查到的ip地址与服务器进行三次握手,建立起了TCP连接。如果使用了HTTPS,还要完成TLS/SSL握手
- 浏览器构造HTTP请求,填充相应的HTTP头部
- 浏览器发起HTTP请求
- 服务器收到HTTP请求后,将HTML页面作为包体返回给浏览器
- 浏览器在渲染引擎中解析响应,渲染包体至用户界面,然后根据HTML的超链接发起新的HTTP请求
3. HTTP协议的定义
定义:超文本传输协议,一种无状态的、应用层的、以请求/应答方式运行的协议。HTTP协议语义是可扩展的(向下兼容,服务器使用HTTP1.0,浏览器使用HTTP1.1,仍然可以正常工作),传递的消息是自描述的(不需要依赖其他的请求,单个请求即可明确内容),与基于网络的超文本信息系统灵活互动(传输内容不只是文本,还可以是视频、音频)
二. 基于 ABNF 描述HTTP协议消息的格式
1. 概述
HTTP格式分类:
- HTTP请求格式:方法(GET)+空格+path路径+http版本号+\r\n+Host头部+冒号+域名+\r\n
- HTTP响应格式:http版本号+空格+响应码+空格+描述+\r\n+http头部
HTTP组成:
- start-line:request-line/status-line(上图黄色部分)
- header-fueld:上图浅蓝色部分
- message-body:内容
2. ABNF
空白字符:用来分隔定义中的各个元素
- 例子:method SP request-target SP HTTP-version CRLF(SP表示空格)
选择/:表示多个规则都是可供选择的规则
- 例子:start-line = request-line / status-line
值范围 %c##-##
- 例子:OCTAL = "0" / "1" / "2" / "3" 与 OCTAL = %x30-37
序列组合():将规则组合起来,视为单个元素
不定量重复 m*n:
- * 元素表示零个或更多元素:*( header-field CRLF )
- 1* 元素表示一个或更多元素,2*4 元素表示两个至四个元素
可选序列[]:[ message-body ]
ABNF核心规则:
3. 使用ABNF描述的HTTP协议格式
HTTP-message: start-line *(header-field CRLF) CRLF [message-body]
start-line:
- request-line:method SP request-target SP HTTP-version CRLF
- status-line:HTTP-version SP status-code SP reason-phrase CRLF
header-field:field-name ":" OWS field-value OWS
- OWS:*(SP/HTAB)
- field-name:token
- field-value:*(field - content/obs - fold)
message-body:*OCTET
4. 使用telnet查看http协议格式
请求:
GET(method) /(target路径) HTTP/1.1(HTTP-version)
Host:www.baidu.com
返回:
[root@VM-125-189-centos ~]# telnet www.baidu.com 80
Trying 14.215.177.39...
Connected to www.baidu.com.
Escape character is '^]'.
^]
telnet>
GET / HTTP/1.1
Host:www.baidu.comHTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 14615
Content-Type: text/html
Date: Thu, 26 Aug 2021 15:46:32 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=A0F464693AB11C6134D53E9CC7860ACE:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=A0F464693AB11C6134D53E9CC7860ACE; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1629992792; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=A0F464693AB11C614E2C20E6C29ABCFA:FG=1; max-age=31536000; expires=Fri, 26-Aug-22 15:46:32 GMT; domain=.baidu.com; path=/; version=1; comment=bd
Traceid: 162999279203895096428040458772313014660
Vary: Accept-Encoding
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1<!DOCTYPE html><!--STATUS OK-->
<html>
<head>... ...
5. 使用wireshark抓包
简介:
步骤:
1. 配置捕获条件
2. 使用telnet发送http请求,查看wireshark捕获情况
3. 点击捕获到的http返回数据,发现与telnet请求返回的数据一致
三、OSI模型与TCP/IP模型
分层模型的好处:解耦合,各层之间的升级没有强依赖关系。例子:应用层升级不需要传输层变更(HTTP迭代不需要IP协议迭代);数据链路层不同的MTU对上层协议无影响
分层模型坏处:分层之后,多个层直接需要做处理,会有数据延迟,导致性能下降(英特尔的DBDK库提供接口绕过分层模型)
1. OSI模型
ISO组成:
- 应用层(http/telnet/ftp等):解决业务问题
- 表示层(TLS/SSL等):负责把网络中的消息转换成应用层的消息。例如tls和ssl消息格式应用层无法直接读取,需要表示层转换。
- 会话层(概念层次):表示层和传输层有部分延伸到会话层,控制进程建立会话。
- 传输层(TCP/UDP):进程与进程之间的通信。传输层决定报文到了主机上,主机应该把报文分发给哪个进程。TCP还做了报文可达性控制/流量控制
- 网络层(IP协议):确保在广域网(因特网)上,一个报文可以从一个主机发送到另一个主机。
- 数据链路层:在局域网中,使用mac地址链接到交换机/二层路由器,将报文转发到另一个主机上,只能工作在以太网上
- 物理层:物理介质
不同层次设备:
- 二层设备:面向mac地址进行转发报文的设备
- 三层设备:基于IP报文,进行广域网上转发的设备
- 四层设备:基于传输层的转发设备,例如lvs
- 七层设备:工作在应用层上,用以处理HTTP协议/GRPC协议等等
2. TCP/IP模型
TCP/IP模型与ISO模型区别:TCP/IP模型的应用层对应ISO的应用层/表示层/会话层,不严格划分数据链路层和物理层
3. 使用wireshark分析网络协议分层模型在网络报文的体现
a. 报文头部组成
- 传输层(Frame):mac
- 网络层(包):IP头
- 传输层(Sequence/Datagram):TCP头
b. wireshark抓包
关注红框区域,由上到下分别为:
- Frame:wireshark框架内容,不研究
- Ethernet:数据链路层,包含源mac地址和目的mac地址
- Internet Protocol:IP层,包含源IP和目的IP
- Transmission Controller Protocol:TCP层,包含源端口/目的端口
- TLS层:表示层,加解密层,无头部概念
- Hypertext Transfer Protocol层:Http层
四、HTTP协议概述
1. HTTP解决了什么问题
解决万维网信息交互需要面对的问题(HTTP解决的问题):
2.HTTP协议设计考虑的属性
a. Http协议设计需要考虑的属性
性能属性:
- 网络性能:吞吐量(QPS/TPS,小于等于服务器带宽);开销(首次开销:对于长连接,首次连接时有三次握手/TCP拥塞控制开销;每次开销:建立连接后,可复用首次连接的部分信息)
- 用户感知到的性能:延迟(发起请求到接收到响应的时间);完成时间(完成一个应用动作花费的时间)
- 网络效率:重用缓存,减少交互次数,选择就近的服务节点进行交互,COD
可修改性:
- 可进化性:一个组件独立升级不影响其他组件
- 可扩展性:向系统添加功能,不会影响系统其他部分
- 可定制性:定制化修改某个要素,不会影响常规用户
- 可配置性:应用部署后可通过配置修改功能
- 可重用性:组件可以不做修改在其他应用中使用
b. rest架构下的web体系
3. 从五种架构风格推导出Http的rest架构(?)
a. 分布式web架构中的五类风格
b. 数据流风格
数据流风格属性:从输入端读取数据,从输出端产出数据
c. 复制风格
复制风格属性:
d. 分层风格
LS$SS架构:分层+缓存+无状态+客户端服务器分层
有状态的分层风格:
远程会话RS:CS变体,服务器保存Application state应用状态/可伸缩性,可见性差
远程数据访问RDA:应用状态分布在客户端和服务器端(数据库的cursor)
分层风格属性:
e. 移动代码架构
统一接口的LC$SS+COD架构:
移动代码风格属性:
f. 点对点架构
点对点架构属性:
g. rest风格演化
五、HTTP协议分析工具
1. Chrome的network面板
a. 工作区介绍
过滤器:
请求列表:
更多用法参考:09 | 如何用Chrome的Network面板分析HTTP报文-极客时间
b. 请求时间分布
请求分布:
Queueing:浏览器在以下情况下进行排队
- 存在更高优先级的请求
- 该源已打开6个TCP连接,达到阈值
- 浏览器正在短暂分配磁盘缓存中的空间
stalled:请求可能会因Queueing中描述的原因停止
DNS Lookup:浏览器正在解析请求的IP地址
Proxy Negotiation:浏览器正在与代理浏览器协商请求
Request sent:请求正在发送
Waiting(TTFB):浏览器在等待第一个字节响应。TTFB(time to first byte)
Content Download:浏览器正在接受请求
查看方法:
网络篇-HTTP1.1协议(上)-概述相关推荐
- ⑧(网络篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)
iOS面试题 一共分为笔试题和面试题两部分 笔试题 一共分为10个 总共613题 面试题 一共400题 笔试题 一个10个系列 分别为 ①(语法篇) 共147题 已更新 ②(常识篇) 共72题 已更新 ...
- 02.iOS开发网络篇—HTTP协议
iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- 【网络篇】第十七篇——IP协议详解
IP协议 网络层与数据链路层有什么关系? 基本概念 IP协议格式 分卡与组装 网段划分 IP地址的构成 DHCP协议 IP地址的分类 IP分类的缺点 无分类地址 CIDR 特殊的IP地址 IP地址的数 ...
- Linux网络编程篇之ICMP协议分析及ping程序实现
Linux网络编程系列: Linux网络编程篇之Socket编程预备知识 Linux网络编程篇之TCP协议分析及聊天室功能实现 如果对Linux网络编程,对socket通信不是太清楚的同学,强烈推荐看 ...
- 网络篇 - https协议中的数据是否需要二次加密
随着互联网整体的发展,https 也被越来越多的应用.甚至苹果去年还曾经放言要强制所有的 app 都使用 https,可见在如今的互联网它的重要性.前面的文章说了 OSI 七层模型,https 可以保 ...
- 同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...
网络体系结构是从功能上描述计算机网络结构. 计算机网络体系结构简称网络体系结构是分层结构:是计算机网络的各层及其协议的集合. 每层遵循某个/些网络协议以完成本层功能. 分层结构-协议-接口-服务 首先 ...
- linux tcp 服务器 c,Linux网络编程篇之Tcp协议介绍, C/S通信及聊天室实现
基于tcp协议的网络程序流程图如下: tcp协议网络程序流程图 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态 客户端调用so ...
- 计算机基础知识八股文(网络篇)
一 网络篇 1.1 为什么分层? 各层之间是独立的.每一层并不需要知道它的下一层是如何实现的. 灵活性好.当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则其他层都不受影响. 当 ...
- 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
最新文章
- 编程实现路由算法 实验报告_lt;中国通信专刊gt; EARS:用于软件定义网络中自动路由的智能驱动体验网络架构...
- 父元素事件中禁止子元素的事件
- 启明云端分享|ESP32-C3(ESP32C3MINI1)使用的RISC与CISC有什么区别
- vue从入门到精通之进阶篇(五)脚手架vue-cli
- 全数字实时仿真平台SkyEye经典案例——空间站项目
- selenium自动向下滚动页面,并指定最大滑动距离
- 2017-2018-1 《信息安全系统设计基础》课程总结
- android自定义透明圆形,Android progressdialog自定义背景透明的圆形进度条类似于Dialog...
- python opencv导入pbtxt文件出现错误Failed to parse GraphDef file
- 4、配置虚拟机IP地址
- Qt 信号和槽机制( 详解 )
- php- osc,【原创】phpdesigner 使用OSC@GIT
- 在WIN10中安装经典计算器
- PYNQ在PS端进行图片缩放
- HEVC中CU、TU、PU划分和扫描方式简析
- 什么是软件外包公司?要不要去外包公司?
- java file 只读_Java如何设置文件为只读?
- js以excel为模板的打印
- python调用r语言加载包错误_Python调用R语言
- html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)