很多小伙伴每天都要用到http和https协议,但是却对他们一知半解,这篇文章将解开你的所有疑惑。

HTTP

一般人们都能说出“HTTP是一种超文本传输协议(Hypertext Transfer Protocol)”,但是这样还远远不够:假如你面试大公司的interview,往往面试官们会希望听到更深沉的涵义。
那么,怎样详细地描述超文本传输协议?
可以把它的名字分割成三部分:超文本(Hypertext)、传输(Transfer)、协议(Protocol)
关系:超文本<传输<协议。
小科普:
一、超文本
早期的信息只能保存在本地,无法与其他电脑进行交互。人们保存的信息通常以文本(一种能够被计算机解析的二进制数据包)形式存在。随着互联网技术的发展,在两台电脑之间能够进行数据传输后,人们不再满足于只能在两台电脑之间传输字符,还希望能够传输视频、音频、图片甚至点击某段文字就可以进行跳转。这时候文本传输的定义就被扩大到了超文本(Hypertext)。
二、传输
上面提到两台计算机之间能够形成互联关系进行通信,存储的超文本会被解析为二进制数据包,由传输载体(例如电话线、光缆、同轴电缆)负责把二进制数据包由计算机终端传输到另一个终端的过程,这个过程就被称为传输(transfer)。通常我们把传输数据包的计算机终端称为请求方,把接收二进制数据包的计算机终端称为应答方。

请求方和应答方的身份可以互换。
三、协议
在日常生活中常常能听到各种对话里包含了这个名词,比如“这份协议签订好了没有”、“你和她之间的协议谈得怎样”等等。可以说,协议在我们的概念里等同于一纸合同、一份约定。
那么问题来了,相对于互联网而言,网络协议是一个怎样的概念呢?
网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。
没有网络协议的互联网是混乱的,就和人类社会一样。人不能想怎么样就怎么样,你的行为约束是受到法律的约束的;那么互联网中的端系统也不能自己想发什么发什么,也是需要受到通信协议约束的。

现在,我们就可以总结一下,到底什么是 HTTP?
百度百科的名词解释如下:HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议。
一句话概括,就是一个在计算机里专门在两点之间传输各种文字、图片、视频、音频等超文本数据的规范。

在互联网中,任何协议都不会单独的完成信息交换,HTTP 也一样。虽然HTTP属于应用层的协议,但是它仍然需要其他层次协议的配合完成信息的交换,那么在完成一次HTTP请求和响应的过程中,需要哪些协议的配合呢?
TCP/IP
TCP/IP 协议你一定听过,TCP/IP 我们一般称之为协议簇,什么意思呢?就是 TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
TCP 协议的全称是Transmission Control Protocol的缩写,意思是传输控制协议,HTTP使用 TCP 作为通信协议,这是因为 TCP 是一种可靠的协议,而可靠能保证数据不丢失。
IP 协议的全称是 Internet Protocol 的缩写,它主要解决的是通信双方寻址的问题。IP协议使用 IP 地址 来标识互联网上的每一台计算机,可以把 IP 地址想象成为你手机的电话号码,你要与他人通话必须先要知道他人的手机号码,计算机网络中信息交换必须先要知道对方的 IP 地址。(关于 TCP 和 IP 更多的讨论我们会在后面详解)
URI / URL
你可以通过输入www.wangdun.cn来访问网盾的官网,那么这个地址有什么规定吗?我怎么输都可以?qqq.wangdun.com 是不是也行?
答案是:当然不行,你输入的地址格式必须要满足URI的规范。
URI(Uniform Resource Identifier)全称为统一资源标识符,使用它就能够把网站绑定的IP标记成互联网上能够通过这个域名访问的唯一页面。
URL(Uniform Resource Locator)翻译过来是统一资源定位符,也就是我们俗称的网址,它实际上是URI的一个子集。
URI 不仅包括URL,还包括URN(统一资源名称)。
DNS
你有没有想过为什么你可以通过键入www.wangdun.cn就能够获取网盾官网界面?我们上面说到,计算机网络中的每个端系统都有一个IP地址存在,而把IP地址转换为便于人类记忆的协议就是DNS协议。
DNS 的全称是域名系统(Domain Name System,缩写:DNS),它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

网络模型

