2586 字
13 分钟
面试题

*说一下http和https#

(1) http和https的概念:

http:超文本传输协议,是互联网上使用广泛的一种网络协议,是一种客户端和服务器端请求和应答的标准(TCP的标准),是用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使得网络传输减少

https:是http的安全版,http下加入了SSL层,HTTPS的安全基础是SSL,因此加密详细内容就需要SSL,https的作用就是建立一条安全的通道,来确保传输数据的安全性,简单来说https协议就是由http和ssl协议构建的可进行加密传输和身份确认的网络协议。

(2) http和https区别:

  • https需要ca证书,费用高
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  • 使用不同链接方式:端口不同,http是80,https是443
  • http连接简单,无状态的;https是由SSL+http协议构建的数据加密传输身份认证的网络协议。

(3) https协议的优点

  • 确保数据的传输安全性和正确发送到对应的客户机和服务器。
  • 加密传输和身份认证使得其在数据传输的过程中不容易被窃取改变,保证数据的完整性

(4) https协议的缺点

  • 握手阶段比较费时
  • 缓存效率不高,增加数据开销
  • SLL协议要钱
  • SLL需要绑定IP,一个IP不能绑定多个域名

*TCP三次握手,一句话概括#

客户端和服务端都需要直到各自可收发,因此需要三次握手。

简化三次握手:

*[Image missing: 42496289-1c6d668a-8458-11e8-98b3-65db50f64d48.png]*

从图片可以得到三次握手可以简化为:C发起请求连接S确认,也发起连接C确认我们再看看每次握手的作用:第一次握手:S只可以确认 自己可以接受C发送的报文段,第二次握手:C可以确认 S收到了自己发送的报文段,并且可以确认 自己可以接受S发送的报文段第三次握手:S可以确认 C收到了自己发送的报文段。

TCP和UDP的区别#

  1. TCP是面向连接的,UDP是无连接的,就是发送连接之前不需要先建立连接
  2. TCP提供可靠的服务。通过TCP传输的数据,无差错,不丢失,不重复,按序到达。UDP尽最大努力交付,不保证可靠的交付。因为TCP可靠且面向连接,不会丢失数据因此适合大数据量的交换。
  3. TCP是面向字节流,UDP面向报文,如果网络故障出现拥塞不会使得发送速率降低,会出现丢包。
  4. TCP只能1对1,UDP能够1对1,1对多
  5. TCP首部较大的字节为20字节,UDP只有8字节
  6. TCP是面向连接的可靠性传输,而UDP是不可靠的

一个图片url访问后直接下载怎样实现?#

参考回答:#

请求的返回头里面,用于浏览器解析的重要参数就是OSS的API文档里面的返回http头,决定用户下载行为的参数。

下载的情况下:

\1. x-oss-object-type:

Normal

\2. x-oss-request-id:

598D5ED34F29D01FE2925F41

\3. x-oss-storage-class:

Standard

http返回的状态码#

HTTP返回的状态码

http常用请求头#

HTTP常用请求头

几个很实用的BOM属性对象方法?#

说一下http2.0#

http2.0是基于http1.0之后的首次更新

  • **提升了访问的速率:**相比较于HTTP1.0请求资源所需要的时间更少,访问的速度更快
  • **允许多路复用:**多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息
  • **二进制分帧:**在http2.0会将所有的传输信息分割为更小的信息或者帧,并且对他们进行二进制编码的首部压缩

*在地址栏里输入一个URL,到这个页面呈现出来,中间会发生什么?#

  1. 首先需要找到这个URL域名的服务器IP,浏览器首先会寻找缓存,查看缓存中是否有记录(浏览器缓存 -> 系统缓存 -> 路由器缓存 ),缓存中没则去查找系统的hosts文件记录,如果再没有就去查询DNS服务器。

  2. 浏览器根据得到的IP以及相应的端口号,构建一个HTTP请求,并将这个HTTP请求封装在一个TCP包中,发送给服务器(依次经过传输层,网络层,数据链路层,物理层,服务器)

  3. 服务器解析请求,返回相应的HTML给浏览器,浏览器根据HTML构建DOM树(在dom树的构建过程中如果遇到JS脚本和外部JS连接,则会停止构建DOM树来执行和下载相应的代码,造成阻塞)。

  4. 之后根据外部样式,内部样式,内联样式去构建一个CSS对象模型树叫CSSOM树,构建完成之后和DOM树合并为渲染树( 这里主要做的是排除非视觉节点,比如script,meta标签和排除display为none的节点 )

  5. 进行布局,确定各个元素位置和尺寸

  6. 渲染页面。( 因为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 )

    浏览器缓存可以查看这篇文章:深入理解浏览器的缓存机制

    渲染机制可以看:深入浅出浏览器渲染原理

GET和POST的区别#

参考回答:#

  • get参数通过url传递,post放在request body中。

  • get请求在url中传递的参数是有长度限制的,而post没有。

  • get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。

  • get请求只能进行url编码,而post支持多种编码方式

  • get请求会浏览器主动cache,而post支持多种编码方式。

  • get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

  • GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

  • GET产生一个TCP数据包;POST产生两个TCP数据包。

*Cookie、sessionStorage、localStorage的区别#

共同点:都是保存在浏览器端,并且是同源的

不同点:

  • 存储环境和大小: cookie数据始终在同源的HTTP请求中携带(即便是不需要),即cookie在浏览器和服务器之间来回传递,cookie的数据还有路径的概念,可以限制cookie只属于某个路劲下,存储大小只有4k左右;sessionStorage 和localStorage不会自动把数据发送给服务器,仅在本地缓存,数据量都比cookie来的要大的多

  • 数据持久性不同: sessionStorage仅在当前浏览器窗口关闭之前有效果,自然不可能持续保存;localstorage始终有效,窗口或者浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即窗口或浏览器关闭。 (key:本身就是一个回话过程,关闭浏览器后消失,session为一个回话,当页面不同即使是同一页面打开两次,也被视为同一次回话)

  • 作用域不同(共享范围):sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面 ;localStorage在所有的同源窗口中都是共享的;cookie也是在所有的同源窗口中都是共享的。( 同源窗口都会共享,并且不会失效,不管窗口或者浏览器关闭与否都会始终生效 )

cookie的作用#

  • 保存用户的登录状态: 例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个 月、一年等。
  • 跟踪用户的行为: 例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便定制页面。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。
面试题
https://nollieleo.github.io/posts/面试题/
作者
翁先森
发布于
2020-03-23
许可协议
CC BY-NC-SA 4.0