HTTP---暂空

其实学习HTTP主要是为了让前端的研发人员在客户端发起请求和服务器作出响应的过程当中,一旦出现问题能够更快捷的定位问题所在,提升开发效率。html

TCP/IP

计算机网络诞生后可以使一台台独立的计算机互相链接,使得位于不一样位置的计算机之间能够进行通讯,实现信息传递和资源共享。经常使用的网络协议有TCP,UDP,IP和HTTP前端

TCP/IP是互联网服务的协议族,是网络通讯协议的统称,由IP,TCP,HTTP和FTP等协议组成/TCP/IP将通讯过程抽象为4层,被视为简化的OST参考模型。算法

分送的数据会在分层模型内传递,而且每到一层,就会附加该层的包首部,包首部包含了该层协议的相关信息,例如MAC地址,IP地址和端口号。

什么是MAC地址? MAC地址,也成为物理地址,用来定义网络设备的位置,总共有8位,用十六进制表示,由两大块组成,是IEEE分配给厂商的识别码和厂商内部定义的惟一识别码
00-36-76-47-D6-7A
MAC地址会被烧入进网卡中,每块网卡的MAC地址在全世界都是惟一的,(神说要有光,便有了光。网卡说我要是惟一的,网卡就变成了惟一的)。MAC地址应用在OSI参考模型的数据链路层,经过MAC地址可以转发数据帧。
浏览器

什么是IP地址缓存

IP地址是指互联网协议地址,是为网络中的每台主机分配的一个数字标签。IP地址应用在OSI参考模型的网络层,保证通讯的正常。经常使用的IP地址分为两大类:IPV4与IPV6。
在IP地址后面常会带着一组以255开头的数字,称为子网掩码(255.255.255.0).这么说吧IP地址就是你家门牌号,子网掩码是你的省,市,区。
IP地址不够用了,因此规划制定了IPV6,IPV6有128位,分为8组。
CFDE:086E:0291:08D3:760A:04DD:CCAB:2145安全

HTTP

HTTP(HyperText Transfer Protocol)超文本传输协议,用来获取网络资源(图像啊,文本之类)的应用层协议,是互联网数据通讯的基础。由请求和响应构成。
客户端发起HTTP请求,在请求报文中会指定资源的URL,而后用传输层的TCP协议创建链接,最后服务器响应请求,作出应答,回传数据报文。
目前主流版本是HTTP/1.1,新一代HTTP/2.0是升级版,各方面都超越了前者。但要作到软硬件兼容还须要时间,反正早学晚学迟早得学。
bash

URI和URL

juejin.im/post/5dbc16…服务器

HTTP协议

HTTP协议有三个特色:持久链接,管道化以及无状态
网络

1:持久连接

在早期的HTTP版本中,一次HTTP通讯完成后会断开连接,下一次再从新链接。HTTP/1.1提出了持久链接,只要通讯两端的任意一端没有明确提出断开,保持链接状态。以便下一次通讯复用该链接,避免了重复创建和断开链接所形成的开销,加速了页面呈现架构

2:管道化

过去,请求必须按照先进先出的队列顺序,也就是说发送请求后要等待并接收到响应,服务器再按顺序一个接一个的响应。启用管道化后,就会将队列顺序迁移到服务器,这样就能同时发送多个请求,服务器再按顺序一个接一个的响应。

3:状态管理

HTTP是无状态协议,请求和响应一一对应,不会出现两个请求复用一个响应的状况,也就说,每一个请求都是独立的,即使在同一条链接中,请求之间也没有联系。

在部分场景中,须要请求有状态,好比说你登陆一个页面后得保存登陆状态,为了能管理状态,引入了Cookie技术,Cookie能让请求和响应的报文都附加Cookie信息,客户端将Cookie值发送出去,服务器接收并处理这个值,最终就能获得客户端的状态信息。

HTTP报文

1:报文语法:

报文分为两类:请求报文和响应报文
请求报文由5部分组成:请求方法,请求URL,HTTP协议版本,可选的请求首部和内容。

<Method><Request URL><Version>
<Header>
<Body>
复制代码

响应报文也由五部分组成:HTTP协议版本,状态码,缘由短语,可选的响应首部和内容。响应报文的格式:

<Version><Status Code><Reason Phrase>
<Header>
<Body>
复制代码
2:请求方法:

