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

游泳健身了解一下:github 和小伙伴一块儿搞的平常总结html

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

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 上面对❤️是对我最好对鼓励,我会尽可能分享一些本身使用得心得以及正确对食用方式 求靠谱内推(北京地区)能够留言我 +。= 须要探讨的小伙伴能够加nginx

相关文章
相关标签/搜索