web开发中,无论是前端还是后端,所离不开的东西就是HTTP协议和HTTP相关的东西,今天我们就来聊聊和HTTP相关的一些知识。
HTTP协议简介
HTTP协议全称为超文本传输协议 ,是一个基于TCP的应用层协议,主要是用来规定客户端和服务端的数据传输格式,从名称就可以清楚的了解到最初这是一个用来传输HTML(超文本标记语言)文件的协议,随着互联网的发展,它现在已经可以传输其他各类文件(例如图片、视频等)。
HTTP协议工作于客户端-服务端模型架构上,因此我们要先来了解一下客户端-服务端模型。
客户端-服务端模型
客户端在硬件层面通常指的是电脑、手机等设备,而在软件层面则指的是浏览器等应用程序。现在我们在自己的电脑上也就是客户端电脑上打开浏览器,接着我们在地址栏里输入www.bilibili.com访问b站,这时候浏览器就会加载出来b站首页。在这段过程中,浏览器必然进行了一段十分复杂的操作,要想理解这段操作,首先我们要先认识几个概念。
域名、IP地址、端口、服务器
首先是www.bilibili.com它到底是什么?从专业角度来讲,这串字符串的名字叫域名,在互联网中绝大多数的网站都有自己的域名,并且这个域名是唯一的。互联网中的每一个域名都映射了一个IP地址(ping www.bilibili.com
),IP地址是互联网上的每一台主机或者说是服务器都具备的逻辑地址,它具有统一的格式,目前世界上有IPv4和IPv6两种版本,IPv4是一个32位的二进制数,通常被分割为4个8位二进制数,不过我们一般用十进制来表示(比如:192.168.51.2)。2019年11月26日,IPv4地址已经被分配完毕,现在各国都已经开始部署IPv6地址。IP地址中除了主要的四个数字,还有一个使用冒号分割出来的数字,这个数字叫做端口号,它是用来区分各个不同服务的编号,通常我们在浏览器地址栏中很少见到端口号,是因为http请求的默认端口号就是80,大部分企业也会把自己的网站挂载到80端口上。
我们通俗的来理解一下域名、IP地址、端口、主机之间的关系,如果把互联网当作一张大地图,各台主机当作地图上的各个小区或者是建筑,这样IP地址就相当于各个小区或者是建筑的地址,比如咱学校的地址:文明大道265号,而域名就相当于文明大道265号这个地址的名字——安阳师范学院老校区。所以,域名实际上的作用就是为了取代冗长的IP地址,方便我们记忆。如果我们把不同的院系比作不同的服务,那么端口号就相当于软件学院的教学楼或者是互联网+应用技术学院的科技楼。
了解了这几个概念后,我们就要看看浏览器在我们输入网址按下回车后究竟干了什么。
发送到DNS
首先,我们现在都清楚,www.bilibili.com这个域名它映射了一个IP地址,但实际上无论是我们的电脑还是浏览器都不知道这个IP地址是什么,因为域名所绑定的IP地址是有可能更改的。因此当我们访问b站的时候,浏览器会将我们想要访问b站的这个消息根据HTTP协议封装成一个叫请求报文的东西,并将这个请求报文发送到域名解析服务器上,这个域名解析服务器就是我们常说的DNS,在这个DNS上有一个表,里面存储了许多域名及其对应的IP地址。请求报文发送到DNS后,DNS会解析出请求报文中的域名,然后根据域名找出其对应的IP地址,但是DNS的容量是有限的,因此一台DNS不可能存储所有的域名信息,当在这台DNS中找不到对应的IP地址时,当前DNS会将当前请求向上一级的DNS发送过去,逐级解析,直到找到对应的IP地址。
发送到目标服务器
找到域名对应的IP地址后,DNS就会将请求报文转发到目标服务器电脑上的服务器软件上(比如:IIS、Apache),服务器接收并解析请求报文后,会将请求报文所请求的资源根据HTTP协议打包成一个叫做响应报文的包,发送回发出请求的电脑,因为请求报文中携带有发送请求的电脑的IP地址,所以在响应报文发送时并不需要经过DNS服务器,可以直接送达目标电脑上。
浏览器接收响应
浏览器接收到响应报文后,再根据HTTP协议解析这个响应报文,然后将解析到的数据渲染到浏览器内容区域,这样我们就看到了b站的首页。
请求报文与响应报文
前面我们提到了两个东西,请求报文与响应报文,接下来我们来看看请求报文与响应报文长什么样子。(F12)
请求报文与响应报文都主要分成两部分——请求(/响应)头与请求(/响应)正文
请求报文
-
请求头中通常包含请求方法(GET,POST....),Headers(浏览器类型、主机地址)
-
请求正文中会包含请求的通过body、from等方法传递的参数。
响应报文
- 响应头中主要有响应状态(200,404...),响应类型等
- 响应正文则一般都是我们所请求的数据。