前端面试查漏补缺--(九) HTTP与HTTPS

前言

本系列最开始是为了本身面试准备的.后来发现整理愈来愈多,差很少有十二万字符,最后决定仍是分享出来给你们.html

为了分享整理出来,花费了本身大量的时间,起码是只本身用的三倍时间.若是喜欢的话,欢迎收藏,关注我!谢谢!前端

文章连接

合集篇:

前端面试查漏补缺--Index篇(12万字符合集) 包含目前已写好的系列其余十几篇文章.后续新增值文章不会再在每篇添加连接,强烈建议议点赞,关注合集篇!!!!,谢谢!~vue

后续更新计划

后续还会继续添加设计模式,前端工程化,项目流程,部署,闭环,vue常考知识点 等内容.若是以为内容不错的话欢迎收藏,关注我!谢谢!面试

求一分内推

目前本人也在准备跳槽,但愿各位大佬和HR小姐姐能够内推一份靠谱的武汉 前端岗位!邮箱:bupabuku@foxmail.com.谢谢啦!~算法

TCP/IP协议

在讲解HTTP与HTTPS以前,有个知识点必须提早讲解下,那就是TCP/IP协议.segmentfault

从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在不少状况下,它只是利用 IP 进行通讯时所必须用到的协议群的统称。具体来讲,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,所以,有时也称 TCP/IP 为网际协议群。设计模式

互联网进行通讯时,须要相应的网络协议,TCP/IP 本来就是为使用互联网而开发制定的协议族。所以,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。前端工程化

更详细全面的能够查看 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)跨域

TCP协议(传输控制协议):应用程序之间的通讯

TCP确保数据包以正确的次序到达,而且尝试确认数据包的内容没有改变。 TCP在IP地址之上引端口(port),它容许计算机经过网络提供各类服务。一些端口号为不一样的服务保留,并且这些端口号是众所周知。浏览器

服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通讯流。例如大多数电子邮件通讯流出如今端口25上,用于wwww的HTTP通讯流出如今80端口上。

当应用程序但愿经过 TCP 与另外一个应用程序通讯时,它会发送一个通讯请求。这个请求必须被送到一个确切的地址。在双方“握手”以后,TCP 将在两个应用程序之间创建一个全双工 (full-duplex) 的通讯,占用两个计算机之间整个的通讯线路。TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送以前将它们分割为 IP 包,而后在它们到达的时候将它们重组。

TCP/IP 就是TCP 和 IP 两个协议在一块儿协同工做,有上下层次的关系。

TCP 负责应用软件(好比你的浏览器)和网络软件之间的通讯。IP 负责计算机之间的通讯。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责根据通讯量、网络中的错误或者其余参数来进行正确地寻址,而后在它们到达的时候从新组合它们。

IP协议(网际协议):计算机之间的通讯

IP协议是计算机用来相互识别的通讯的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。 IP 负责在因特网上发送和接收数据包。 经过 IP,消息(或者其余数据)被分割为小的独立的包,并经过因特网在计算机之间传送。IP 负责将每一个包路由至它的目的地。

IP协议仅仅是容许计算机相互发消息,但它并不检查消息是否以发送的次序到达并且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP。

HTTP协议

概念

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。

HTTP是客户端浏览器或其余程序与Web服务器之间的应用层通讯协议。 在Internet上的Web服务器上存放的都是超文本信息,客户机须要经过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不只可用于Web访问,也能够用于其余因特网/内联网应用系统之间的通讯,从而实现各种应用资源超媒体访问的集成。

咱们在浏览器的地址栏里输入的网站地址叫作URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址同样,每一个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级连接时,URL就肯定了要浏览的地址。浏览器经过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。

