1一个HTTP请求的网络脉络,解压爽文

2023-10-30

读完此篇会收获什么是一个完整HTTP请求,从客户端发送到服务端,到底经历了什么。

关键词TCP/IP 协议族。

1写前的话


   这是第一次读一本书来用一种摘录的形式记录整理,相信大家多多少少听过此书的名字,一本经典的书------《图解HTTP》,与大家分享,此书共十一章,小编暂时计划将以十一篇博文的形式,分享大家,当然根据权重也可能会合并一些章节。如有侵权请您留言联系,我将立刻处理。
  为什么要分享这本书?或者读这本书对我们自身的价值在哪里?这是我们要不要继续看这篇博文的一个理由。

以下是我认为必要的原因:

  1. 完全了解http协议,我们会更加深刻理解Web开发
  2. 对客户端与服务器的通信交互场景细节了然于心。
  3. 思想启发
  4. 节省时间,我将摘录一些关键节点分享。

从思维启发来看
上面的第三点,是我认为最重要的一点,深入理解http协议后,我们将会站在一个协议设计者角度,来看待“协议”这点事情,这是一个知识或者说是思想启发的迁移,站在高纬度视角,向山下眺望,会给予,肉身仍在山中的我们,清晰明确方向,最终完成目标。
从学习性价比来看
非常nice!, 一个很扎心的事实,我们后端的开发技术,更新迭代的速度,远快于我们学习的速度,可是万变不离其宗的技术总是有内么几个,例如linux系统内核的io模型,系统的一致性,网络…大家千万不要内心升起来那种,(这些都是偏底层的我学他干嘛啊,有时间还不如搞两个框架,新技术工具,拓宽一下),因为我以前也是这样想法,可是真正学习了这些偏底层的基础后,去看待一些从前自以为明白的技术,发现有了不一样的理解,而且有了底层基础后,学习新的技术,不会惊叹如此的神奇,而是觉得设计的巧妙!

自己感觉好啰嗦…上干货吧。

2 网络请求概览

2.1 http 的产生

2.1.1什么叫做协议?

白话说: 协议是规则的约定,我们彼此间约定好一些数据格式,大家尊照预先设计好的格式来传输,这样每个尊重此格式规范的程序,都可以解析,并且,解析好在按照规定的格式来发送,一言以蔽之:前后端开发人员定义好,传的参数和返回参数的字段内容,方便解析。这就是协议。

2.1.2http定义

定义:Web使用一种名为HTTP的协议作为规范。术语:超文本传输协议(HyperText Transfer Protocol),用它来完成web客户端到,服务端一系列的流程,所以说Web是建立在HTTP协议上的通信的。

2.1.3 http诞生历史

怎么来的?

​ 制定http的初衷,是致力于全世界的研究者们进行知识共享!!!

源于:欧洲核子研究组织的Tim Berners-Lee 提出让远隔两地的研究者们共享知识的设想,之所以叫超文本,是最初设计理念,想借助多文档之间的相互关联形成的超文本。于是一个著名的词出现啦!"www"表示World Wide Web 中文翻译, 万维网或者叫做环球网。

在这里插入图片描述

www技术的构建由三点组成

1 页面的文本标记语言为HTML

2 所有的文档由URL作为地址标记(统一资源定位符)

3 作为文档传输协议的HTTP

好了我们已经知道了HTTP 协议怎么来的了,知识共享的万维网中,技术构建实现中,需要传输协议,所以, http诞生!!!!。

时间迭代史

1990年问世,并没有正式作为标准建立,因此被称为HTTP/0.9

1996年才作为标准版本定位HTTP/1.0

1997年公布HTTP/1.1,这是目前主流的协议版本(想想97年我还没上学那,那会就已经定型了基本。技术学习性价比还是很高的)

2015年公布HTTP2.0

2.1.4浏览器的小插曲

1990年诞生世界第一台web服务器和web浏览器

1992年日本第一个网站主页上线

1993年诞生现代浏览器的祖先NCSA

1994年网景通信公司发布Netspace Navigator1.0

1995年微软发布Internet Eplorer1.0和2.0

19995年 微软与网景公司爆发浏览器大战,两个公司各自对HTML进行扩展,于是出现写HTML页面时必须要考虑兼容两家公司的浏览器!浏览器供应商竞争中,对Web标准化视而不见…

2000年网景公司衰落,竞争告一段落

2004年Mozilla基金,发布了Firefox,又爆发了浏览器大战…