网络由各种各样的协议组成,这些协议以分层的方式组织协议,每个协议属于一层模型,每一层中的协议称为协议栈(protocol stack)。因特网的协议栈由五个部分组成:应用层、网络层、链路层、物理层和传输层。
应用层
应用层是网络应用程序和网络协议存放的分层,因特网的应用层包括许多协议,例如电子邮件传送协议SMTP、域名解析DNS协议、端系统文件上传协议FTP以及本文关键词HTTP。应用层协议分布在多个端系统上,一个端系统应用程序与另一个端系统应用程序交换信息分组,我们把位于应用层的信息分组称为报文。
因特网的运输层在应用程序断点之间传送应用程序报文,在这一层主要有两种传输协议UDP与TCP,利用二者中的任何一个都能够传输报文,但这两种协议有着显而易见的不同。
UDP协议一般发送数据包之后,不会像一位可靠的客服那样耐心等待并确认报文是否到达。它不具有可靠性,也缺乏流量控制,当然也不会有拥塞控制。
TCP协议在发送数据包之后,能够控制并确认报文是否到达,会提供拥塞机制来控制网络传输。因此,当网络拥塞时,TCP会放缓其传输速度。
网络层
网络层主要负责将数据报从一台主机转移至另一台主机。网络层一个非常重要的协议叫作IP协议,所有具备网络层的因特网组件都必须执行IP协议。IP协议是一种网际协议,除了IP协议之外,网络层还包括一些其他路由选择协议跟网际协议,一般把网络层就喊作IP层。
数据链路层
现在我们有应用程序通信的协议,有了给应用程序提供运输的协议,还有了用于约定发送位置的IP协议,如何才能真正的发送数据呢?为了将分组从一个节点(主机或路由器)运输到另一个节点,网络层必须依靠数据链路层提供服务。数据链路层包括电缆接入的DOCSIS协议、WIFI以及以太网,因为数据从源目的传送通常需要经过几条链路,一个数据包可能被沿途不同的数据链路层协议处理,数据链路层的分组就是我们现在口中的帧(frame)。
物理层
物理层是将帧中的一个个bite从一个节点运输到另一个节点,物理层的协议仍然使用链路层协议,实际的物理传输介质和这些协议有关,例如以太网有很多物理层协议:同轴电缆、双绞铜线与光纤等等。
传输层
传输层在应用程序断点之间传送应用程序报文,在这一层主要有两种传输协议UDP与TCP,利用二者中的任何一个都能够传输报文,但这两种协议有着显而易见的不同。
UDP协议一般发送数据包之后,不会像一位可靠的客服那样耐心等待并确认报文是否到达。它不具有可靠性,也缺乏流量控制,当然也不会有拥塞控制。
TCP协议在发送数据包之后,能够控制并确认报文是否到达,会提供拥塞机制来控制网络传输。因此,当网络拥塞时,TCP会放缓其传输速度。

OSI模型

上述协议模型并不是唯一的协议栈。
ISO提出,应该在模型基础上增加会话层和表示层,按照七层建立模型。会话层提供数据交换的定界跟同步功能,包括恢复方案跟建立检查点;表示层是压缩数据与加密数据,数据描述似的应用程序不用担心计算机内部存储格式的问题。

HTTP请求响应过程
假设我们访问的URL地址为http://www.wangdun.cn/gfserver/wuhanbgpserver.asp,输入网址回车后,浏览器会进行如下操作:
1.DNS服务器映射域名后找到访问www.wangdun.cn所在的地址,然后HTTP客户端进程在80端口发起一个到服务器www.wangdun.cn的TCP连接(80端口是HTTP的默认端口)。在服务器进程中有一个套接字与其相连。
2.HTTP服务器通过它的套接字接受该报文,进行请求解析工作,并从磁盘或RAM中检索出对象www.wangdun.cn/gfserver/wuhanbgpserver.asp,然后把检索出来的对象进行封装,封装到HTTP响应报文,并通过套接字向客户进行发送。
3.在客户接受并响应报文后断开TCP连接。
4.TCP连接关闭后,客户端从响应中提取报文中一个叫HTML的响应文件,并检查该HTML文件,最后循环检查报文中其他内部对象。
5.HTTP客户端用页面形式反应给用户。
上述过程描述的是一种简单的请求-响应全过程,真实的请求-响应情况可能要比上面描述的过程复杂很多。

HTTPS

HTTPS全称为Hyper Text Transfer Protocol over Secure Socket Layer,国内称其为安全超文本传输协议。
大家可以把HTTPS直接理解为HTTP+SSL/TLS,简单来说它是在HTTP的基础上增加了一道保密协议,以此来对文本传输的过程加密,保障安全性的一种数据传输协议类型。

HTTP协议是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议。但是这种协议很明显潜伏着非常大的危险:采用明文传输信息的过程中,假如有不法分子想嗅探机密,只需要劫持HTTP协议中的某段对话,对信息进行窃听或篡改。
为了保护信息安全,后来在HTTP的基础上加入了SSL(Secure Socket Layer)/TLS(Transport Layer Security),也就是安全套接层/传输层安全。这层安全协议会为双方对话连接前提供信息加密、身份验证以及完整性校验,目的是为了保障服务端与客户端之间连接的安全性。

