小白之HTTP协议熟悉篇

前言

目前HTTP是所有网络协议中最为广泛使用的一种,我们后台开发开放给前端切图仔们的接口就是HTTP接口。
为了延长本文的内容我还是稍微做下基本的解说吧,也当对HTTP协议复习。在了解HTTP协议之前,需要对一些基本的网络关键词有所了解。

客户端

以HTTP协议为基准的前提下客户端可以统称为索取数据方(数据消费方);

服务端

服务端则是只要能提供其他终端连接,并且对接入的连接请求进行反馈,都可称之为服务端;

所以简单来说服务端、客户端无非是网络连接下特定的角色,与具体的硬件无关。

OSI七层模型

OSI七层模型存在的原因:

在互联网发展的历史长河中,通讯技术不断自我改革升级,最初互联网上的单个网络请求都偏小,而如今网络终端的爆发式增长,各行各业对于信息化的依赖度达到了前所未有的高度。这些终端的硬性需求不断倒逼网络技术的发展。
在最初,IT巨头们基本各自为政,不同厂商之间的网络设备拥有不同的通讯标准,衔接起来自然成本颇高,不利于整个行业的健康发展。于是由各大通讯大佬为主导成立了相应的组织,也对通讯行业设定了通用标准,对于市面上流通的网络设备必须遵循此标准。OSI(Open System Interconnect)于1985年由ISO(国际化标准组织)发布。OSI七层模型明确了网络规范,促进了全球网络通讯行业的发展。

OSI七层模型详解

OSI七层模型从高到低的层次为:

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

下图(转自网络)解释了OSI七层模型的各层的分管功能

TCP/IP协议族

讲解TCP/IP协议族之前必须对协议的概念进行认可和理解,计算机网络世界内的协议就好比文明社会里的法律条规一样。无非是前者目的是设定网络帝国内各个联网设备、操作系统的通讯标准文书,后者设定的是维护社会治安的标准文书。
TCP/IP是互联网相关的各类协议族的总称,它不是单一的指向某个具体协议。如下图,众多的网络通讯协议都是TCP/IP协议族的成员。

HTTP协议

HTTP(HyperText Transfer Protocol)协议是网络通信领域里面绕不过去的知识点。中文名为超文本传输协议,它是位于OSI七层模型中的应用层。
其中HTTP协议依赖底层协议为TCP,所以HTTP请求也具备TCP协议的可靠性特点。

HTTP的历史

HTTP协议解决的需求

对于一项技术,我们要清楚的知道它存在的意义,它解决了哪些需求。
HTTP最早是用于解决网络上不同电脑的文档传输功能,至于为何不直接使用TCP协议是因为TCP协议它虽然具备了通讯功能,但是它本身并不具备对传输内容的约束。
这里的约束是指数据的格式,我们知道TCP是客户端与服务端经过三次握手后即可进行数据传输了,但是如若缺乏约定的格式则大大增加了服务器的校验压力。这个时候HTTP出来了,它拥有TCP的所有功能,保证了数据的可靠性,也沿用了三次握手的常规操作,同时对于请求的内容以及请求的方式则加入了自己的规范。

所以,我的理解是HTTP协议是对客户端与服务端的通讯增加了诸多规范,保证了双方通讯按照约定的格式进行。

那每一个走HTTP协议的网络请求它在进行请求时如何定义当前请求的“合规性”呢?
答案是HTTP请求报文,下面是一个正常不过的HTTP请求报文:

长连接

长连接是HTTP1.1版本下的一个重要特性,这个特性可以让客户端与服务端在第一次初始化连接过后不马上释放请求资源,后续该客户端的请求通过这个长连接继续拉取服务,因为减少了创建和释放连接的开销使得整体性能得到提升。
但是,不是所有场景都适合长连接,长连接适用于当前客户端会频繁的与服务端进行数据交互。如果只是临时性的拉取数据则没必要使用长连接,因为长连接背后是服务端开启了一个心跳检测线程,有规律的对接入的长连接进行定时检测,对于已下线的客户端则通过确认后再释放连接资源。
所以说长连接是以牺牲服务端硬件资源的前提下为HTTP请求进行提速。

HTTP1.1有哪些诟病

  • 链路阻塞:TCP连接上只能发送一个请求,前面的请求未完成前,后续的请求都在排队等待。
  • 多个TCP连接虽然HTTP/1.1管线化可以支持请求并发,但是浏览器很难实现,chrome、firefox等都禁用了管线化。所以1.1版本请求并发依赖于多个TCP连接,建立TCP连接成本很高,还会存在慢启动(三次握手)的问题。
  • 头部冗余,采用文本格式HTTP/1.X版本是采用文本格式,首部未压缩,而且每一个请求都会带上cookie、user-agent等完全相同的首部。
  • 客户端必须主动请求;

HTTP2.0

HTTP2.0是在HTTP1.1后的一次重大升级,据说同一网络资源使用HTTP2.0版本比使用HTTP1.1效率高百分之五十,当然这个有待考察,但是速度的提升是肯定的。
HTTP2.0的新特性包括并不限于下面几点:

  • 多路复用,减少阻塞。支持同一连接同时承载多个请求;
  • 对HTTP请求头压缩传输,压缩后数据体积更小,自然速度更快;
  • 二进制分帧,帧是HTTP2.0新增的一个数据通信单位,也是最小的通讯单位,且HTTP2采用二进制格式传输数据;
  • 服务器推送;

使用HTTP2.0

HTTP2.0需要客户端和服务端都支持才可以,否则任意一方不支持都会自动降低到HTTP1.1版本。
且几乎所有Web服务器都要求再绑定SSL协议才允许使用HTTP2.0协议。

IIS域名启用HTT2

申请HTTPS证书

因为Web服务器对于HTTP2.0要求使用SSL,所以我们需要到安全证书颁发机构申请HTTPS证书。
这里推荐FreeSSL.cn,它可以免费提供HTTPS证书申请、管理以及提醒到期等相关服务。
FreeSSL.cn地址:https://freessl.cn/

  • 1、输入你绑定的域名地址
  • 2、输入维护人员的邮箱地址并选择相关的属性,网页先有关相关属性的说明,如DNS验证与文件验证的区别等等
  • 3、根据提示安装KeyManager应用程序
  • 4、根据提示在KeyManager应用程序里生成CSR
  • 5、验证配置

从KeyManager导出证书

点击导出证书按钮后会出现选项供你选择,因为网站部署在windows,我们选择服务器平台为IIS

这里输入私钥密码,在IIS配置证书时候会使用到

在IIS管理界面配置服务器证书

这个网上有很多现成的教程可以参考,如
https://blog.csdn.net/mojocube/article/details/105796102

经过测试我发现只要在IIS上面将域名启用https后该站点就启用了HTTP2的协议了。如下图

但是在实际请求里我们的API还是请求的是http1.1

.NET Core站点API支持HTTP2.0

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/httpsys?view=aspnetcore-3.1#http2-support

小结

今天先到这里了,上面主要介绍了HTTP的一些基本信息以及如何在Windows平台下部署HTTPS站点

posted @ 2020-08-14 17:06  长沙大鹏  阅读(342)  评论(0编辑  收藏  举报