Skip to content

Latest commit

 

History

History
180 lines (119 loc) · 11.7 KB

NetWork.md

File metadata and controls

180 lines (119 loc) · 11.7 KB

网络部分

1.页面从输入URL到展现发生了什么

输入URL之后,需要寻找到这个url域名的服务器IP,为了找到这个IP,浏览器首先会寻找缓存, 查看缓存中是否有记录,缓存中查找的顺序是浏览器缓存、系统缓存、路由器缓存,缓存中没有则 查找系统的hosts文件中是否有记录,如果没有记录则会查询DNS服务器,得到服务器的IP地址之 后,浏览器根据这个IP以及相应的端口号,(如HTTP协议默认的端口号为80,HTTPS协议的默认 端口号为443,当然可以在url中指定端口号)构造一个HTTP请求,并将这个HTTP包请求封装在 一个TCP包中,(这个HTTP请求报文会包含这次请求的信息,主要是请求方法、请求的说明和请 求附带的数据),这个tcp包依次会经过传输层、网络层、数据链路层、物理层到达服务器,服 务器解析这个请求来做出响应,(我们假定这个url是一个类似谷歌、淘宝这样的网站首页,而 不是简单的文件),服务器返回相应的HTML给浏览器,因为HTML是一个树形结构,浏览器根据 这个HTML来构建DOM树在DOM树的构建过程中如果遇到js脚本和外部js连接,则会停止构建DOM 树来执行和下载相应的代码,这会造成阻塞,这也就是为什么推荐js代码应该放在HTML代码的后 面,之后根据外部样式、内部样式、内联样式构建一个CSS对象模型树(CSSOM树),构建完成之 后和DOM树合并为渲染树,这里主要做的是排除非视觉节点,如script、meta标签和排除display 为none的节点,之后就是进行布局,布局主要是确定各个元素的位置和尺寸,之后就是渲染页面。 因为HTML文件中会含有图片、音频、视频等资源,在解析DOM的过程中,遇到这些都会进行并行下 载,当然浏览器对每个域的并行下载数量有一定的限制,一般是4-6个,当然在这些所有请求中我们 还需要关注的就是缓存,缓存一般通过Cache-Control、Last-Modify、Expires等首部字段控制。 Cache-Control和Expires的区别在于Cache-Control使用相对时间,Expires使用的是基于服务器 端的绝对时间,因为存在时差问题,一般采用Cache-Control,在请求这些有设置了缓存的数据时,会先 查看是否过期,如果没有过期则直接使用本地缓存,过期则请求并在服务器校验文件是否修改,如果上一次 响应设置了ETag值会在这次请求的时候作为If-None-Match的值交给服务器校验,如果一致,继续校验 Last-Modified,没有设置ETag则直接验证Last-Modified,再决定是否返回304

参考:

缓存策略

浏览器内核、JS 引擎、页面呈现原理及其优化

HTTP权威指南

2.cookie和session的异同

cookie和session都可以用来存储用户信息,cookie存放于客户端,session存放于服务端,因为cookie存放于客户端 有可能被窃取,因此cookie一般用来存放不敏感的信息,如用户设置的网站主题等,敏感的信息采用session存储,如用户 的登陆信息,session可以存放于文件、数据库、内存中都可以,cookie可以服务端响应的时候设置,也可以客户端通过js设置 cookie会在请求时在http首部发送给客户端,cookie一般在客户端有大小限制,一般为4k。

3.HTTP和HTTPS的区别

首先HTTP和HTTPS的默认端口号就不一样,HTTP的默认端口号为80,HTTPS的默认端口号为443,HTTP在传输过程中使用的是明文 传输,内容可能被窃取,而且无法验证通信方的身份,还有可能遭遇身份伪装,而HTTPS在应用层和传输层之间增加了ssl协议用来加密 内容,因此通过证书验证来验证身份,即使数据被窃取也无法解密,数据的传输更加安全。

4.ssl加密使用了那种算法,如何加密

5.TCP三次握手的过程,为什么是三次而不是两次或者四次?

第一次握手:客户端发送一个syn(同步)包(syn=x)给服务器,进入SYN_SEND状态,等待服务器确认

第二次握手:服务端收到客户端发送的同步包,确认客户端的同步请求(ack=x+1),同时也发送一个同步包, 也就是一个ACK包+SYN包服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送一个确认包,此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手

不是两次是为了防止已经失效的连接请求报文段突然又传送到了服务端,因而产生错误,比如有一个因网络延迟的请求 发送到了服务端,服务端收到这个同步报文之后进行确认,如果此时是两次握手,那么此时连接建立,但是客户端并没有发出 建立连接的请求,服务端却一直等待客户端发送数据,这样服务端的资源就白白浪费了。

不是四次的话是因为完全没有必要,三次已经足够了

参考:

计算机网络之面试常考

tcp为什么要三次握手,而不能二次握手?

TCP 为什么是三次握手,为什么不是两次或四次?

6.TCP的四次挥手

第一次:主动关闭方发送一个FIN包,用来关闭主动关闭方到被动关闭方的数据传送,也就是告诉另一方我不再发送数据了,但此时仍可以接收数据

