前言:

参考 极客时间 《Web协议详解与抓包实战》

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

1. 浏览器端

流程:

  1. 在用户界面(浏览器界面)的url地址,浏览器引擎联想url地址(通过浏览器轻量级数据库获取)
  2. 敲下回车后,浏览器引擎调用渲染引擎,渲染引擎发出请求,通过网络模块获取数据
  3. 等到html响应后,渲染引擎可能发现 javascript请求,发起二次请求
  4. 当渲染引擎获取到需要的文件后,会通过ui后端绘制完整界面

2. 网络端

流程:

  1. 服务器监听80/443等端口
  2. 浏览器从url中解析出域名,根据域名查询DNS,获取到域名对应的ip地址
  3. 浏览器使用查到的ip地址与服务器进行三次握手,建立起了TCP连接。如果使用了HTTPS,还要完成TLS/SSL握手
  4. 浏览器构造HTTP请求,填充相应的HTTP头部
  5. 浏览器发起HTTP请求
  6. 服务器收到HTTP请求后,将HTML页面作为包体返回给浏览器
  7. 浏览器在渲染引擎中解析响应,渲染包体至用户界面,然后根据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:请求正在发送

ServiceWorker Preparation:浏览器在启动网络相关进程Service Worker
Request to ServiceWorker:正在将请求发送至Service Worker

Waiting(TTFB):浏览器在等待第一个字节响应。TTFB(time to first byte)

Content Download:浏览器正在接受请求

Receiving Push: 浏览器在通过HTTP/2服务器推送接收此响应的数据
Reading Push:浏览器正在读取之前接收到的本地数据

查看方法:

网络篇-HTTP1.1协议(上)-概述相关推荐

  1. ⑧(网络篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)

    iOS面试题 一共分为笔试题和面试题两部分 笔试题 一共分为10个 总共613题 面试题 一共400题 笔试题 一个10个系列 分别为 ①(语法篇) 共147题 已更新 ②(常识篇) 共72题 已更新 ...

  2. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  3. 【网络篇】第十七篇——IP协议详解

    IP协议 网络层与数据链路层有什么关系? 基本概念 IP协议格式 分卡与组装 网段划分 IP地址的构成 DHCP协议 IP地址的分类 IP分类的缺点 无分类地址 CIDR 特殊的IP地址 IP地址的数 ...

  4. Linux网络编程篇之ICMP协议分析及ping程序实现

    Linux网络编程系列: Linux网络编程篇之Socket编程预备知识 Linux网络编程篇之TCP协议分析及聊天室功能实现 如果对Linux网络编程,对socket通信不是太清楚的同学,强烈推荐看 ...

  5. 网络篇 - https协议中的数据是否需要二次加密

    随着互联网整体的发展,https 也被越来越多的应用.甚至苹果去年还曾经放言要强制所有的 app 都使用 https,可见在如今的互联网它的重要性.前面的文章说了 OSI 七层模型,https 可以保 ...

  6. 同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...

    网络体系结构是从功能上描述计算机网络结构. 计算机网络体系结构简称网络体系结构是分层结构:是计算机网络的各层及其协议的集合. 每层遵循某个/些网络协议以完成本层功能. 分层结构-协议-接口-服务 首先 ...

  7. linux tcp 服务器 c,Linux网络编程篇之Tcp协议介绍, C/S通信及聊天室实现

    基于tcp协议的网络程序流程图如下: tcp协议网络程序流程图 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态 客户端调用so ...

  8. 计算机基础知识八股文(网络篇)

    一 网络篇 1.1 为什么分层? 各层之间是独立的.每一层并不需要知道它的下一层是如何实现的. 灵活性好.当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则其他层都不受影响. 当 ...

  9. 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...

最新文章

  1. 编程实现路由算法 实验报告_lt;中国通信专刊gt; EARS:用于软件定义网络中自动路由的智能驱动体验网络架构...
  2. 父元素事件中禁止子元素的事件
  3. 启明云端分享|ESP32-C3(ESP32­C3­MINI­1)使用的RISC与CISC有什么区别
  4. vue从入门到精通之进阶篇(五)脚手架vue-cli
  5. 全数字实时仿真平台SkyEye经典案例——空间站项目
  6. selenium自动向下滚动页面,并指定最大滑动距离
  7. 2017-2018-1 《信息安全系统设计基础》课程总结
  8. android自定义透明圆形,Android progressdialog自定义背景透明的圆形进度条类似于Dialog...
  9. python opencv导入pbtxt文件出现错误Failed to parse GraphDef file
  10. 4、配置虚拟机IP地址
  11. Qt 信号和槽机制( 详解 )
  12. php- osc,【原创】phpdesigner 使用OSC@GIT
  13. 在WIN10中安装经典计算器
  14. PYNQ在PS端进行图片缩放
  15. HEVC中CU、TU、PU划分和扫描方式简析
  16. 什么是软件外包公司?要不要去外包公司?
  17. java file 只读_Java如何设置文件为只读?
  18. js以excel为模板的打印
  19. python调用r语言加载包错误_Python调用R语言
  20. html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)

热门文章

  1. s7填表指令att_这些PLC指令你会用吗?plc编程入门
  2. 输入年份判断是不是闰年
  3. 5-26 高位震荡中,明后天有调整需求
  4. 程序员为何很难与他人沟通
  5. brpc搭建、编译和使用
  6. GB28181国际标准监控对接web平台搭建
  7. A Vertical Kelvin Test Structure for Measuring the True Specific Contact Resistivity
  8. 如何使用HbuilderX运行小程序项目
  9. 万用表和示波器测量的区别?简单看完,让你少走弯路
  10. JavaScript星星动画心形js特效