HTTP协议经过请求方法说明请求目的,指望服务器执行某个操做。在可用的请求方法中,GET和POST是最多见的(真的很常见哦!),而PUT和DELETE须要额外的安全机制,门槛过高,用不起。

方法 功能
GET 获取数据
POST 提交数据
PUT 上传文件
DELETE 删除文件
HEAD 获取除了内容之外的资源信息
3:状态码

状态码是为了让客户端知道请求结果,服务器是成功处理了请求仍是出现了失误又或者是没有处理。状态码会和缘由短语成对出现。状态码由3位数字组成,第一位数字表明类别。

状态码 类别 缘由短语
1XX 信息 请求已被接受,正在处理中
2XX 成功 请求已处理成功
3XX 重定向 客户端须要附加操做才能完成请求
4XX 客户端错误 客户端发起的请求服务器没法处理
5XX 服务器错误 服务器在处理请求时发生错误或异常

200 OK
304 Not Modified
404 Not Found
500 Internal Server Error

HTTP首部

HTTP首部提供的信息能让客户端和服务器执行指定的操做,例如客户端发出的请求中带有可接受的内容类型,服务器就知道该返回什么类型的内容;好比说服务器的响应中带有内容的压缩格式,客户端就知道该如何解压复原内容。首部有5种类型:通用首部,请求首部,响应首部,实体首部和扩展首部。

1:通用首部:

通用首部既能够存在于请求中,也能够存在于响应种。

首部 描述
Connection 管理持久链接
Date 报文的建立日期,HTTP协议使用了特殊的日期格式
Transfer-Encoding 传输报文主体时的编码方式,例如分块传输编码

来个栗子

Connevtion: keep-alive
Date: Fri.24 Sep 2012 02:00:02 GMT
Transfer-Encoding :chunked
复制代码
2:请求首部:

请求首部只存在于请求报文种,提供客户端的信息以及服务器的要求,例如几个以Accept开头的首部,能让服务端知道客户端想获得什么

首部 描述
Accept 可接受的MIME类型
Accept-Charset 可接受的字符集
Accept-Encoding 可接受的编码格式,服务器按指定的编码格式压缩数据
Accept-Language 可接受的语言种类
Host 服务器域名和端口
Referer 上一个页面地址
User-Agent 用户代理信息,例如操做系统,浏览器名称和版本

说实话,抓个包就啥都懂了

再来个栗子:

Accept-Charset: utf-8
Accept-Encoding:gzip,deflate
Accept-Language: zh-CN,zh:q=0.8
Host: WWW.jian-yi.top
Referer: http://www.baidu.com
User-Agent: Mozilla/5.0(iPhone;CPU iPhone OS 9_1 like Mac OS X)
Apple WebKit/601.1.46(KHTML,Like Gecko)Version/9.0
Mobile/13B143 Safari/601.1
复制代码
3:响应首部:

响应首部只存在于响应报文中,提供服务器的信息以及对客户端的要求

首部 描述
Accept-Range 服务器接受的范围类型
Server 服务器软件的名称和版本
Age 响应存在时间,单位为妙,这个首部可能由代理发出
Accept-Range: bytes
Server: Apache.2.4.10(Win64)PHP/5/5/17
Age:600
复制代码
4:实体首部:

请求和响应均可能包含实体首部,实体首部提供了大量的实体信息,例如以Content开头的首部,传达了内容的尺寸,MIME类型和语言等信息。

首部 描述
Content-Encoding 内容编码格式,告知客户端用这个编码格式解压
Content-Language 内容语言
Content-Length 内容尺寸,单位是字节
Content-Type 内容的MIME类型

最后一个栗子:

Content-Encoding: gzip
Content-Language: zh-CN
Content-Length:   9191
Content-Type:text/html
复制代码

缓存

Web缓存能够自动将资源副本保存到本地,减小了客户端与服务器之间的通讯次数,加速页面加载,下降网络延迟。缓存的处理过程能够简单地分为几步:
第一步:在缓存中搜索指定资源的副本,若是命中执行第二步

第二步:对资源副本进行新鲜度检测(检测文档是否过时)不新鲜执行第三步

第三步:与服务器进行再验证,验证经过更新资源副本的新鲜度,再返回这个资源副本(此时的响应状态码为“304 Not Modified”)