IE浏览器版本从6 升到7花费了5年,之后不断发展 8 ,9,10,11,听说新版的Microsoft Edge ,好评很多,另外,Chrome,Opera,Safari浏览器也纷纷抢占份额

2.2tcp/ip协议族

TCP/IP协议族,这是一个集合,其中就包含HTTP协议如下:

在这里插入图片描述

纯手工制图…

不要被这些乱糟糟的协议影响心情,我们大概知道下,除了HTTP 外,哪些协议扮演了什么角色,就能概览一个整体HTTP请求,经过浩瀚的网络传输中到底经历了什么。

TCP/IP ,是一个集合中的总称,之所以叫这个名字我认为那是因为,TCP协议与IP协议太太太重要了!!

下面简单介绍下

下面要用的两个协议:

2.2.1DNS

出现DNS的原因就是我们人类不习惯 直接访问http://192.168.XX.XX 这样的网页,如果是字母英文那就好了是吧比如

http://www.taobao.com http://www.baidu.com ,所以为了方便服务我们记忆,DNS服务出现了,每次访问这种域名的地址时,DNS协议提供通过查找IP地址。

2.2.2TCP

按层次分TCP属于,传输层,提供可靠的字节流服务,即:TCP协议为了传输方便,把大块数据切分成报文段,来发送,并且发送方,根据接收方的响应,能确定数据是否最终到达对方。

经典面试题TCP三次握手

第一次

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

下图使用WireShark 抓包工具的一个tcp握手过程

在这里插入图片描述

具体演示:

192.168.2.104 por:57335为客户端 我们简称Client,服务端:116.85.x.xxx port:xxxx 我们简称Server

上图的流程:

第400行: Client首先向Server发送syn包,包序号seq为0

第401行: Server收到Client 的syn包后,将包序号加1,赋值给ack。 ack1=seq+1=1 【seq来自Client】。同时还要发送自己的包序号seq=0。

第402行: Client收到回复之后,需要回复Server。自己的包序号seq=seq+1=0+1=1 【seq来自Client】。同时将服务端的包序号加1,再发送回去。即ack=seq+1=0+1=1 【seq来自Server】

2.3网络的分层

TCP/IP协议族这个集合中虽然,包含了很多协议,看起来杂乱,但其实分层来看,还是很清晰的,这里提一点,分层的好处,我们开发时经常会controller ,service ,dao,其实这就是在分层解耦,试想如果互联网的传输协议仅仅是一个协议搞定,那么如果改动,就需要把整体替换掉,可是如果分层,我们只需要替换被修改的那层即可,分层如下:

在这里插入图片描述

纯手工制图…

2.4各层介绍

2.4.1应用层:

抽象说,应该叫做用户具体的活动干了什么,用规范的协议来书写记录这些活动,然后被传输层发送。

应用层HTTP,FTP,DNS,都属于应用层,白话来说,浏览网页,必然使用http 协议来干活(同时还有DNS),xshell 连接工具中有ftp 传输文件的功能,自然是FTP协议来干活,浏览www.baidu.com 必然要将 域名转换成ip地址,需要的是DNS协议来干活,这些协议一般会预存在我们电脑中。

2.4.2传输层

真正在两台计算机间数据传输的方式,一般为两种:UDP,TCP 。

UDP发送数据包无序服务端响应确认,数据传输不可靠,但是速度快。

TCP发送数据包要求服务端确认是否收到,没收到重发!,数据传输可靠,但是速度慢。

根据场景不同我们来选择。举个例子语音通话,采用tcp,如果网络卡顿,重发了声音数据,听起来会前言不搭后语呀,并且说一句话tcp要每次检查是否数据完整,客户时间上体验感会感到巨慢!

2.4.3网络层

为传输的数据包选择一个路线,数据包是网络传输最小的数据单位。

在众多的路线中选择一条传输路线。大家脑海中要有一个概念,每个网络请求几乎是通过好多路由层层跳跃到下一个路由,最后才到达目标服务器。所以网络层是选择层层跳跃的路线中选择一个传输路线。

2.4.4链路层

用来处理网络连接硬件的部分,例如硬件设备驱动,网卡,等物理可见部分。

网络请求流程图细化

在这里插入图片描述

纯手工制图…

特别注意

