HTTP初相识--了解HTTP协议

  • 浏览器背后的故事
  • HTTP协议的前世今生
  • 透过TCPIP看HTTP
  • DNS域名解析
  • 回溯HTTP事务处理过程
  • 与HTTP请求的第一次亲密接触

浏览器背后的故事


通过DNS服务器查询域名所映射的IP地址,浏览器通过查询到的ip地址和WEB服务器进行通讯,通讯的协议就是HTTP协议

WEB服务器收到请求,自然会到后端来执行,然后将执行结果以响应报文的形式回传给浏览器,浏览器将响应报文进行渲染,渲染以后就是我们看到的页面了

渲染引擎是根据我们的html文件描述对应相对应的数学模型,调用我们浏览器的各个零部件,把我们网页资源的源代码展示成图像结果

HTTP
超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器(简单地来说,是用来在网页传递html的一种规则

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展

Web与HTTP
WEB是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统

建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构(简单地说Web是基于HTTP而来的,是在HTTP协议基础之上的图形优化展示

HTTP协议的前世今生


1990年Tim完成了万维网三大基础设计,包括命名方案URI,通信协议HTTP,还有用来表示信息的标记语言HTML

1991年HTTP0.9只有get,只能传递HTML格式的字符串,每个HTTP请求都是短连接

1996年HTTP1.0拥有更多技能,像post和head,拥有了更多的功能性,比如状态码、缓存、重定向、权限等等

1997年HTTP1.1拥有更多的技能,比如options、put、delete、connect等等,也引入了现在常用的持久连接,管道机制,分块传输等等

2015年HTTP2.0提高了我们的传输性能,实现了低延迟和高吞吐量

透过TCPIP看HTTP

HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集,是TCP/IP家族中的一员

为了更好的理解HTTP协议,我们先了解下TCP/IP的相关知识

TCP/IP协议族
TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称
分层管理是TCP/IP协议的重要特征

TCP/IP协议族分层

TCP/IP协议族是由一个四层协议组成的系统,这四层分别为:应用层、传输层、网络层和数据链路层

应用层
应用层一般是我们编写的应用程序,决定了向用户提供的应用服务。应用层可以通过系统调用与传输层向下进行通信。如:FTP、DNS、HTTP等

传输层
传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能
在传输层有两个性质不同的协议:TCP(面向连接,有连接可靠、效率比较低)和UDP(无连接,无连接没有校验机制比较不可靠、效率比较高)

网络层(网络互联层)
网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方(在众多选项中选择一条传输路径)

链路层(数据链路层或者网络接口层)
链路层是用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)以及光纤等物理可见部分。一切的传输媒介,硬件上的范畴均在链路层的作用范围之内

数据包的封装过程

上层协议的数据如何转变为下层协议的数据,这就是通过封装来实现

应用程序数据在发布到我们数据网络之前,会沿着这个协议栈,从上往下去进行传递,每层协议都在我们上层协议的基础之上加上自己的头部信息,链路层还会加上尾部信息,以此来实现所有层的封装,最终为到达我们的网络提供所有的必要信息,这就是数据包的封装过程

HTTP数据传输过程

我们内容TCPIP协议族进行网络传输通信的时候,会通过分层的顺序与对方进行通信,发送端从应用层往下走,接收端从应用层向上走
我们就拿HTTP协议进行举例说明
首先作为发送端的客户端,在应用层也就是通过我们的HTTP协议发出一个想看某个WEB页面的HTTP请求
接下来,为了传输方便,在传输层,就是通过TCP协议把应用层收到的数据,就是HTTP的请求报文进行分割并且在各个报文上打上标记序号、端口号等等一系列信息发送到我们的网络层
在网络层就是通过我们的IP协议增加作为通讯目的地的MAC地址,然后转发给链路层
这样一来呢,发往网络的通信请求就准备齐全了,接收端的服务器在链路层接收到请求的数据,按顺序向上层发送,一直发送到应用层
当我们传输到应用层时才算我们真正收到由客户端发送过来的HTTP请求,发送端在层与层之间传输数据时,每经过一层必定会打上该层所属的头部信息,反过来说,在接收端,在层与层传输数据时,每经过一层都要把对应的头部信息消去

发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除

传输层—TCP三次握手


第一次握手:
客户端发送带有SYN标志的连接请求报文段,然后进入SYN_SEND状态,等待服务端的确认

第二次握手:
服务端接收到客户端的SYN报文段后,需要发送ACK信息对这个SYN报文段进行确认。同时,还要发送自己的SYN请求信息。服务端会将上述的信息放到一个报文段(SYN+ACK报文段)中,一并发送给客户端,此时服务端将会进入SYN_RECV状态

第三次握手:
客户端接收到服务端的SYN+ACK报文段后,会向服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手

三次握手的目的
两端确认可以开始传输为什么要经历三次握手,三次握手的目的是我们的客户端和通信端要进行连接,要确认双方都能够明确自己和对方的收发能力是正常的

所以第一次握手,客户端发送了网络包,服务端收到了,服务端得出客户端的发送能力是正常的,我自己的接收能力也没问题,但客户端这时候什么都不知道,因为客户端只发送了请求,所以服务端要给它确认,所以给客户端发了个包,这里面带着自己的确认和请求,这样客户端得到服务端接收能力和发送能力是正常的,我自己的发送能力和接收能力也是正常的,第三次握手是因为服务端只知道客户端的发送能力和自己的接收能力,所以客户端要再发一次,这时候服务端就能得出客户端的接收和发送能力,自己的接收和发送能力都是没问题的
总是接收的一方能得到一些结论,发送方是不知道的,所以想要建立一个连接,至少需要三次连接过程

就像A和B都刚买了新手机,都想测试自己的短信功能是不是正常

DNS域名解析

DNS服务和HTTP协议有着密不可分的关系

通常我们访问一个网站,使用的是主机名或者域名来进行访问的。因为相对于IP地址(一组纯数字),域名更容易让人记住,但TCP/IP协议使用的是IP地址进行访问的,所以必须有个机制或者服务把域名转换成IP地址,DNS服务就是用来解决这个问题的,它提供域名到IP地址之间的解析服务

为了提高效率,DNS服务解析是有层次的,是一个就近原则,首先我们本地电脑会将经常使用的域名和想要的IP地址建立一个映射关系,并且保存到系统文件里,所以正常情况下,在我们DNS解析的时候,会优先从HOST文件里寻找IP地址,如果本地HOST文件没有域名对应的IP地址,会求助于本地的DNS服务器,本地都有自己的一个DNS服务,向本地的DNS服务发送请求,请求域名对应的IP地址,如果本地DNS服务没有,会一层一层向上一级DNS服务请求,直到根DNS服务,如果找到就会进行回传,最终返回给浏览器

CDN与DNS是怎么一层关系呢,DNS上挂载CDN,先由CDN来进行内容的分发,它告诉我根据自己的区域决定访问哪边的服务器,然后再通过DNS服务器返回给我们

回溯HTTP事务处理过程


当客户端访问Web站点时,首先会通过DNS服务查询到域名的IP地址,然后浏览器生成HTTP请求,并通过TCP/IP协议发送给Web服务器。Web服务器接收到请求后会根据请求生成响应内容,并通过TCP/IP协议返回给客户端


如果我们用客户端浏览器浏览一个页面的话,我们就要从中分解出我们的协议名,端口,对象路径等等,我们得到协议用的是HTTP协议,主机可能是慕课的主机,端口是80端口,对象路径是慕课的根结点,我们要通过DNS服务器解析出它的IP地址,下一步封装我们HTTP请求的数据包,把以上部分结合本地信息封装成一个HTTP请求的数据包,接下来再把这个数据包向下,我们HTTP是最上层的应用层,再往下是传输层,我们把这个包装成TCP包,这样才能建立TCP连接,就是TCP的三次握手,在HTTP开始工作之前,客户机首先要通过网络与服务器进行连接,这个连接就是TCP来完成的,这个协议与IP协议共同构建了我们整个的互联网,也就是前面说过的TCPIP协议族,HTTP是比TCP更高层次的,所以只有低层协议建立好以后才能建立更高层次的连接,所以TCP连接建立好以后就进行HTTP请求,最后关键一点,一般来说Web服务器向浏览器发送请求数据,我们就要关闭TCP连接,把连接释放掉

与HTTP请求的第一次亲密接触

可以下载WIRESHARK进行观察

DNS解析 > TCP连接(三次握手) > HTTP > 释放TCP连接

(二)HTTP初相识--了解HTTP协议相关推荐

  1. 数据可视化系列(一):Matplotlib初相识

    前言 期待了好久的datawhale可视化教程终于出来了,这次标题狠有文艺范儿,哈哈哈 这次我主要目的是最近要写篇论文,也正好为以后建模画图打捞基础~ 大家可以多看看官方教程: 中文官方网站:http ...

  2. matplotlib可视化初相识

    目录 第一回:Matplotlib初相识 一.认识matplotlib 二.一个最简单的绘图例子 三.Figure的组成 四.两种绘图接口 五.通用绘图模板 第一回:Matplotlib初相识 一.认 ...

  3. 学习打卡1-Matplotlib初相识

    学习打卡1-Matplotlib初相识 一.认识matplotlib matplotlib是受MATLAB的启发构建的.MATLAB是数据绘图领域广泛使用的语言和工具.MATLAB语言是面向过程的.利 ...

  4. 前端必知必会HTTP请求系列(二)简单一点的HTTP协议

    http协议用户客户端和服务器之间的通信 http协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信. 那么问题来个如果两台服务器之间一台服务器向另一台服务器进行接口请求那谁是 ...

  5. 数据可视化组队学习:《Task01 - Matplotlib初相识》笔记

    第一回:Matplotlib初相识 本文为组队学习任务01学习笔记. Matplotlib简要总结 Matplotlib的结构 一个完整的Matplotlib图像包括四个层级: Figure:容纳所有 ...

  6. mysqldump单个库导出_初相识 | 全方位认识 sys 系统库

    前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库.在我们的发布计划中为什么要把performance ...

  7. 【自动驾驶摸爬滚打路】自动驾驶仿真软件SCANeR 001初相识

    自动驾驶仿真软件SCANeR 001初相识 最近开始学习使用自动驾驶仿真软件SCANeR Studio 于是乎找了一圈,好像没有发现这个软件的pojie版 于是上官网申请试用版 AVSimulatio ...

  8. Hive查询系列之初相识

    Hive查询系列之初相识 1 基本查询(select--from) 1.1 全表和特定列查询 0)数据准备 (0)原始数据 dept: 10 ACCOUNTING 1700 20 RESEARCH 1 ...

  9. 初相识 | 全方位认识 sys 系统库

    前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库.在我们的发布计划中为什么要把performance ...