HTTP 协议基础

  • 永远都是客户端发起请求,服务器回送响应 应用 HTTP 协议时,一定是一端担任客户端角色,另外一端担任服务器端角色。仅从一条通讯线路来讲,服务器端和客服端的角色是肯定的。HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,确定是先从客户端开始创建通讯的,服务器端在没有接收到请求以前不会发送响应。

  • 无状态的协议 HTTP 是一种无状态协议。协议自身不对请求和响应之间的通讯状态进行保存。 也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不作持久化处理。这是为了更快地处理大量事务,确保协议的可伸缩性,而特地把 HTTP 协议设计成如此简单的。但是随着 Web 的不断发展,咱们的不少业务都须要对通讯状态进行保存。因而咱们引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通讯,就能够管理状态了。

  • Cookie 管理状态 Cookie 技术经过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。 Cookie 会根据从服务器端发送的响应报文内的一个叫作 Set-Cookie 的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。

  • URI 定位资源 HTTP 协议使用 URI 定位互联网上的资源。正是由于 URI 的特定功能,在互联网上任意位置的资源都能访问到。

  • 持久链接 HTTP 协议的初始版本中,每进行一个 HTTP 通讯都要断开一次 TCP 链接。好比使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请求该 HTML 页面里包含的其余资源。所以,每次的请求都会形成无畏的 TCP 链接创建和断开,增长通讯量的开销。 为了解决上述 TCP 链接的问题,HTTP/1.1 和部分 HTTP/1.0 想出了持久链接的方法。其特色是,只要任意一端没有明确提出断开链接,则保持 TCP 链接状态。旨在创建一次 TCP 链接后进行屡次请求和响应的交互。在 HTTP/1.1 中,全部的链接默认都是持久链接。

  • 管线化 持久链接使得多数请求以管线化方式发送成为可能。之前发送请求后需等待并接收到响应,才能发送下一个请求。管线化技术出现后,不用等待亦可发送下一个请求。这样就能作到同时并行发送多个请求,而不须要一个接一个地等待响应了。 好比,当请求一个包含多张图片的 HTML 页面时,与挨个链接相比,用持久链接可让请求更快结束。而管线化技术要比持久链接速度更快。请求数越多,时间差就越明显。

HTTP工做过程

  • 1,地址解析

如用客户端浏览器请求这个页面:localhost.com:8080/index.htm 从中分解出协议名、主机名、端口、对象路径等部分,对于咱们的这个地址,解析获得的结果以下:

协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
复制代码
复制代码

在这一步,须要域名系统DNS解析域名,得主机的IP地址。

  • 2,封装HTTP请求数据包

把以上部分结合本机本身的信息,封装成一个HTTP请求数据包

  • 3,封装成TCP包,创建TCP链接(TCP的三次握手)

在HTTP工做开始以前,客户机(Web浏览器)首先要经过网络与服务器创建链接,该链接是经过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,所以Internet又被称做是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议创建以后才能,才能进行更层协议的链接,所以,首先要创建TCP链接,通常TCP链接的端口号是80。这里是8080端口。

  • 4,客户端向服务器发送请求命令

创建TCP链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

  • 5,服务器响应

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据.

  • 6,服务器关闭TCP链接

通常状况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 链接,而后若是客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 链接在发送后将仍然保持打开状态,因而,客户端能够继续经过相同的链接发送请求。保持链接节省了为每一个请求创建新链接所需的时间,还节约了网络带宽。

HTTP 协议报文结构与头部

这部分涉及到的知识特别繁琐,受限于篇幅,这里就不赘述了.能够参考这篇文章的四,五,六章做了超详尽的说明.

HTTP的请求方法

GET: 获取URL指定的资源;
POST:传输实体信息
PUT:上传文件
DELETE:删除文件
HEAD:获取报文首部,与GET相比,不返回报文主体部分
OPTIONS:询问支持的方法
TRACE:追踪请求的路径;
CONNECT:要求在与代理服务器通讯时创建隧道,使用隧道进行TCP通讯。主要使用SSL和TLS将数据加密后经过网络隧道进行传输。

复制代码

HTTP状态码

菜鸟教程里有完整的说明.

HTTP缺点

  • 通讯使用明文,容易被窃听
  • 不验证通讯方的身份,可能遭遇假装
  • 没法证实报文的完整性,有可能遭遇篡改

HTTPS协议

概念

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种经过计算机网络进行安全通讯的传输协议。

HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密数据包。

HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

简而言之: HTTPS是在HTTP上创建SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。

HTTPS比HTTP多了一层TLS/SSL协议

TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,因此使用HTTPS基本上不须要对HTTP页面进行太多的改造。

HTTPS原理

这部分细提及来,真的不少.这里我概括简单说一下:

  • 客户端向服务器端索要并验证公钥。这一阶段使用的是非对称加密传输(RSA),服务端将数字证书发给客户端.其中数字证书包括:公钥和数字签名.客户端在拿到后对二者进行校验.
  • 在非对称加密传输中,两端协商生成"对话密钥"。
  • 双方采用"对话密钥"进行对称加密通讯。

受限于篇幅,我就不展开了.要否则就太多太多了.这里我推荐几篇文章你们全面理解:

  • 以通俗易懂的方式理解https原理: 文章
  • 关于SSL/TLS 原理的详细说明:文章
  • 关于PKI体系与证书的说明:文章

HTTP 与 HTTPS 的区别

  • HTTP 是明文传输,HTTPS 经过 SSL\TLS 进行了加密
  • HTTP 的端口号是 80,HTTPS 是 443
  • HTTPS 须要到 CA 申请证书,通常免费证书不多,须要交费
  • HTTP 的链接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

HTTPS主要做用是:

  • 对数据进行加密,并创建一个信息安全通道,来保证传输过程当中的数据安全
  • 对网站服务器进行真实身份认证

HTTPS缺点

  • HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增长10%到20%的耗电;
  • https链接缓存不如http高效,若是是大流量网站,则会形成流量成本过高。
  • https链接服务器端资源占用高不少,支持访客稍多的网站须要投入更大的成本,若是所有采用https,基于大部分计算资源闲置的假设的VPS的平均成本会上去。
  • SSL证书须要钱,功能越强大的证书费用越高,我的网站、小网站没有必要通常不会用。
  • SSL证书一般须要绑定IP,不能再同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展能够部分解决这个问题,可是比较麻烦,并且要求浏览器、操做系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。

HTTPS接入优化

CDN接入

HTTPS 增长的延时主要是传输延时 RTT,RTT 的特色是节点越近延时越小,CDN 自然离用户最近,所以选择使用 CDN 做为 HTTPS 接入的入口,将可以极大减小接入延时。CDN 节点经过和业务服务器维持长链接、会话复用和链路质量优化等可控方法,极大减小 HTTPS 带来的延时。

会话缓存

虽然前文提到 HTTPS 即便采用会话缓存也要至少1*RTT的延时,可是至少延时已经减小为原来的一半,明显的延时优化;同时,基于会话缓存创建的 HTTPS 链接不须要服务器使用RSA私钥解密获取 Pre-master 信息,能够省去CPU 的消耗。若是业务访问链接集中,缓存命中率高,则HTTPS的接入能力讲明显提高。当前TRP平台的缓存命中率高峰时期大于30%,10k/s的接入资源实际能够承载13k/的接入,收效很是可观。

硬件加速

为接入服务器安装专用的SSL硬件加速卡,做用相似 GPU,释放 CPU,可以具备更高的 HTTPS 接入能力且不影响业务程序的。测试某硬件加速卡单卡能够提供35k的解密能力,至关于175核 CPU,至少至关于7台24核的服务器,考虑到接入服务器其它程序的开销,一张硬件卡能够实现接近10台服务器的接入能力。

远程解密

本地接入消耗过多的 CPU 资源,浪费了网卡和硬盘等资源,考虑将最消耗 CPU 资源的RSA解密计算任务转移到其它服务器,如此则能够充分发挥服务器的接入能力,充分利用带宽与网卡资源。远程解密服务器能够选择 CPU 负载较低的机器充当,实现机器资源复用,也能够是专门优化的高计算性能的服务器。当前也是 CDN 用于大规模HTTPS接入的解决方案之一。

SPDY/HTTP2

前面的方法分别从减小传输延时和单机负载的方法提升 HTTPS 接入性能,可是方法都基于不改变 HTTP 协议的基础上提出的优化方法,SPDY/HTTP2 利用 TLS/SSL 带来的优点,经过修改协议的方法来提高 HTTPS 的性能,提升下载速度等。

感谢及参考

相关文章
相关标签/搜索