阅读 2173

前端面试:http专场,你需要懂的知识

游泳健身了解一下:github 和小伙伴一起搞的日常总结

讲一讲强缓存和协议缓存?

http的缓存分为强缓存和协商缓存
强缓存:
    cache-control : max-age: 22222 //缓存时间
        from memory cache // 内存
        from disk cache // 硬盘
协商缓存
        Last-modified // 当前服务器时间
        ETag // 当前服务器的哈希

判断过程:先判断当前强缓存时间是否过期,没有过去就去请求本地的内存和硬盘,过期就去协商缓存,
返回if-Modified-Since(Last-modified) 和 if-no-Match(ETag)来判断当前文件是否有更新,
如果没有更新返回304,更新则返回200和当前更新文件
复制代码

TCP握手过程和分手过程

握手过程:
    发送端 -> 接收端  你听得到吗?
    接收端 -> 发送端  我听到的到,你听的到我吗?
    发送端 -> 接收端  我听的到,我们开始说话吧
    
具体过程
    发送端发送当前seq(发送端序号)x 发送给当前接收端(发送SYN表识数据包)
    接收端返回ack(确认序号)x+1,seq(接收端序号) y 给发送端(发送SYN表识数据包)
    发送单发送ack(确认序号)y+1给接收端(发送ACK表识数据包)

分手过程
    客户端 -> 服务器 请求关闭链接
    服务器 -> 客户端 确认到关闭
    服务器 -> 客户端 我要关闭了,你确认一下
    客户端 -> 服务端 我关闭了,你也关闭吧,不用回复了 
具体过程
    客户端发送seq x+2(序号)ACK y+1 (确认序号)给服务端(FIN包)
    服务器发送ACK(确认序号)x+1(ACK包)
    服务器发送seq y+1 (序号)(FIN包)
    客户端发送ACK(确认序号)y+2
复制代码

TCP三次握手和四次挥手?以其存在意义。

三次握手
    想想一下如果不确认一次,那么我们发送如果网络不好那么服务端一直开着一个链接,客户端过了一会又发了一个信息,
    那么服务器端认为是一个新端请求就会创建一个新的链接,造成了不必要的性能的开销,三次握手就表示双方都收到,
    就不会出现上面的问题了
    
四次挥手
    由于我们的tcp是双向的,我们客户端发送给服务端说可以断开链接了,但是可能我们的服务端端数据还没有发送完成,
    所以需要进行一次确认,我们服务端发送一个ACK确认包给客户端,(我收到了),然后服务端再发送一个FIN包
    (我已经传输完毕了),可以断开链接了,然后客户端确认到关闭端请求,给服务端发送收到端消息,双方就关闭了
复制代码

302.304.301.401.403的区别?

301:当前永久重定向(不会保存之前的url 会使用新的url)
302:临时重定向(保存之前的url 会使用新的url)
304:强缓存,缓存有效(资源没有过期)
401:访问缺少信息没有授权
403:拒绝访问
复制代码

有了【Last-Modified,If-Modified-Since】为何还要有【ETag、If-None-Match】

当前时间(按秒来创建)可能会创建多个文件,所以时间可能会相同
hash值唯一不会相同
复制代码

nginx 了解吗?你都用来做什么?

映射服务器文件,反响代理服务器
复制代码

你是如何解决跨域的?都有几种?

ajax new XMLHttpRequest GET text/plain 等简单请求
nginx 反向代理
服务器 配置 Access-Control-Allow-Origin: * || Access-Control-Allow-Methods: POST
jsonp 使用script 标签加载 通过callback方法来回调
postmessage // 跨页面操作
websocket //长链接
图片的src
复制代码

https的握手过程

1.客户端发送请求给服务端
2.服务器端拿着数字证书的公钥进行非对称加密(生成私钥),返回数字证书
3.客户端收到服务端返回端数字证书,对数字证书进行校验(是否过期,是否正确)
4.客户端生成随机数,与数字证书里的公钥进行对称加密,返回给服务端
5.服务端用私钥对当前客户端的值进行解密,获取随机数
6.服务端把客户端需要的数据和随机数进行对称加密返回给客户端
7.客户端收到数据,(通过随机数)进行解密,获取数据
复制代码

CSRF 跨站请求伪造和XSS 跨站脚本攻击是什么?

XSS 注入脚本攻击
例子:
    1.你使用了url上的某个字段直接innerhtml到页面里面,我把某个字段改为<script> 页面就会执行我们的js,
    就是注入脚本进行攻击
    2.最常见的就是富文本编译器,我们输入然后前端进行展示,比如里面输入<script>
    3.sql注入攻击后台没有进行sql的拦截,可以删库
预防: 我们对<script> 改为 &t script 这样标签转化

CSRF 跨站请求伪造
例子:
    1.你打开了某个页面,登陆了用户信息,你小伙伴给你发了一个链接你打开了,cookie 是一直发的导致其他页面
    获取了你的cookie,伪造你进行对之前页面对请求,
预防:我们添加token,后台有存当前session用户,进行匹配对当前用户进行校验,存着的token是不会对跨站进行保存

复制代码

http的请求报文由什么组成

请求行
请求方式 请求路由 协议/版本
post     /xx      http/1.1

请求头
accept */* //请求需要的格式
user-agent //当前请求的浏览器信息
host //ip || 域名
空行 //分割主体和请求头
请求体
// json,fromData等

复制代码

http2和http1.1之间的区别

1.http2 是二进制传输
2.头部压缩,http1.1每次都要重复请求大量都头部信息,http2只需要发送改变都头部信息就可以
3.服务器推送:服务器可以在推送html的时候主动推送其他的一些资源
4.多路由复用:http1.1比如我们请求2个文件,一个文件请求需要1秒,第二个文件需要等待第一个请求响应结束
,才可以进行三次握手传递文件,那么时间就会增加,而http2中按流等形式进行传输,帧是流等最小单位,
帧中带有下标,可以识别从哪个流来的,服务器会将帧数据重新整合成流,也就是多路由复用
复制代码

http的状态码有哪些

1XX: 临时响应
2XX:成功
    200:成功
    206:范围请求,比如最大需要200k的数据
3XX: 重定向
    301:永久重定向
    302:临时重定向
    304:强缓存还可以使用
401: 客户端错误
    400:请求错误(请求格式错误,请求头错误)
    401:需要登陆信息,需要验证身份
    403:拒绝访问
    404:没有当前资源
5XX:服务端错误
    500:服务端发生流错误
    502:服务器错误,过载或者任务不可用
复制代码

HTTP和HTTPS握手差异?

https需要ca证书
tcp链接http访问80端口,https访问443端口
http明文,https加密
https 要比 http 多了证书校验,增加了通信的加密,比http安全
复制代码

http的常用字段有哪些

accept
user-angent
cookie
content-length
last-modified
ETag
Host
if-no-match (ETag)
if-modified-Since (last-modified)
content-type
cache-control等
复制代码

总结

有啥写错了,和问题可以留言给我,会立即更正的

最后

多多点赞在github 上面对❤️是对我最好对鼓励,我会尽量分享一些自己使用得心得以及正确对食用方式 求靠谱内推(北京地区)可以留言我 +。= 需要探讨的小伙伴可以加

关注下面的标签,发现更多相似文章
评论