(二)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连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值