认识http协议之前

最近在小组内,刚刚写完了ftp服务器,作为同等层级的http协议,仍然值得在大一大基础的时候好好学习。而最近在逛b站的时候,意外觉得黑马程序员的视频黑马程序员Python+AI零基础入门到大神全套视频课程,覆盖Python核心语法、AI应用、数据分析及Web应用等python实战项目开发全流程介绍到了http协议,不仅有助于我学习协议本身,复习之前网络相关的基础知识,也可以学习巩固一些关于ai相关的内容,何乐不为?直接开干!

网络基础知识

下面是一些关于网络基础的介绍,用作巩固和复习。

  • ip: 是互联网上识别每个设备的唯一标识。目前分为ipv4和ipv6两种,他们分别是32位和128位的二进制来表示的。

比如192.168.0.158(我随便打的),一共分为四个部分,每个部分都有8位的二进制来表示十进制。最终共同成为ip地址。

特殊的ip地址:127.0.0.1,叫做本地ip地址,也称为回环地址,用来描述本机。

  • 端口:对于每个设备上运行的不同程序,可以使用端口来区分。比如我要给某个ip地址的服务器的某个应用程序发去请求,就要有对应的端口来描述,我要请求哪个应用程序。在http中,默认的端口是80,https是443。

  • 网络的连接:我们每个人不同的设备,想要互相沟通起来,首先要保证物理世界的连接完整。

交换机:是用来沟通不同机器的关键设备。比如某个设备请求某个ip地址的连接,就会通过交换机来转发。

但现在就会有一个关键问题,虽然ip地址读起来还比较朗朗上口,但我们依然很难记住某个ip地址,比如你能记住www.baidu.com的ip吗?它是110.242.69.21。因此就会出现域名。

  • 域名和DNS解析服务器:域名本质就是一个字符串,以更为人性化,描述了当前的ip地址。但这时,我们不用ip地址来发送请求,而是使用域名的话,就必须要经过DNS解析。也就是,主机先通过DNS解析服务器,获取到对应的ip地址,之后发送给主机,主机拿到ip地址,再进行与对应设备的连接。

网络模型

介绍完了基本的一些网络知识,下面将开始进入http的逐步介绍。

  • OSI七层模型:这是国际上用来统一网络内通信的统一国际标准,即在网络的通信中,分有7层,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

  • TCP/IP模型:共分为4层,应用层,传输层,网络层,网络接口层。其中http协议,ftp协议,都是应用层。传输层即TCP,UDP协议。网络层有ip协议。不同层级都对上层实行了封装,只提供接口,向下兼容。为开发者提供了更有体系化的架构。

HTTP协议

http协议,即超文本传输协议。具有以下特点:

  1. 基于文本传输:规定了请求行,请求头,请求体。
  2. 一次请求,一次响应:只能由客户端向服务端发起请求。
  3. 无状态:服务端不会对客户端的请求记录状态。每次的请求-响应是独立的。

请求数据格式

当客户端对某个地址发起请求的时候,在请求数据内就写好了自己的数据格式。分为请求行,请求头,请求体三类。

  1. 请求行:规定了请求方法,目标路径等信息。请求方法共有两种,GET和POST,它们之间的区别是,GET没有请求体,需要写入一定大小的参数。比如https://www.bilibili.com/video/BV1sHU9BmEne?spm_id_from=333.788.videopod.episodes&vd_source=bfdbc24038191b349c91940b41c52430&p=94中,?后面的内容,按照&的方式分割,规定好了参数内容。而POST可以有自己的请求体,不限制大小。
  2. 请求头:请求头是用来具体描述请求信息的,包括客户端的OS,支持的格式等等信息。格式为key : value
  3. 请求体:即参数信息。

如果你使用的是chrome浏览器,你现在就可以打开F12,找到network,然后找到第一个请求,便可以自行查看。

响应数据格式

服务端一旦受到了客户端的请求,就必然要响应内容,发回给客户端。数据格式同样分为三种,响应行,响应头,响应体。

  1. 响应行:规定了协议和状态码。状态码最常见的有这些,200,表示客户端请求成功,400,表示客户端的参数错误,404,表示请求的资源不存在(最常见的状态码),以及500,表示服务器发生了不可估计的错误。
  2. 响应头:同样是key : value格式,明确了服务器的信息,日期等等。
  3. 响应体:服务端发回给客户端的数据。

小总结

从网络的基本知识,ip,端口,交换机,到TCP/IP模型,http协议,可见计算机网络在自底向上封装的隔离性和完整性,也就是上层协议可以专注协议本身。详细剖析了http协议的具体内容,也算是补上了当初http协议没学好的遗憾,接下来的一步步,需要慢慢走下去。