小科普:
一、SSL
安全套接层(Secure Socket Layer,SSL)协议是网页浏览器与网站服务器之间安全交换信息的协议,提供两个基本的安全服务:保密和鉴别。
SSL是Netscape于1994年开发的,后来成为了世界上最著名的web安全机制,所有主要的浏览器都支持SSL协议。
SSL协议具有三个特性:
1.鉴别:强制的服务器端和认证可选的客户端认证
2.保密:在握手协议中定义了会话密钥后,所有的消息都被加密
3.完整性:传送的消息包括消息完整性检查(使用MAC)
二、TLS
SSL经历了 SSL 1.0、2.0、3.0 版本后发展成了标准安全协议TLS(Transport Layer Security)传输层安全性协议。
到了1999年,SSL因为应用广泛已经成为互联网上的事实标准。IETF 在那年把SSL标准化,标准化之后的名称改为TLS,很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。
TLS 在实现上分为记录层与握手层两层,其中握手层又包含四个子协议: 握手协议 (handshake protocol)、更改加密规范协议 (change cipher spec protocol)、应用数据协议 (application data protocol) 和警告协议 (alert protocol)。

HTTPS原理
HTTPS协议的主要功能基本都依赖于SSL/TLS协议,而实现SSL/TLS基于三种算法:对称加密、散列函数与非对称加密,其利用对称加密实现密钥协商与身份验证,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

对称加密:常见的有 AES-GCM、AES-CBC、3DES、DES等,相同的密钥可以用于信息的加密和解密,拥有密钥才能获取信息,这样能够防止信息窃听,一对一进行通信
散列函数:常见的有 SHA1、MD5、SHA256,该类函数特点是对输入非常敏感、函数单向不可逆、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完整性
非对称加密:即常见的 RSA 算法,还包括 ECC、DH 等算法,算法特点是,密钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只能私钥解开,私钥加密的信息只能公钥解开。因此掌握公钥的不同客户端之间不能互相解密信息,只能和掌握私钥的服务器进行加密通信,服务器可以实现一对多的通信,客户端也可以用来验证掌握私钥的服务器身份

TLS 基于客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。

那么问题来了,既然HTTPS较HTTP安全性收入高很多,那么为什么到现在还有网站使用的是HTTP?
这时候,小编就必须引入一个名词:CA机构。
CA机构是一个专门给各网站签发数字证书、从而保障浏览器可以安全获得各个网站的公钥。
在网站管理员向CA提交申请后,CA使用管理员提交的公钥加上一系列其他信息(如网站域名、有效时长等),来制作证书;证书制作完成后,CA会使用自己的私钥对其加密,并将加密后的数据反馈给网站管理员,管理员只需要将获得的加密数据配置到网站服务器上即可。
每当有浏览器请求我们的网站时,首先会将这段加密数据返回给浏览器,此时浏览器会用CA的公钥来对这段数据解密,假如能够解密成功,就可以获得CA为网站颁发的证书了,包括网站公钥:

如果无法解密成功就说明此段加密数据并不是由合法CA机构使用私钥加密而来的,有可能是被篡改了,从而会在浏览器上显示界面异常:

但由于每家CA机构都会给成千上万的网站制作证书,假如黑客知道目标网站使用的是某家CA机构的证书,那他可以去这家机构申请一个合法证书,然后在浏览器请求目标对象网站时对返回的加密证书数据进行替换。
黑客申请的证书也是由正规CA机构制作的,因此这段数据当然可以成功被解密,也正是因为这个原因,所有CA机构在制作证书时除了网站公钥外还要包含许多其他数据用来辅助校验,比如域名就是其中一项重要的数据。

百度推出了全站HTTPS加密搜索服务,以此解决“第三方”对用户隐私的嗅探和劫持,其实,早在2010年5月份,谷歌便开始提供HTTPS加密搜索服务,在HTTPS网页的抓取问题上,百度在2014年9月份的一份公告中表示“百度不会主动抓取HTTPS网页”,谷歌在算法更新中则表示“同等条件下,使用HTTPS加密技术的站点在搜索排名上更具优势”。
尽管百度曾表示“不会主动抓取HTTPS网页”,但对于“很多HTTPS网页无法被收录”也是“耿耿于怀”,18年9月份百度曾就“https站点如何建设才能对百度友好”问题发布了一篇文章,给出了“提高https站点的百度友好度”的四项建议及具体操作。
此外,“百度全站HTTPS加密搜索”事件也再次彰显了百度对HTTPS加密的重视,可见百度并不“反感”HTTPS站点,所以“不主动抓取”应该也只是暂时的吧!

HTTP与HTTPS的区别

