第一次握手:主机 A 发送位码为 syn = 1,随机产生seq number=1234567的数据包到服务器,主机 B 由 syn=1知道, A要求创建联机。跨域
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包。浏览器
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则链接创建成功。缓存
CORS(Cross-Origin Resource Sharing 跨源资源共享),当一个请求url的协议、域名、端口三者之间任意一与当前页面地址不一样即为跨域。安全
CORS是解决浏览器跨域限制的W3C标准,详见:https://www.w3.org/TR/cors/。服务器
根据 CORS 标准的定义,在浏览器中访问跨域资源时,须要作以下实现:网络
具体来讲,在实现时一般须要设置以下几个响应消息头:cors
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另外一个消息处理过程当中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义以下:性能
Public指示响应可被任何缓存区缓存。学习
Cache-Control: no-cache:这个很容易让人产生误解,令人误觉得是响应不被缓存。实际上Cache-Control:no-cache是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。Cache-Control: no-store:这个才是响应不被缓存的意思测试
浏览器建立了一个请求,首先到达的地方是本地缓存(这个是前提是你开启 Cache-Control 缓存), 若是命中,就直接返回给浏览器,若是没有命中 就会往互联网进行发送,在发送过程当中有可能进入代理缓存,若是命中 通过本地缓存返回给浏览器,若是没有命中才会真正到源服务器,这个就是从浏览器发出一个请求到查找缓存的一个过程。
本地缓存文件一般是有过时时间(Http协议头中的expire字段)的,一旦过时,须要重新向服务端发起请求,此时一般会有两种状况:
如何判断文件的内容是否过时,能够经过HTTP协议来控制。请求服务器时,比对Last-Modified或Etag来判断内容是否发生变化,它们都是上一次请求是服务端生成并返回给浏览器的,缓存过时后再次请求时,会把它们包含在HTTP请求中和服务端进行比对,若是比对一致,说明内容没有变动,服务器会返回 304 Not Modified,不然从新发起资源请求,这样的话,就不须要每次访问服务器都经过网络传输一个比较大的文件或者数据包,只要简单的http应答就能够达到相同的请求文件效
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式相似这样:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间以后文件是否有被修改过:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
若是服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。 当服务器端代码发生改变或者重启服务器时,则从新发出资源,返回和第一次请求时相似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能 够获得最新的资源。
HTTP 协议规格说明定义ETag为“被请求变量的实体值”。另外一种说法是,ETag是一个能够与Web资源关联的记号(token)。典型的Web资源能够一个Web页,但也多是JSON或XML文档。服务器单 独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,如下是服务器端返回的格式:
ETag: "50b1c1d4f775c61:df3"
客户端的查询更新格式是这样的:
If-None-Match: W/"50b1c1d4f775c61:df3"
若是ETag没改变,则返回状态304而后不返回,这也和Last-Modified同样。本人测试Etag主要在断点下载时比较有用。
聪明的开发者会把Last-Modified 和ETags请求的http报头一块儿使用,这样可利用客户端(例如浏览器)的缓存。由于服 务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端经过将该记号传回服务器要求服 务器验证其(客户端)缓存。
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。
HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。
HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全,为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
关于HTTP2和HTTP1.x的区别大体能够看下图:
愿你成为终身学习者