HTTP、HTTPS、TLS协议及对称与非对称加密原理

一、HTTP超文本传输协议

HTTP全称为Hyper Text Transfer Protocol超文本传输协议,它是基于TCP传输协议构建的应用层协议,作为支撑万维网www的核心协议,为了保证其效率及处理大量事务的能力,因此在设计时,HTTP被制定成为一种无状态协议,也就是说:**HTTP本身不会对发送过的请求和相应的通信状态进行持久化处理**。

也正因HTTP的无状态特征,所以在有些需要保持状态的场景中,则需要引入其他技术来实现,比如需要保持“登录状态、授权状态”时,需要配合Cookie来实现记录与管理状态。

HTTP于1990年提出后,经过多年的完善和扩展,目前已经存在多个主流版本的迭代:

目前HTTP主流应用版本还是HTTP/1.1、2.0

1.1、HTTP协议工作流程

HTTP核心由请求与响应构成,是一种典型基于客户端和服务器模型的协议,在目前的网络中,浏览器作为HTTP协议的主要载体,一般来说,“从浏览器发出请求到服务器返回响应”,这个过程被称为一次HTTP操作,也被称为一个事务,其具体过程如下:

图片

HTTP工作流程

  • • ①客户端连接WEB服务器:浏览器与服务器的HTTP/80端口建立一个套接字连接。

  • • ②发送HTTP请求:根据用户的URL,通过套接字连接向服务器发送对应的请求报文。

  • • ③服务器处理请求并返回响应结果:解析请求、定位资源、执行逻辑后将结果写到套接字,客户端从套接字中获取结果。

  • • ④释放TCP套接字连接:默认情况下,服务器主动终止套接字连接,客户端被动关闭。

从建立连接发出请求,到服务器处理完成后,返回响应再关闭连接,既代表着一个“事务”就完成了,但客户端接受到响应后,还会存在:解析响应报文、渲染结果数据这两步操作。

接下来我们根据HTTP工作流程的先后顺序,依次拉开HTTP协议的完整序幕,如下:

  • • ①、URI资源标识符及URL资源定位符详解

  • • ②、HTTP报文-请求报文与响应报文

  • • ③、HTTP请求方法分类

  • • ④、HTTP请求状态码

1.2、URI资源标识符及URL资源定位符

一般网络请求的前提是:需要用户在浏览器输入或点击超链接后,得到一个目标网址才会触发,而网址的专业术语为:**URL统一资源定位符**,而URL又是URI的一部分。
   但URI统一资源标识符这个词并没有URL那么普及,因此出现在大众视野中的次数并不多,它的作用是区分网络上不同的资源,主要涵盖了URLURN两部分。

接下来看看URL的构成,一般来说完整的URL结构如下:

URL完整结构

但上述结构使用较少,URL的常用结构如下:

图片

URL常用结构

我们依次分析看看:

  • • scheme:表示使用的协议类型,例如http、https、ftp、chrome等。

  • • ://:协议类型与后续描述符之间的分隔符。

  • • domainName:网站域名,经DNS解析后会得到具体服务器IP

  • • /path:请求路径,代表客户端请求的资源所在位置,不同层级目录之间用/区分。

  • • ?query1=value:请求参数,?后面表示请求的参数,采用K-V键值对形式。

  • • &query2=value:多个请求参数,不同的参数之间用&分割。

  • • #fragment:表示所定位资源的一个锚点,浏览器可根据这个锚点跳转对应的资源位置。

PS:锚点也被成为片段标识符,#部分之后的内容,即锚点不会被发送到服务器,锚点的作用仅是在浏览器解析时,跳转指定的位置显示。

对比完整的URL,常用的URL中除开用户名及密码外,还存在一点不同,即host:port主机IP+端口变为了domainName域名,那为什么又要这样做呢?

IP不方便记忆,对于普通用户而言,一串数字远比不了“拼音缩写”,好比www.baidu.com任何人都能记住,但14.215.177.38却不行。
②服务器的IP是动态多变,当网关宕机后换机部署时,IP又不相同了,但域名却是固定的,就算服务器IP再怎么变,域名都不会更换。

用户请求的域名又是如何变成具体IP的呢?这里面就得提及另一个概念:DNS解析。

1.2.1、DNS域名解析系统

在计算机网络中,每个主机都存在一个IP地址,但由于IP是一串数字不方便人类记忆,因此出现了一种协议名为DNS,它可以把生涩的IP地址转换为便于人类记忆的域名,例如百度的:www.baidu.com

DNS(Domain Name System)中文的意思是域名系统,每个互联网企业WEB网站都可以看作是它自己在网上的门户,那么每个网站的域名就类似于“门牌号”,通常情况下,为了方便正常人记忆,域名都会使用公司的名称或简称,例如www.taobao.com、www.baidu.com、www.jd.com等,因此当你要访问一个Web网站,但又不知道其确切域名时,那么你首先可以输入其公司名称试试看。

