1

http状态码有那些?分别代表是什么意思?

简单版

[
    100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
    200  OK         正常返回信息
    201  Created    请求成功并且服务器创建了新的资源
    202  Accepted   服务器已接受请求,但尚未处理
    301  Moved Permanently  请求的网页已永久移动到新位置。
    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 服务器端暂时无法处理请求(可能是过载或维护)。
]

什么是同源策略

基本概念:同源策略是一个重要的Web安全概念,它规定一个网页上的脚本只能访问与该网页相同源的资源
源的组成:阐明构成“源”的要素。可以这样说:“在同源策略中,‘源’指的是协议、域名和端口的组合。只有当两个URL在这三个方面完全匹配时,它们才属于同一源。”

  1. 讨论同源策略的限制
    安全限制:讲述同源策略对Web应用的影响,特别是在AJAX请求、Cookie访问、DOM操作和Web存储(如localStorage和sessionStorage)方面的限制。
  2. 提到跨源访问的解决方案
    CORS:介绍跨源资源共享(CORS)作为一种解决方案。比如:“为了允许安全的跨源访问,可以使用CORS机制,它通过在HTTP头中添加特定的指令,来授权跨源访问请求。”

    单点登录前端实现

    1.基于cookie
    cookie默认不可跨域共享,但是有一些情况下可以设置共享
    比如主域名相同 www.baidu.com image.baidu.com 设置cookiedomain为主域名,可以共享cookie
    2.sso
    允许用户使用一套登录凭证访问多个应用程序,从而提高用户体验。它涉及到处理认证流程、维护会话状态和用户界面的交互。”
    认证流程:“在前端实现中,SSO通常涉及引导用户到一个中央认证服务器进行登录。一旦登录成功,用户会被重定向回原应用,并携带一个认证令牌。”
    令牌处理:“前端应用需要处理这个令牌,通常将其存储在浏览器的存储中(如localStorage),并在随后的API请求中使用它。”

  3. 前端中的SSO优势
    用户体验:“对于前端开发而言,SSO提升了用户体验,用户无需在每个服务中重复登录,页面之间的切换更加流畅。”
  4. 前端安全考虑
    安全实践:“在前端实现SSO时,我们需要确保令牌的安全存储和传输,同时要注意防范像CSRF攻击这样的安全威胁。”
  5. 跨域处理
    处理跨域问题:“由于SSO通常涉及不同域之间的跳转和数据交换,因此处理跨域请求(CORS)是前端开发中的一个重要方面。”
  6. 与后端的协调
    前后端协作:“在实现SSO时,前端开发者需要与后端团队紧密协作,确保认证流程的顺畅,并且API接口能够正确处理令牌。”

url组成部分

协议:
URL的开始部分是协议(或称为方案),表明如何访问资源。
常见的协议包括http://和https://,分别代表超文本传输协议和加密的超文本传输协议。还有其他协议,如ftp://(文件传输协议)和mailto:(电子邮件地址)。
域名:
域名指定了托管资源的服务器的位置。例如,在www.example.com中,example.com是域名。
域名通常通过DNS(域名系统)解析成IP地址,以便计算机能够找到托管资源的服务器。
端口(可选):
端口号紧跟在域名之后,由冒号分隔。例如,http://www.example.com:80中的:80。
端口号用于指定服务器上用于通信的特定端口。如果未指定,将使用协议的默认端口(例如,HTTP的默认端口是80,HTTPS的是443)。
路径:
路径指定服务器上资源的具体位置。例如,在http://www.example.com/index.html中,/index.html是路径。
路径可以是简单的文件名,也可以是表示文件层次结构的一系列目录。
查询字符串(可选):
查询字符串以问号?开始,后面跟着一个或多个参数。每个参数由键值对组成,参数之间通常用&分隔。
例如,在http://www.example.com/search?q=keyword中,查询字符串是?q=keyword,表示一个名为q的参数,其值为keyword。
片段(可选):
片段标识符以井号#开始,后面跟着一个标记,通常用于指向网页上的特定部分。
例如,在http://www.example.com/index.html#section1中,#section1是片段标识符,它指向index.html页面上ID为section1的部分。
综合起来,一个完整的URL可能看起来像这样:https://www.example.com:443/path/to/page.html?query=string#se...。在这个例子中,https://是协议,www.example.com是域名,:443是端口号,/path/to/page.html是路径,?query=string是查询字符串,#section1是片段标识符。

说说TCP传输的三次握手四次挥手策略

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送 后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包

断开一个TCP连接则需要“四次握手”:

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手

TCP和UDP的区别

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境

HTTP和HTTPS

HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS
默认HTTP的端口号为80,HTTPS的端口号为443

为什么HTTPS安全

因为网络请求需要中间有很多的服务器路由器的转发。中间的节点都可能篡改信息,而如果使用HTTPS,密钥在你和终点站才有。https之所以比http安全,是因为他利用ssl/tls协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等。保障了传输过程的安全性

GET和POST的区别,何时使用POST?

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制。
GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

  1. 代码分割和懒加载
    使用异步组件:“Vue应用的一个关键优化策略是代码分割和懒加载。使用Vue的异步组件和Webpack的动态import()语法,可以将代码分割成更小的块,这些块只有在需要时才加载。”
    路由级别的懒加载:“特别是对于路由,我会在Vue Router中使用懒加载,确保每个页面的代码只在访问该页面时才加载。”
  2. 移除未使用的代码(Tree Shaking)
    利用Webpack:“确保Webpack配置正确,以便于进行Tree Shaking,这是一个移除未使用代码(如未使用的函数、组件)的过程,有助于减少最终包的大小。”
  3. 压缩和优化资源
    资源压缩:“使用压缩工具来减小JavaScript、CSS和HTML文件的体积。例如,使用UglifyJS插件或Terser来压缩JS文件。”
    图片和字体优化:“对于图片和字体等静态资源,使用适当的加载策略和压缩技术,比如使用图片压缩工具和选择正确的图片格式。”
  4. 使用外部CDN
    外部库和CDN:“对于常见的库和框架,比如Vue、Vuex或者第三方库,考虑从外部CDN加载,而不是打包进应用中。”
  5. 分析和监控打包体积
    构建分析:“使用Webpack Bundle Analyzer等工具来分析打包后的文件,识别体积大的部分和优化机会。”
  6. 避免重复打包
    优化依赖:“确保没有重复打包相同的依赖库,特别是当使用多个包含相同依赖的插件时。”
  7. 环境变量和生产模式
    生产模式构建:“确保在生产环境构建中使用Vue的生产模式,这将禁用开发阶段的警告和提示,减少不必要的代码。”
  8. 结尾
    总结:“通过这些策略,我们可以显著减小Vue应用的打包体积,提高应用的性能和响应速度。您是否有特定的优化策略或工具喜欢在项目中使用?”

    通过这种回答,你不仅展示了你对Vue打包体积优化的深入了解,还表明了你知道如何在实际项目中应用这些策略。这样全面且具体的回答会在面试中给你加分。


大胖
26 声望0 粉丝

« 上一篇
vue面试
下一篇 »
es6 promise面试