被裁之后休息了挺久的,最近也一直在准备面试重新找新工作,希望后面找工作的过程比较顺利吧,我们普通人没有办法去埋怨大环境不好,只能不断提高自己的核心竞争力,把准备过程中的面试题在此做记录
本人水平还是初级前端水平哦,总结的面试题有些只适用于初级前端,高级可能需要自己去做深入的理解
1、http有哪些常见的请求头和响应头
-
常见http request head
①accept:浏览器可接受的类型和格式
②cookie:客户端发送的cookie信息
③referer:请求来源页面的URL,一般用于收集访问的统计数据,追踪用户的行为
④User-Agent:发送请求的用户代理信息,一般会包括浏览器的名称和版本
⑤cache-control缓存机制的控制指令,比如是否进行缓存,缓存的时间等
⑥content-type:请求体的媒体类型
⑦origin:表示请求的来源、起源或发起人 -
常见的http response head
①Date:响应生成的时间
②Set-Cookie:服务器设置的Cookie信息
③access-control-allow-origin:指示哪些源(Origins)可以访问该响应
④access-control-allow-credentials:用于指示是否允许跨域请求携带凭据(如Cookie、HTTP身份验证等)
2、cookie是什么,,有哪些属性
-
什么是cookie
一种「小型文本文件」,指网站为了辨别用户身份而储存在用户本地终端的数据,为了解决 HTTP 无状态导致的问题而出现,大小不超过4KB -
有哪些属性
①Name/Value
②Expires:Cookie的过期时间。
③Max-age:设置在 Cookie 失效之前需要经过的秒数,优先级高于Expires
④Domain:指定可以送到的主机名,不能跨域。
⑤Path:Path 指定了一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 Cookie 首部。Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL。
⑥Secure:标记为Secure 的 Cookie 只会被HTTPS协议加密过的请求发送给服务端。
⑦HttpOnly:设置 HttpOnly 属性可以防止客户端脚本通过 document.cookie 等方式访问 Cookie,有助于避免 XSS 攻击。
⑧SameSite:SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)
3、对Keep-Alive的理解
- HTTP1.0 中默认是在每次请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接,这就是短连接。
- 当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,这就是长连接。
- HTTP1.0版本是默认没有Keep-alive的,所以要想连接得到保持,必须手动配置发送
Connection: keep-alive
字段。 - HTTP1.1规定了默认保持长连接,数据传输完成了保持TCP连接不断开,等待在同域名下继续用这个通道传输数据。如果需要关闭,需要客户端发送
Connection:close
首部字段。
4、TCP和UDP的使用场景
- TCP应用场景(可靠传输): 效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。
- UDP应用场景(不可靠传输): 效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)。
5、http2.0相对于http1.1有哪些新特性
- 新的二进制格式: HTTP 2.0 是一个二进制协议。在 HTTP1.1版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是二进制。
- 多路复用: HTTP 2.0 实现了多路复用, 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵塞"的问题。
- 数据流: HTTP2.0 使用了数据流的概念,因为 HTTP2.0 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。
- 头信息压缩: HTTP2.0 实现了头信息压缩,由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。http2.0对头信息进行压缩优化了http 1.1 请求的很多重复字段比如 Cookie 和 User Agent ,造成的带宽浪费,也影响速度。
- 服务器推送: HTTP2.0允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。使用服务器推送提前给客户端推送必要的资源,这样就可以相对减少一些延迟时间。
6、http和https的区别
- 安全性不同:HTTP是以TCP做为传输层协议来保证数据的可靠性,在web浏览器和服务器之间传递信息是以明文方式传输,没有进行加密,而HTTPS是安全版本的HTTP,使用了SSL/TSL协议进行加密处理,相对更安全
- 端口不一样:HTTP默认端口是80,HTTPS默认端口是443
- 性能不一样:HTTPS需要设计加密和多次握手,性能方面不然HTTP
- 收费区别:HTTPS协议是需要SSL证书的,需要收费,功能越强大证书费用越高
7、get和post的区别
- 使用场景不同:get请求一般用来在那些不会对服务器资源产生影响的场景,比如请求一个网页的资源,post请求一般用来对服务器资源会产生影响的场景,比如注册用户
- 是否缓存:浏览器一般会对get请求缓存,不会对post请求缓存
- 发送的报文格式:get请求报文中的实体部分一般为空,而post请求的报文一般包含需要向服务器发送的数据
- 参数传递的方式:get请求参数的传递一般是通过url携带参数发送,浏览器对url长度有限制,会影响get七八个球参数的传递,post是放在request body当中
- 安全性:通过url传递参数的方式是不太安全的,请求的url会被保留在历史记录中,post传递参数的方式安全性比较高 -参数类型:get请求的参数必须是ASCII字符,post请求的参数类型更多
8、复杂请求和预检请求
CORS解决跨域问题,他的请求有简单和复杂请求,简单请求(get/post/head,content-type有三个特定的值),除了简单请求外的都是复杂请求,复杂请求需要新添一个http查询请求,也叫预检请求,他是一个options请求,用来告诉服务器是否允许跨域
9、常见的请求方式
- get:向服务器获取数据
- post:将实体提交到指定的资源,会造成对服务器资源的修改
- put:上传文件,更新数据
- delete:删除服务器上的对象
- head:获取报文首部,与get相比,不会获取报文主体部分
- connect:要求与代理服务器通信时建立隧道,使用隧道进行TCP通信
- options:询问支持的请求方法,用来跨域请求
- trace:回显服务器收到的请求,一般用来测试或者诊断
10、DNS完整查询过程
-
①首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
-
②如果没有命中,就去查找操作系统中是否有缓存
-
③如果没有命中,操作系统将域名发送给本地域名服务器,本地域名服务器通过一个递归查询的方法查找是否有缓存,有的话就直接返回查找结果
-
④如果本地域名服务器没有命中,就去向根域名服务器去查找
- 1)本地域名服务器向根域名服务器去发送请求,返回一个顶级域名服务器
- 2)本地域名服务器拿到顶级域名服务器地址之后向他发送请求,返回一个权限域名服务器地址
- 3)本地域名服务器向权限域名服务器地址发送请求,拿到对应的一个ip地址
-
⑤本地域名服务器把这个IP地址返回给操作系统,同时操作系统对IP地址进行缓存
-
⑥操作系统把IP地址返回给浏览器,浏览器也对这个ip地址进行缓存
-
⑦最终浏览器就能拿到对应的ip地址,DNS域名查询过程结束
11、常见状态码
12、TLS/SSL
TLS/SSL全称安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。TLS/SSL的功能实现主要依赖三类基本算法
①散列函数hash:基于散列函数验证信息的完整性
②对称加密:对称加密算法采用协商的秘钥对数据加密,即通信的双⽅都使⽤同⼀个秘钥进⾏加解密,对称加密虽然很简单性能也好,但是⽆法解决⾸次把秘钥发给对⽅的问题,很容易被⿊客拦截秘钥。
③非对称加密:非对称加密实现身份认证和秘钥协商
13、三次握手
TCP 建立连接的三次握手的过程
- 首先客户端向服务器发送一个 SYN 连接请求报文段和一个随机序号
- 服务端接收到请求后向服务器端发送一个 SYN ACK报文段,确认连接请求,并且也向客户端发送一个随机序号
- 客户端接收服务器的确认应答后,进入连接建立的状态,同时向服务器也发送一个ACK 确认报文段,服务器端接收到确认后,也进入连接建立状态,此时双方的连接就建立起来了
14、webSocket
是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, 并进行双向数据传输。WebSocket 的出现就解决了半双工通信的弊端。它最大的特点是:服务器可以向客户端主动推送消息,客户端也可以主动向服务器推送消息。