因特网最开始仅由几百台计算机组成,因此最初的域名与IP映射关系都是被保存在本地的Hosts.txt文件中,每台因特网中的机器都从服务器上下载Hosts文件,然后发送请求时就从本地查询IP信息,但随着接入因特网的设备越来越多,因此原有的这种方式无法满足日益增长的因特网需求。

毕竟全球的设备都在不断的接入因特网,上网时都在使用域名访问,不过世界上并不存在一台DNS服务器可以映射所有的IP,所以域名系统最终被设计成了一个:带有层次结构的分布式K-V数据库,整个DNS由很多服务器共同组成的,大体结构如下:

图片

DNS域名系统-分层结构

PS:比如www.baidu.com,实际上完整的域名为:www.baidu.com.,根域则是最后的.,系统做了兼容,不需要用户手动写出。

因特网上的域名服务系统也是按照域名的层次来划分的,每一个域名服务器都只对域名体系中的一部分进行管辖,DNS服务器主要分为三类:

  • • ①根域名服务器

  • • ②TLD顶级域名服务器

  • • ③授权域名(子域)服务器

除此之外,还存在一种本地DNS服务器,但这个并不归纳在域名系统的分层结构中,不过本地DNS服务器却是DNS至关重要的一环。

DNS域名查询

DNS中主要分为递归查询、迭代查询两种方式:

  • • ①全递归查询:

    图片

    递归查询


    递归查询的意思是指:客户端只需发出一次请求,就能得到相应的解析结果。
  • • ②先递归+后迭代查询:

    图片

    迭代查询


    迭代查询的意思是指:客户端需经过多次请求查询,才能得到相应的解析结果。

当然,上述过程无论是迭代还是递归查询,对于上层DNS服务器而言,全球的访问压力都足以让其瘫痪,因此DNS中还存在一个重要的概念:DNS缓存:

  • • 本地DNS/非授权服务器缓存:各大运营商或大公司都有自己的DNS服务器,一般部署在距离用户较近地方,代替用户访问核心DNS系统,同时这些DNS服务器可以缓存之前的查询结果,下次出现相同的DNS解析请求时,可直接返回已缓存的IP

  • • 本地计算机DNS缓存:计算机本地缓存主要分为操作系统缓存浏览器缓存两种:

    • • 浏览器缓存一般会有时间限制,如Chrome浏览器默认是1min,一分钟内请求该域名,都会直接从本地缓存中获取IP

    • • 操作系统缓存是指本地的hosts文件,在浏览器中无法获取映射IP时,会尝试从hosts文件中获取。

注意:主机和本地域名服务器之间的查询方式是递归查询,本地域名服务器和其他域名服务器之间的查询方式是迭代查询,防止根域名服务器压力过大,也就是代表着:一般情况下DNS解析请求都采用先递归+后迭代方式

当用户在浏览器向一个域名发出请求后,DNS解析请求具体查询过程如下:

  • • ①客户端输入域名准备访问网站。

  • • ②先查询「浏览器的DNS缓存」,命中直接向IP发起访问,未命中继续往下。

  • • ③继续查询「OShosts文件」,如果仍然未命中,则向「本地域名服务器」发起「递归查询」请求。

  • • ④「本地域名服务器」先查询自身缓存,未命中则向「根域名服务器」进行「迭代查询」:

    • • A.「根域名服务器」返回「顶级域名服务器」的地址

    • • B.「本地域名服务器」再根据地址向「顶级域名服务器」发起查询

    • • C.「顶级域名服务器」返回负责该「域名」的「授权域名服务器」地址

    • • D.「本地域名服务器」再根据地址向「授权域名服务器」发起查询

    • • E.「授权域名服务器」返回「域名」的具体IP地址

  • • ⑤「本地域名服务器」将IP返回给客户端并将「域名/IP映射」缓存起来。

  • • ⑥「浏览器」得到IP后,向其发出具体的「用户请求」,并将「域名/IP映射」缓存。

1.3、HTTP报文的组成结构

浏览器访问服务器的过程中,解析域名得到具体IP后,会将用户的请求组装成HTTP报文,HTTP报文主要分为请求报文与应答(响应)报文两类。

1.3.1、请求报文

用户请求服务器时,发送的报文被称为请求报文,大体结构如下:

图片

请求报文

请求报文主要由请求行、请求头、空行、请求主体四部分组成。

请求行

请求行也被称为起始行,主要包含请求方法、资源路径以及协议版本三部分,具体如下:

GET /index.html HTTP/1.1

注意:报文中每个不同的部位之间必须要用SP空格隔开,末尾需要有一个CRLF回车换行符,遵循ABNF语法规范。

请求头

不管是请求头亦或是响应头,都可以算是HTTP报文中最复杂的内容,因为其中可选字段是非常多的,一般来说头部字段遵循如下规范:

  • • 每个字段名与字段值以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值