1:新鲜度检测
通用首部Cache-Control和实体首部expires会为每一个资源附加一个过时日期,在保质期内的资源都会被认为是新鲜的,也不会和服务器进行通讯。
Expires首部会指定一个具体的过时日期,可是由于不少服务器的时钟并不一样步,因此会有偏差,并不推荐使用。

Expires:  Fir,24 Sep 2023 03:02:03 GMT
复制代码

Cache-Control首部指定资源处于新鲜状态的秒数,秒数从服务器将资源传来之时算起,用秒数比用具体日期要灵活不少。当缓存的资源副本被同时制定了过时秒数和过时日期的时候,会优先处理过时秒数

Cache-Control:  max-age=315360
复制代码

在Cache-Control首部中,有两个混淆的值:no-cache和no-store.no-cache字面上比较像禁止资源被缓存。其实不是。no-store才有这个功能。no-cache能够将资源缓存,只是要先与服务器进行新鲜度验证,验证经过以后才会将其提供给客户端。

在通用首部中,还有个历史遗留首部:Pragma.Pragma首部用于实现特定的指令,它也有一个值为no-cache,功能和Cache-Control中的相同。

Cache-Control: no-cache
Pragma:        no-cache
复制代码

2:日期比对法再验证:
服务器在响应请求的时候,会在响应报文中附加实体首部Last-Modified,指明资源的最后修改日期,客户端在缓存资源的同时,也会一并把这个日期缓存,当对缓存中的资源副本进行再验证时,在请求报文中会附加If-Modified-Since首部,携带最后修改日期,与服务器上的修改日期进行比对

3:实体标记法进行再验证:
日期比对法很是依赖日期,若是服务器上的日期不许确,再验证就会出现误差,这个时候就会比较适合用实体标记法。服务器会为每个资源生成惟一的字符串形式的标记(例如52fdbf98-2663),该标记会保存在实体首部ETag中。在响应报文中附加ETag,把标记返回给客户端,客户端接收并将其缓存。当对缓存中的资源副本进行再验证时,在请求报文中会附加 If-None-Match首部。只有当携带的标记与服务器上的资源标记一致时,才能说明缓存没有国企,这样就能返回缓存中的资源。

1:在浏览器中,一个页面从输入URL到加载完成,都有哪些步骤?
为了便于理解,将这个过程简单的分为了5步,以下所示:
(1):域名解析,根据域名找到服务器的IP地址
(2):创建TCP连接,浏览器与服务器通过3次握手后创建链接。
(3):浏览器发起HTTP请求,获取想要的资源
(4):服务器响应HTTP请求,返回指定的资源
(5):浏览器渲染页面,解析接收到的HTML,CSS和JavaScript文件

2:GET和POST的区别有哪些?
主要区别有四个方面:
(1):语义不一样,GET是获取数据,POST是提交数据

(2):HTTP协议规定GET比POST安全,由于GET只作读取,不会改变服务器中的数据,但这不是规范,并不能保证请求方法的实现也是安全的
(3):GET请求会把附加参数带在URL上,而POST请求会把提交数据放在报文内。在浏览器中,URL长度会被限制(的确如此-亲身体会),因此GET请求能传递的数据有限,但HTTP协议其实并无对其作限制,都是浏览器在控制
(4):HTTP协议规定GET是幂等的,而POST不是。所谓幂等是指屡次请求返回相同的结果,实际应用中并不会这么严格,当GET获取动态数据时,每次的结果可能会有所不一样。

RESTful架构风格

RESTful是一种遵照REST设计的架构风格。REST既不是标准,也不是协议,而是一组架构约束条件和设计指导原则,一种基于HTTP,URI,XML等现有协议与标准的开发方式。

REST

1:资源:
REST是面向资源的,资源是网络上的一个实体,能够是一个文件,一张图像,一首歌曲,甚至是一种服务。资源能够设计的很抽象,但只要是具体信息,就能够是资源。资源的本质是一串二进制数据。而且每一个资源必须有URL,经过URL找到资源。
2:表述:
资源在某个特定时刻的状态说明被称为表述,表述由数据和描述数据的元数据组成。资源的表述有多种格式,这些格式也被称为MIME类型。好比文本的txt格式,图像的png格式,视频的mkv格式等。一个资源能够有多种表述,例如服务器响应一个请求,返回的资源能够是JSON格式的数据,也能够是XML格式的数据。
3:表述性状态转移:
表述性状态转移的目的是操做资源,经过转移和控制资源的表述就能实现此目的。例如客户端能够向服务器发送GET请求,服务器将资源的表述移到客户端,客户端也能够向服务器发送POST请求,传递表述改变服务器中的资源状态。

