一、TCP三次握手?四次挥手 ?
Q1:
1、第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
2、第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
3、第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
![](https://img.haomeiwen.com/i6543815/5d3de38dd9289891.png)
Q2:
1、第一次挥手:主机1(可以是客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
2、第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
3、第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
4、第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
二、HTTP连接过过程,HTTPS连接过程分别有几次握手?
Q1:HTTP连接过程有三次握手。HTTP的三次握手,其实就是使用三次TCP握手确认建立一个HTTP连接。同问题一中的TCP三次握手。
Q2:HTTPS连接过程有一次握手。
![](https://img.haomeiwen.com/i6543815/87c2341e66df9946.png)
1、客户端发起HTTPS请求
2、服务器端将自己的身份信息以证书的形式发回给浏览器。证书可以是自签名证书或者由CA机构颁发的签名证书。证书包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3、客户端验证证书的合法性,如果证书不受信任,给出证书不受信提示。
4、如果证书受信任,客户端产生一串随机密码,并用证书提供的公钥加密。
5、客户端将加密后的随机密码传给服务器端。
6、服务器端用私钥解密获得随机密码,并用随机密码对一段握手消息加密。
7、服务器端将加密后的消息发送给客户端。
8、客户端用随机密码对消息解密。
之后所有的通信数据将由之前客户端生成的随机密码并利用对称加密算法进行加密。
参考博文1
参考博文2
三、HTTP和HTTPS的区别
1、HTTP
①HTTP协议建立在TCP连接之上,所有传输的内容都是明文。
②HTTP用的端口是80。
2、HTTPS
①HTTPS建立在SSL/TLS之上,SSL/TLS建立在TCP连接之上,所有的传输内容都是经过加密的。
②HTTPS用的端口是443。
③HTTPS可以有效地防止运营商劫持。
四、浏览器缓存机制
浏览器端缓存的机制种类较多,总体归纳为九种,打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制。
![](https://img.haomeiwen.com/i6543815/5b40f7c92083e8f8.png)
1、http缓存
它是基于HTTP协议的浏览器文件级缓存机制。即针对文件的重复请求情况下,浏览器可以根据协议头中的Cache-Control(或 Expires)、 Last-Modified和 Etag等字段判断从服务器端请求文件还是从本地读取文件。
主要是针对重复的http请求,在有缓存的情况下判断过程主要分3步:
◆判断expires,如果未过期,直接读取http缓存文件,不发http请求,否则进入下一步。
◆判断是否含有etag,有则带上if-none-match发送请求,未修改返回304,修改返回200,否则进入下一步。
◆判断是否含有last-modified,有则带上if-modified-since发送请求,无效返回200,有效返回304,否则直接向服务器请求。
![](https://img.haomeiwen.com/i6543815/6e810346fe4b0063.png)
2、websql
将数据以数据库的形式存储在客户端,让浏览器实现小型数据库存储功能;能够存储结构复杂的数据;允许sql语句对数据进行增加、删除、修改、查询,便于检索。
3、IndexedDB
IndexedDB 是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API。
IndexedDB 分别为同步和异步访问提供了单独的 API 。同步 API 本来是要用于仅供 Web Workers 内部使用,但是还没有被任何浏览器所实现。异步 API 在 Web Workers 内部和外部都可以使用,另外浏览器可能对indexDB有50M大小的限制,一般用于保存大量用户数据并要求数据之间有搜索需要的场景。
4、localstorage
localStorage是html5的一种新的本地缓存方案,目前用的比较多,一般用来存储ajax返回的数据,加快下次页面打开时的渲染速度。localstorage大小有限制(浏览器 最大长度 IE9以上 5M Firefox 8以上 5.24M Opera 2M Safari/WebKit 2.6M ),不适合存放过多的数据,如果数据存放超过最大限制会报错,并移除最先保存的数据。
5、sessionstorage
essionStorage和localstorage类似,但是浏览器关闭则会全部删除,api和localstorage相同。
6、Cookies
Cookie(或者Cookies),指一般网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。cookie一般通过http请求中在头部一起发送到服务器端。一条cookie记录主要由键、值、域、过期时间、大小组成,一般用于保存用户的认证信息。cookie最大长度和域名个数由不同浏览器决定(浏览器 支持域名个数 最大长度 IE7以上 50个 4095B Firefox 50个 4097B Opera 30个 4096B Safari/WebKit 无限制 4097B)不同域名之间的cookie信息是独立的,如果需要设置共享可以在服务器端设置cookie的path和domain来实现共享。浏览器端也可以通过document.cookie来获取cookie,并通过js浏览器端也可以方便地读取/设置cookie的值。
7、application cache
application cahce是将大部分图片资源、js、css等静态资源放在manifest文件配置中,menifest文件用于控制其它文件更新。当页面打开时通过manifest文件来读取本地文件或是请求服务器文件。
优点:
◆离线浏览 – 用户可在离线时浏览您的完整网站。
◆速度 – 缓存资源为本地资源,因此加载速度较快。
◆服务器负载更少 – 浏览器只会从发生了更改的服务器下载资源。
8、cacheStorage
CacheStorage是在ServiceWorker的规范中定义的。CacheStorage 可以保存每个serverWorker申明的cache对象,cacheStorage有open、match、has、delete、keys五个核心方法,可以对cache对象的不同匹配进行不同的响应。
9、flash缓存
基于flash有读写浏览器端本地目录的功能,并向js提供可调用的api。页面可以通过js调用flash去读写特定的磁盘目录,达到本地数据缓存的目的。这种方式基本不用。
五、http请求头,请求体,cookie在哪个里面?url在哪里面?
Q1:见下图。
![](https://img.haomeiwen.com/i6543815/f7cf8d7c55327173.png)
Q2:cookie在请求头里面。
Q3:url在请求行里面。
补充:
![](https://img.haomeiwen.com/i6543815/46f9f79ab5126d28.png)
HTTP请求行、请求头、请求体详解
六、OSI模型,HTTP,TCP,UDP分别在哪些层?
OSI模型是七层体系结构,包含应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
HTTP在应用层。
TCP和UDP在运输层。
IP在网络层。
七、常见的http状态码
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。比如说我们在地址栏输入baidu,虽然没写完整,但是浏览器会通过永久重定向去加上http://www.baidu.com,仍然会让用户访问的到,服务器重定向会防止搜索引擎干预,搜索引擎收到301永久重定向就会把http://baidu.com和http://www.baidu.com看成一个网站;
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
八、cookie的弊端
1、cookie数量和长度的限制。
IE6或更低版本IE最多生成20个cookie,IE7以后可以有50个cookie。Firefox最多50个cookie。
每个cookie的长度不能超过4KB,否则会被截掉。
2、安全性问题。如果cookie被拦截,拦截者可以获取所有的session信息。拦截者不需要知道cookie的具体内容,只要原样转发cookie就可以达到目的。
九、HTTP1.0、HTTP1.1、HTTP2.0的区别
1、HTTP1.0:
①使用keep-alive参数告知服务器端建立一个长连接。
②不支持host头域。HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,在请求消息中的URL 并没有传递主机名(hostname)。
③HTTP1.0使用header里的if-Modified-Since,Expires来作为缓存判断的标准。
④只允许请求全部资源,不允许请求部分资源,不支持断点续传功能。
2、HTTP1.1:
①HTTP1.1默认支持长连接和请求的流水线(Pipelining)处理。
在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
②HTTP1.1支持只发送header信息(不带任何body)信息,如果服务器认为客户端有权限请求服务器,则返回100(continue),否则返回401。
如果客户端接受到100,就把请求body发送到服务器。
如果客户端接受到401,客户端不用发送请求body,从而节约了带宽。
③HTTP1.1引入了range头域,允许只请求资源的一部分,即返回码是206(Partial Content)。
当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。支持断点续传。
④HTTP1.1的请求消息和响应消息都支持host头域。
随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,它们可以共享同一个IP地址和端口。
⑤HTTP1.1支持建立多个TCP连接,处理并发请求。
⑥HTTP1.1不支持header数据的压缩。
⑦HTTP1.1引入了更多的缓存控制策略。例如:Etag,if-Unmodified-Since,if-Match,If-None-Match等更多缓存头来控制缓存策略。
⑧新增24个错误状态码。如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上某个资源被永久性地删除。
3、HTTP 2.0
①HTTP 2.0采用新的二进制格式。HTTP1.x的解析是基于文本的,健壮性不高。
多路复用。同一个连接可以并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
②数据压缩。HTTP2.0使用HPACK算法对header的数据进行压缩,数据体积小了,在网络上传输就会更快。
③服务器推送。当我们对支持HTTP2.0的服务器请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常适合加载静态资源。
服务器端推送这些资源其实存在于客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度会很快。
补充:
①HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。
②TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。
网友评论