最新文章

  1. HarmonyOS 设置图标在Text 旁边
  2. jQueryDOM操作
  3. 基于MD5的增强型摘要算法
  4. HDU2586(最近公共祖先的Tarjan算法)
  5. geometry-api-java 学习笔记(七)拓扑运算之cut
  6. sqlserver2005仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'SendMealAddress'中为标识列指定显式值。...
  7. Linux常用命令大全(非常全)
  8. Python自定义包
  9. 【基础】基础算法学习笔记(状态空间)
  10. cp: 略过目录XXXXXX
  11. springboot输出日志到文件配置
  12. 从人工到自动,泛微云上自动化部署实践
  13. TRUNCATE TABLE command not allowed within multi-statement transaction
  14. 他山之石——VBA SQL基础
  15. MFC 登陆界面 创建地方
  16. Arbitrary Shape Scene Text Detection with Adaptive Text Region Representation ----论文翻译
  17. BLDC(直流无刷电机)反电动势测量/观测模型
  18. 远距离作战通信单兵系统
  19. QUAGGA 线程机制解析
  20. java解析soap返回报文_java解析soap响应报文

热门文章

  1. 给大家推荐对Redis分析讲解比较详细的大牛
  2. storm-kafka编程指南
  3. 关于serialVersionUID的说明
  4. Spark常用函数讲解之键值RDD转换
  5. 二叉树前序、中序和后序遍历的非递归实现
  6. 美国WH在明尼苏达州最大光伏阵列完工
  7. Windows Server 2012 R2 虚拟机迁移 出错 21502 0x80070490 解决
  8. Oracle索引----位图索引
  9. ListBox的使用
  10. 在JavaScript中实现yield,实用简洁实现方式。