约束条件

REST给出了6种约束条件,通讯两端在遵循这些约束后,就能提升工做效率,改善系统的可伸缩性,可靠性和交互的可见性,还能促进服务解耦。
1:客户端-服务器:
客户端关注用户接口,服务器关注数据存储。客户端向服务器发起接口请求(获取数据或提交数据),服务器返回处理好的结果给客户端,客户端再根据这些数据渲染界面,同一个接口能够应用于多个终端,而且只要接口定义不变,客户端和服务器能够独立开发,互不影响。
2:无状态:
两端通讯必须是无状态的,服务器不会保存上一次请求的会话状态,会话状态要所有保存在客户端。从客户端到服务器的每一个请求都要附带一些用于理解该请求的信息,例如在后台管理系统中,大部分都是须要身份认证的请求,因此都会附带用户登陆状态。
3:缓存
响应的资源能够被标记为可缓存或禁止缓存,若是能够缓存,那么客户端能够减小与服务器通讯的次数,下降延迟,提升效率。
4:统一接口
统一接口是REST区别于其余架构风格的核心特征,接口定义包括4个部分:

(1)资源的识别,也就是用一个URL指向资源,要获取这个资源,只要访问它的URL便可,URL就是资源的地址或标识符。REST对URL的命名也有要求,在URL中不能有动词,只能由名词组成

(2)经过表述对资源执行操做,在表述中包含了操做该资源的指令,例如用HTTP的请求首部Accept指定须要的表述格式,用HTTP方法(如GET,POST等)完成对数据的增删改查工做,用HTTP响应状态码表示请求结果。

(3)自描述的消息,包含如何处理该消息的消息,例如消息所使用的表述格式,可否被缓存等。

(4)做为应用状态引擎的超媒体,超媒体并非一种技术,而是一种策略,创建一种客户端与服务器之间的对话方式。超媒体能够将资源互相链接,并能描述他们的能力,告诉客户端如何构建HTTP请求。

5:分层系统:将架构分解为若干层,下降层之间的耦合性。每一个层只能和与他相邻的层进行通讯。

6:按需代码:这是一条可选的约束,支持客户端下载并执行一些代码(例如Java Applet,JavaScript,或Flash)进行功能扩展。

什么的RESTful API?如何设计RESTful API

RESTful API是指符合REST设计风格的WebAPI。为了使得接口安全,易用,可维护以及可扩展,通常设计RESTful API须要考虑一下几个方面:
(1)通讯用HTTPS安全协议
(2)在URL中加入版本号,例如 "V1/animals"
(3)URL中的路径(endpoint)不能有动词,只能用名词
(4)用HTTP方法对资源进行增删改查的操做
(5)用HTTP状态码传达执行结果和失败缘由。
(6)为集和提供过滤,排序,分页等功能
(7)用查询字符串或HTTP首部Accept进行内容协商,指定返回结果的数据格式
。 (8)及时更新文档,每一个接口都有对应的说明

TCP

TCP是一种面向链接,可靠的字节流通讯协议,位于OSI参考模型的传输层,具有顺序控制,重发控制,流量控制和拥塞控制等众多功能,保证数据可以安全抵达目的地。

关于TCP进行数据传输的通讯过程:
首先经过三次握手创建链接;而后把发送窗口调整到合适大小,既能避免网络拥塞,又能提升传输效率;
在传输过程当中,发出去的每一个包都会获得对面的确认,当运送的数据包丢失时,能够执行超时重发,当数据包乱序时(有的数据包先发后到),经过数据包中的序号能够按顺序排列,同时也能丢弃重复的包;
再根据端口号将数据准去传送至通讯中的应用程序,端口号至关于程序地址;
待到全部数据安全到达后,执行四次挥手断开链接,本次传输完成

链接管理