第二次:被动关闭方收到FIN包之后,发送一个确认(ACK)包给对方

第三次:被动关闭方发送一个FIN包,告诉对方不带发送数据

第四次:主动关闭方收到FIN包之后,发送一个ACK包给对方,至此完成四次挥手

7.HTTP报文的格式,传输中以何种方式传输

HTTP报文分为三个部分,起始行、首部和主体,其中起始行和首部以一个回车和换行符分隔,首部和主体以一个空行分隔,其中起始行是对这次HTTP请求或者响应 的描述,请求报文的起始行包括使用的HTTP方法、请求的url地址、HTTP版本,响应报文的起始行包括HTTP的版本,HTTP状态码,http状态码的描述,首部也 就是常说的HTTP头部,如Date、Cookie、Content-Type等,主体是这次请求或响应的数据,传输中以明文传输。

参考:

HTTP权威指南

8.常见的HTTP头部

可以将HTTP首部分为通用首部、请求首部、响应首部、实体首部,通用首部表示一些通用信息,如Date表示报文创建时间,请求首部就是请求报文中 独有的,如cookie、和缓存相关的If-Modified-Since,响应首部就是响应报文中独有的,如set-cookie和重定向有关的location,实体首部用来 描述实体部分,如Allow用来描述可执行的请求方法,Content-Type描述主体类型,Content-Encoding描述主体的编码方式

参考:

HTTP权威指南

9.HTTP状态的简要分类

可以按照HTTP状态码的第一个数字分类,1xx表示信息,2xx表示成功,3xx表示重定向,这里需要注意的是304,表示未修改, 4xx表示客户端错误,最常见的是404,5xx表示服务端错误

10.HTTP状态码101、200、301、302、304的具体含义

101:切换协议 200:正常,OK,301:永久重定向,302:临时重定向,304:未修改

11.301和302的区别

12.简要介绍一次302的过程

用户请求一个url,服务器处理这个url,设置这个url需要重定向,返回用户一个302响应,并在http头部设置location字段为新的地址, 浏览器得到这个响应,根据location中新的地址重新发起一次请求。

13.HTTP2.0的简要介绍

14.用户登陆过程的简要说明,如何判断用户是否登录?

用户输入用户名和密码,通过post请求将密码和用户名发送给服务器,服务器比对收到的用户名、密码和数据库中的数据进行比对,不一致则做出响应, 反馈信息给客户端,如果比对一致则服务端生成一个session,这个session可以存储在内存、文件、数据库中,同时生成一个与之一一对应的sessionID 作为cookie发送给客户端,比对成功之后反馈信息,这时一般会进行一次重定向,重定向至登陆之后的默认页面。判断用户登录则是根据这个sessionID,每次请求 会先检查有没有这次类似sessionID的cookie发送过来,没有则认为没有登录,有则是否有相应的session,这个session是否过期等,来判断用户是否登录, 登录是否过期。

15.tcp和udp的区别

TCP面向连接的、提供可靠传输的协议,而UDP则是面向非连接。不可靠传输的协议,之所以说TCP是可靠的传输协议是因为TCP协议在传输数据之前有一个确认双方是否 连接的过程,而UDP没有,也正是因此在传输速度方面,UDP更快。因此需要可靠传输需要选用TCP,不需要可靠传输情况下选择UDP。

16.udp的阻塞机制,如何处理

17.简要介绍一下socket协议

18.get和post有什么区别?什么时候用get,什么时候用post

get用来请求数据,post用来提交数据,form表单使用get时,数据会以querystring形式存在url中,因而不够安全也存在数据大小限制,而post不会,post将数据 存放在HTTP报文体中,获取数据应该使用get,提交数据应该使用post。

这个问题答案存疑,网上有很多种说法,但对于初级面试应该够了

参考:

get和post区别?

浅谈HTTP中Get与Post的区别

GET和POST有什么区别?及为什么网上的多数答案都是错的。

也谈 GET 和 POST 的区别

19.什么是正向代理?什么是反向代理?

正向代理就是客户端向代理服务器发送请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。比如翻墙 反向代理的话代理会判断请求走向何处,并将请求转交给客户端,客户端只会觉得这个代理是一个真正的服务器。如负载均衡。

正向代理和反向代理的区别

20.介绍一下HTTPS的连接过程

21.和缓存有关的请求头有哪些?优先级是怎样的?

和缓存有关的请求头有Cache-Control、If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since,在缓存中 总体来说是Cache-Control优先于Expires,Cache-Control中会需要检测Cache-Control是否过期,过期的话检验会优先检测Etag, 也就是If-Match、If-None-Match,不一致则验证Last-Modify请求头也就是If-Modified-Since、If-Unmodified-Since。

参考:

HTTP缓存控制小结

22.介绍一下DNS的查找过程?

23.http连接性能优化,长连接,keep-alive

24.https的详细过程,使用的加密算法,是对称加密算法还是非对称加密算法。md5、SHA、AES分别是对称加密的还是非对称加密的

25.https没有大规模应用的原因

26.http2有哪些新特性?

27.端口号的作用是什么?

作用是区分服务类别和同一时间进行多个会话

参考:

端口号的作用及常见端口号用途说明