可以看到每层协议都对数据封装,需要注意的是为了传输方便,一个http请求的内容,会被TCP分割成多个片段来传输。另外IP协议是几乎所有使用网络的系统都会用到IP协议,用来传输数据包有两个总要条件,ip地址,和MAC地址,(mac地址是每台电脑出厂的一个唯一id),这里我要插条ARP协议的内容(https://blog.csdn.net/weixin_41955327/article/details/85562687)及其简单3分钟内的内容 帮你了解ARP是个什么东东。强烈建议看下。

在解释下上面说的层层跳跃的意思:

到达通信目标前的中转过程中,那些计算机和路由器等网络设备能获悉很粗略的传输路线。这种机制成为路由选择机制。请看下图:

在这里插入图片描述

纯手工制图…

如上图层层跳跃的意思不断的中转

3总体流程图

这个截屏不是很清晰,稍后我会把原图地址放到最后,可以网页查看原图地址,所有的图都在这里。

process 正在维护,暂时先放在git hub上吧。 image文件夹下是原图片。

https://github.com/brinjaul/HTTP.git

在这里插入图片描述

纯手工制图…

如果你能看到这里了,不如点赞关注一波,我会认真分享每一篇博文。大家共同成长。

我的公众号:茄子的笔记

赠人玫瑰,手有余香,你的关注,我的动力!

更多分享可见:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1一个HTTP请求的网络脉络,解压爽文 的相关文章

  • 【C++】初级—类和对象之赋值运算符重载、取地址操作符重载和const修饰的取地址运算符重载

    在上一篇中写到 一个类会产生的6种默认函数中的前三个默认函数 1 构造函数 2 析构函数 3 拷贝构造函数 4 赋值运算符重载 5 取地址操作符重载 6 拷贝构造函数 这次将着重讲解后三个函数 赋值运算符重载 运算符重载 什么是运算符重载呢
  • CSS字体的单位

    长度单位 1 像素 px 实际上是屏幕上的一个个小点 100px 100个小点 这个点 正常情况我们是看不到 如果我们把一个内容放大很多倍 就可以看到了 在pc端 电脑端 一般情况下1px 1个发光点 也是我们最常用的长度单位 它是固定单位
  • “区块链”技术在传统行业中的应用

    点击上方 中兴开发者社区 关注我们 每天读一篇一线开发者原创好文 比特币可能是一场庞氏骗局 但区块链技术却真实存在 2013年以来 比特币受到了全世界投资者的狂热追捧 虽然几经涨跌 大部分国家监管方对其态度也不甚明朗 但作为比特币底层技术的
  • react hooks实现原理(useState为例)

    一 源代码 逻辑十分绕 建议多敲几遍 let isMount true 判断是挂载还是更新 let workInProgressHook App组件对应的fiber对象 const fiber memorizedState null 当前h
  • 【NLP】T5:文本到文本转换器

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 智能指针类HasPtr

    智能指针是存储指向动态分配对象指针的类 用于控制对象的生存期 能够确保自动正确的销毁动态分配的对象 防止内存泄露 HasPtr 在其他方面的行为与普通指针一样 具体而言 复制对象时 副本和原对象将指向同一基础对象 如果通过一个副本改变基础对
  • 微信小程序车牌号码输入(虚拟键盘)

    近日在网上看到一位博主写的微信小程序 输入车牌号 有新能源 原文链接 https blog csdn net qq706352062 article details 105554453 ops request misc 257B 2522r

随机推荐

  • ppt复现CVPR顶会流程图

    本次目标如下图 难点在于立方体和矩阵格网的绘制 文末附机器学习绘图模板 先来绘制立方体 插入 形状 立方体 调节成如下图 再点击水平翻转 绘制矩形 多绘制几个组合成矩形格网 右键设置形状和格式 输入以下参数 调整好使其贴合立方体 如图所示
  • 全志V3S环境编译开发流程

    这里使用的是荔枝派Zero 官网上面没有带spiflash的 首先准备一张SD卡 U BOOT 首先需要配置交叉编译环境 这里就不多说了 需要的话前往Sipeed官网 Sipeed 首先获取uboot源码 git clone https g
  • vscode快捷键:定位某一行,跳转到这一行

    快捷键 Ctrl G 然后在弹出的框中输入行数就可以了 参考 https blog csdn net cvper article details 81090028
  • Spring的三种注入方式:构造方法注入,set方法注入,注解注入

    本文演示三种值注入方式和三层模式下的注解注入获取对象 首先是搭建基本的Spring运行环境导入四个基本的核心jar包和两个日志包 在src根目录下新建bean xml的配置文件 同时引入dtd约束 一 构造函数注入 在bean xml中配置

  • 分割线样式

    hr style height 2px border none border top 2px ridge green
  • vue项目 后端传给base64格式图形验证码 ,前端进行解析,回显。

    我们在实际项目中时在登录的时候 时常会遇到图形验证码 来进行验证用户操作 什么是图形验证码 图形验证码是验证码的一种 有防止黑客对某一特定注册用户用程序暴力破解私人信息 恶意破解密码 刷论坛灌水的作用 票 图形验证码是一种区分用户是计算机还
  • SpringBoot底层原理

    SpringBoot底层原理 一 SpringBoot是什么 二 SpringBoot核心原理 三 springboot启动原理 一 SpringBoot是什么 想要了解springboot底层原理必须要先知道springboot是什么 作
  • 计算机视觉领域关注的会议和期刊

    原本为给师弟师妹总结的自己经验 节省计算机视觉领域大家看什么论文和去哪里看论文的困惑 一 会议论文 视觉的领域主要关注的三大顶会论文 CVPR ICCV ECCV 搜索途径 1 CVPR和ICCV都是IEEE库 可以在IEEE explor
  • QT中ui文件生成关联的C++类

    在VS2008中给对话框资源添加关联的C 类时 可通过右键菜单 添加类 直接添加关联的C 类 但QT中不支持这样的操作 在QT中在创建界面ui时 可手动也可自动创建ui文件关联的C 类 分别如下所示 一 自动创建ui文件和对应的C 类 项目
  • C语言开发网站

    在正式开发之前 先了解一下网站的原理 请求 处理 响应 在浏览器的network中可以看到浏览器和服务器的交互过程 请求一个网站的本质就是咱们的浏览器和服务器交互的一个过程 比如说咱们请求www baidu com 就是咱们的浏览器向服务器
  • lede 插件_路由器帮你签到!「LEDE/Openwrt系统“签到狗”插件使用教程」

    每日签到 废话不多说 用了才知道 图标 支持的站点 baidu 百度贴吧 百度文库v2ex V2EXhostloc hostloc comacfun A站bilibili B站163music 网易云音乐PCmiui 小米论坛52pojie
  • getline函数

    在我的印象中 getline函数经常出现在自己的视野里 模糊地记得它经常用来读取字符串 但是又对它的参数不是很了解 今天又用到了getline函数 现在来细细地总结一下 首先要明白设计getline函数的目的 其实很简单 就是从流中读取字符
  • 超强大JS表格:DataViewsJS 1.8.16.1407 Crack

    DataViewsJS完整的 JavaScript 数据呈现和数据网格平台 通过从各种不同的演示视图中进行选择 包括树 卡片 砖石 网格 时间线 甘特图 日历和网格 超越传统的表格显示 快速地 纯 JavaScript 针对速度进行了优化
  • ECMAScript 6规范总结(长文慎入)

    闲话 学习ES6的动机起于对其promise标准的好奇 它与jQuery源码中Deferred不同 而且在异步编程中加入了Generator 在后续ES7中更有Async 这勾起我强烈的兴趣了解ES6更多的内容 于是完整的学习了阮一峰老师的
  • Java Web实战开发基础:MVC模式

    Java Web的MVC模式 MVC是java web的基础 我写的java web实战开发专栏系列都是基于MVC 建议有需要的订阅我专栏的铁铁先提前看看这篇博文哦 简介 Java Web开发中 采用MVC Model View Contr
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 进程间同步(互斥量、信号量)

    进程间同步可以使用互斥量mutex 互斥锁 信号量和文件锁 进程间同步使用信号量 int sem init sem t sem int pshared unsigned int value 用于进程间同步此时第二个参数不能取0了 取非0值用
  • stm32中can通讯的基本概念

    身为一个电控组的成员 我们当接触一个新的概念的时候首先应该去了解他的硬件 其次再者是软件 而且在学习新的应用时 也应该清楚什么我们要着重了解 什么我们要清楚即可 以can为例 我们先从他的硬件说起 Can硬件一共有两种接法 但核心还是两根信
  • Tomcat服务器的HTTP首部长度最大值

    今天编写Cas5 OAuth2 0 实现password 授权功能时 Tomcat 提示如下信息 HTTP 头部长度超出默认长度 解决方法 配置文件路径 TOMCAT HOME conf server xml 修改如下 添加头部最大值 81
  • 1一个HTTP请求的网络脉络,解压爽文

    一个HTTP请求的网络脉络 解压爽文 1写前的话 2 网络请求概览 2 1 http 的产生 2 1 1什么叫做协议 2 1 2http定义 2 1 3 http诞生历史 怎么来的 时间迭代史 2 1 4浏览器的小插曲 2 2tcp ip协