虽然我以前已经写过了,可是呢我还想写一遍!书读百遍其意自现!!
1:三次握手
通讯两端会先经历三次握手,才能创建链接。
(1):客户端发送一个携带SYN(这是个啥?)标志位的包,请求创建链接
(2):服务器响应一个携带SYN和ACK标志位的包,赞成创建链接。
(3):客户端再发送一个携带ACK标志位的包,表示链接成功,开始进行数据传输

主要是二次握手它很差使知道吧,客户端发了一个请求创建链接的包,结果网太卡了,服务器死活接收不到,客户端就一直发一直发,行,服务器收到了第二个,结果第一个过来了,但其实第一个他是无效的啊,第一个过时了的,服务器哪知道啊,结果就创建了一条无效的连接。

阿大对阿二说:我要和你成亲,你听到了吗?

阿二说:嗯

阿大说:礼成

2:四次挥手
断开链接时,要挥手四次才能断开连接。由于链接是双向的,客户端和服务器都要发送FIN标志位的包,才算完全断开链接。

(1):客户端发送一个携带FIN标志位的包,请求断开链接
(2):服务器响应一个携带ACK标志位的包,赞成客户端断开链接
(3):服务器再发送一个携带FIN标志位的包,请求断开链接
(4):客户端最后发送一个携带ACK标志位的包,赞成服务器断开链接

阿大和阿二说:我要跟你分手

阿二说:“行”

阿大回过劲来想:凭啥是你甩了老子,是老子甩了你好嘛

阿大和阿二说:“劳资要跟你分手,你滚吧”

确认应答

在TCP 传输的过程当中,发出去的每一个包都会获得对方的确认,借助数据包中的几个字段就能又快又准的通知对方发送的包已到达,再结合延迟确认,Nagle算法等技术就能实现一套高效的应答机制
1:字段:TCP的每一个数据包中包含3个字段:Seq,Len和Ack.Seq表示每一个包的序号,用于排列乱序的包;Len表示数据的长度,不包括TCP头信息;Ack表示确认号,用于确认已经收到的字节。
Seq等于上一个包中的Seq和Len二者之和。假设上一个包中的Seq为30,Len为40,那么当前的Seq为70,下面是Seq的计算公式:
Seq=Seq+Len
Ack等于对面发送过来的包中的Seq和Len二者之和,下面是Ack的计算公式:Ack=Seq+Len 服务器的对面是客户端,假设客户端发送的包中Seq为10,Len为20,那么服务器的Ack就为30
通讯两端都会维护各自的Seq,
2:延迟确认
延迟确认就是在一段时间内若是没有数据发送,那么就将几个确认信息合并成一个包,在一块儿确认。TCP采用延迟确认的目的是下降网络负担,提高传输效率
3:Nagle算法
Nagle算法是指在发生的数据没有获得确认以前,又有几块小数据要发送,就把它们合并成一个包,在一块儿发送。

延迟确认和Nagle算法都能下降网络负担,提高传输效率,但若是将二者结合使用,却会下降性能。
当启用Nagle算法的客户端发出一个小的数据包,启用延迟确认的服务器会接受并等待下一个数据包到达。而客户端在未接受到第一个数据包的确认以前,不会再次发送,两段都在等待对方,这反而增长了延迟,下降了传输效率

窗口控制

数据包所能携带的最大数据量称为MSS。当TCP传送大块数据的时候,会先将其分割为多个MMS在进行传送。MMS是发送数据包的单位,重发时也是以MSS为单位,在进行链接时,两端会告诉对方本身所能接受的MSS的大小,而后再选择一个较小的值投入使用。

1:发送窗口:
发送窗口控制了一次能发的字节量,也就是一次能发多少个MSS。发送窗口会受接收方的接收窗口和网络的影响,因此在包中看不到关于发送窗口的信息。用WireShark抓包时,每一个包的传输层都含有"Window size"信息,这个字段并不表示发送窗口,而是接收窗口。
发送窗口一次不能发送太多数据,否则会使网络拥堵,甚至瘫痪。理想状况下,发送窗口能发送的数据量正好是网络所能承受的最大数据量,这个阈值可称为拥塞点。(我知道我在那里看见过这个了!!!!!计算机网络的书上不是有这个题嘛!!!!!)。为了找到拥塞点,定义了一个虚拟的拥塞窗口,经过调节拥塞窗口的大小来限制发送窗口。
2:拥塞窗口:在通讯开始时,经过慢启动对拥塞窗口进行控制,先把拥塞窗口的初始值定义为1个MMS,而后发送数据,每收到一次确认,拥塞窗口就加1,例如发出两个MSS,,获得2次确认,拥塞窗口会以4,8,16等指数增加。当拥塞窗口的大小超过慢启动阈值时,就得改用拥塞避免算法。每一个往返时间只增长1个MSS,例如发出16个MSS,获得16次确认,但拥塞窗口只加1,最终大小为17,这种方式一直持续到出现网络拥堵.
(哎呀,这我的讲的啥啊,乱七八糟的,听不懂!!!!!!还不如课本上讲的呢,辣鸡!!!)