其实从上文中就能够看出来,区分二者只需要关键的一句话:HTTPS协议由于带有一层加密,要比http协议安全。
HTTPS和HTTP的区别主要如下:
一、HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议。
二、HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
三、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、HTTPS协议需要找CA机构申请证书,一般免费证书较少,因而需要一定费用。

网盾极风云:五分钟搞懂HTTP和HTTPS相关推荐

  1. 五分钟搞懂什么是红黑树

    五分钟搞懂什么是红黑树(全程图解) 18-09-04 星925 + 关注 献花(2)  收藏 前戏 红黑树,对很多童鞋来说,是既熟悉又陌生.熟悉是因为在校学习期间,准备面试时,这是重点.然后经过多年的 ...

  2. 五分钟搞懂什么是红黑树(全程图解)

    红黑树(又叫平衡二叉树),对很多童鞋来说,是既熟悉又陌生.熟悉是因为在校学习期间,准备面试时,这是重点.然后经过多年的荒废,如今已经忘记的差不多了.如果正在看文章的你,马上快要毕业,面临着找工作的压力 ...

  3. 五分钟搞懂Xen、KVM、Qemu间的关系和区别

    Aha,忽然发现我也是个标题党,十分钟搞定某某技能这种标题最吸引人了.当然我也不是华而不实,是不是干货,你读了才知道.话说,接触Xen这么久了,现在才花时间搞清楚这个问题,要不是需要给别人解释,还不知 ...

  4. [刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)

    组合评价模型-模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间. 目录 组合评价模型-模糊Borda(Matlab) 一.模糊Borda法简介 二.模糊Borda法主要步骤 (1) ...

  5. 新人必读!五分钟搞懂通信行业!

    来自 鲜枣课堂 今天这篇文章,是「通信入门三部曲」的第三篇文章,也是最后一篇文章. 前两篇文章,给大家介绍了通信的基本理论(链接),还有移动通信的网络架构(链接).今天这篇会更实用一点,介绍一下&qu ...

  6. 【概率论】五分钟搞懂概率论联合密度函数与概率之间的计算

    [例题] 设X和Y的联合密度函数为: f(x,y)={20<x<∞,0<y<∞0其他区域f(x,y)=\left\{ \begin{array}{rcl} 2 &&am ...

  7. 推荐: 五分钟搞懂Xen、KVM、Qemu间的关系和区别[转载]

    https://blog.csdn.net/ysbj123/article/details/51166343 转载于:https://www.cnblogs.com/wspblog/p/9203061 ...

  8. 五分钟搞懂MySQL索引下推

    如果你在面试中,听到MySQL5.6"."索引优化" 之类的词语,你就要立马get到,这个问的是"索引下推". 什么是索引下推 索引下推(Index ...

  9. 五分钟搞懂后缀数组!

    为什么学后缀数组 后缀数组是一个比较强大的处理字符串的算法,是有关字符串的基础算法,所以必须掌握.  学会后缀自动机(SAM)就不用学后缀数组(SA)了?不,虽然SAM看起来更为强大和全面,但是有些S ...

最新文章

  1. boost库在window下的编译
  2. vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
  3. 【渝粤教育】电大中专学前儿童科学教育 (5)作业 题库
  4. python做定时任务的方式及优缺点_Python3-定时任务四种实现方式
  5. 不用for loop循环一个读取一个文件
  6. 首先,打破一切常规 学习笔记 之二
  7. httpwatch使用_使用PHP#2自动化HTTPWatch
  8. JDF代码学习 JDF入门教程 代码配置
  9. js实现页面视频监控全屏
  10. oracle判断日期为月末,ORACLE查询月初和月底时间
  11. 流图(程序图)表示程序的控制流——McCabe方法度量程序空间复杂度
  12. windows 环境下,编译android 版opencv-4.5.5,并添加opencv_contrib-4.5.5 扩展模块
  13. ASEMI整流桥GBP406~GBP410,GBP406参数,GBP410图片
  14. UTXO:未使用的交易输出
  15. 一次基于u2-net的人物肖像画的实践
  16. idea入门级配置(初)
  17. 20221024 今天的世界发生了什么
  18. 手机操作系统开源软件
  19. Agile Activities(敏捷活动)
  20. photoshop-建立选区

热门文章

  1. Oracle RMAN 的 show,list,crosscheck,delete命令整理
  2. GOOGLE卫星地图 计算方式
  3. 电子稳定程序系统--ESP
  4. SSM框架项目实践,leetcode46
  5. 51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)
  6. CISP证书价值如何
  7. 【Qt实战派学习群】 建立啦!
  8. Ubuntu 16.04 LTS安装搜狗输入法解析
  9. Gentoo USE参数清单中文详解
  10. python 温度转换、货币转换