待你爹把课本上的更新上来

重传控制

TCP是一种可靠的通讯协议,所以若是发送方经过一些技术手段(如超时重传,快速重传等)确认某些数据包已经丢失了,那么就会再次发送这些丢失的包。

1:超时重传:TCP会设定一个超时重传计数器(RTO),定义数据包从发出到失效的时间间隔,当发送方发出数据包后,在这段时间内没有收到确认,就会重传这个包。重传以后的拥塞窗口须要从新调整一下,而且超时重传会严重下降传输性能,由于在发送方等待阶段,不能传数据.
2:快速重传:快速重传不会一味的等待,当发送方连续收到3个或3个以上对相同数据包的重复确认时,就会认为这个包丢失了,须要当即重发。
(我都问了三遍你在不在了,你都不理我,那你确定不在呀)

TCP和UDP有哪些区别?
UDP是一种简单的,不可靠的通讯协议,只负责将数据发出,但不保证他们可否到达目的地。之因此不可靠是由于如下几个缘由:
(1):UDP没有顺序控制,因此当数据包乱序到达时,没有纠正功能
(2):UDP没有重传控制,因此当数据包丢失时,也不会重发
(3):UDP在通讯开始时,不须要创建链接,结束时也不用断开链接
(4):UDP没法进行流量控制,拥塞控制等避免网络拥堵的机制
UDP的包头长度不到TCP包头的一半,而且没有重发,链接等机制,故而在传输速度上比起TCP有更大的又是,比较适合即时通讯,信息量较小的通讯和广播通讯。TCP至关于打电话,UDP至关于写信或者发邮件,打电话须要先拨号创建链接,再挂电话断开链接,而写信只要把信丢入邮箱,就能送到指定地址。所以平常生活中的语音聊天和在线视频使用UDP做为传输协议的比较多,由于即便丢几个包也不会有太大影响

HTTPS

HTTPS是一种构建在SSL或TLS上的HTTP协议,简单的说,HTTP就是HTTP的安全版本。SSL(Secrue Sockets Layer)以及其继任者TLS(Transport Layer Security)是一种安全协议,为网络通讯提供来源认证,数据加密和报文完整性检测,保证通讯的保密性和可靠性。HTTPS协议的URL都以“https://”开头,在访问某个Web页面时,客户端会打开一条到服务器443端口的链接。

之因此说HTTP不安全,是因为以3个缘由致使的。
(1):数据以明文传递,有被窃听的风险
(2):接收到的报文没法证实是发送时的报文,不能保障完整性,所以报文有被篡改的风险
(3):不验证通讯两端的身份,请求或响应有被伪造的风险。

加密

加密和解密都由两部分组成:算法和密钥。加密算法能够分为两类:对称加密和非对称加密。
1:对称加密
对称加密在加密和解密的过程当中只使用一个密钥,这个密钥叫作对称密钥,也叫共享密钥。对称加密的优势是计算速度快,其缺点也很明显,就是通讯两端须要分享密钥。客户端和服务器在进行对话前,要先将对称密钥发送给对方,在传输过程当中密钥有被窃取的风险,一旦被窃取,那么密文就能被轻松翻译成明文,

2:非对称加密:非对称加密在加密的过程当中使用公开密钥,在解密的过程当中使用私有密钥。反过来也能够。缺点是计算速度慢可是却能避免信息泄露。

HTTPS采用混合加密机制,将两种加密算法组合使用。在交换公钥阶段使用非堆成加密,在传输报文阶段使用对称加密。

数字签名

数字签名是一段由发送者生成的特殊加密校验码,用于肯定报文的完整性。数字签名的生成设计两种技术:非对称加密和数字摘要。数字摘要能够将变长的报文提取为定长的摘要,报文内容不一样,提取出的摘要也讲不一样,经常使用的摘要算法有MD5和SHA。签名和校验的过程总共分为5步。
(1):发送方用摘要算法对报文进行提取,生成一段摘要
(2):而后用私钥对摘要进行加密,加密后的摘要做为数字签名附加在报文上,一块儿发送给接收方
(3):接收方收到报文后,用一样的摘要算法提取出摘要
(4):再用接收到的公钥对报文中的数字签名进行解密
(5):若是两个摘要相同,那么就能证实报文没有被篡改

数字证书

数字证书至关于网络上的身份证,用于身份识别。证书的内容包括:有效期,颁发机构,颁发机构的签名,证书全部者的名称,证书全部者的公开密钥,版本号和惟一序列号等信息。客户端(浏览器)会预先植入一个受信任的颁发机构列表,若是收到的证书来自陌生的机构,那么会弹出一个安全警报对话框。

说明这个请求来自意料以外的服务器;若是不经过,就说明证书被冒用,来源可疑,客户端会马上发出警告。

安全通讯机制

客户端和服务器将经过好几个步骤创建起安全链接,而后开始通讯。
(1):客户端发送Client Hello报文开始SSL通讯,报文中还包括协议版本号,加密算法等信息
(2):服务器发送Server Hello报文做为应答,在报文中也会包括协议版本号,加密算法等信息
(3):服务器发送数字证书,数字证书中包括服务器的公开密钥
(4):客户端解开并验证数字证书,验证经过后,生成一个随机密码串,再用收到的服务器公钥加密,发送给服务器
(5):客户端再发送Change Clipher Spec报文,提示服务器在此报文以后,采用刚刚生成的随机密码串进行数据加密
(6):服务器也发送Change Clipher Spec报文
(7):SSL链接创建完成,接下来就能够传输数据了。


1:HTTPS有哪些缺点?
HTTPS有以下4个缺点:
(1):通讯两端都须要进行加密和解密,会消耗大量的CPU,内存等资源,增长了服务器的负载
(2):加密运算和屡次握手下降了访问速度
(3):在开发阶段,加大了页面调试难度。因为信息都被加密了,因此用代理工具,须要先解密才能看到真实信息
(4):用HTTPS访问的页面,页面内的外部资源都得用HTTPS请求。包括脚本中的AJAX请求

2:什么是运营商劫持?有什么办法预防?
运行商是指提供网络服务的ISP,例如三大基础运营商:移动,联通,电信。运营商为了谋取经济利益,有时候会劫持用户的HTTP访问,最明显的特征就是在页面上植入广告,有些是购物广告,有些确实淫秽广告(噫噫噫,呕呕呕),很是影响界面体验和公司形象。为了不被运营商劫持,可让服务器支持HTTPS协议,HTTPS传输的数据都被加密过了,运营商就没法再注入广告代码,页面也就不会被再劫持了。

HTTP/2.0

2.0版本保留了1.1版本的大部分语义,例如请求方法,状态码和首部等。由互联网工程任务组为2.0版本实现标准化。2.0版本从协议层面进行改动,目标是优化应用,突破性能限制,改善用户在浏览Web页面时的速度体验。

HTTP/1.1有不少不足,下面列举5个比较有表明性的不足:
(1)在传输中会出现队首阻塞问题
(2)响应不分轻重缓急,只会按照先来后到的顺序执行
(3)并行通讯须要创建多个TCP链接
(4)服务器不能主动推送客户端想要的资源,只能被动的等待客户端发起请求
(5)因为HTTP是无状态的,因此每次请求和响应都会携带大量冗余信息

二进制分帧层

二进制分帧层是HTTP/2.0性能加强的关键,它改变了通讯两端交互数据的方式,原先都是以文本传输,如今要先对数据进行二进制编码,再把数据分红一个个的帧,接着把帧送到数据流中,最后对方接收帧并拼成一条消息,若干条消息在数据流中传输,一个TCP链接能够分出若干条数据流,所以HTTP/2.0只要创建一次TCP链接就能完成全部传输。流,消息,帧是二进制分帧层的基本概念

相关文章
相关标签/搜索