程序猿---Http与Ajax面试题

106 阅读7分钟

Http 相关的面试题

1,Http的状态码

200 成功

300 重定向,301永久定向,302临时定向

400 参数错误,401 token过期造成的身份认证失败,403 禁止访问没有权限的页面,比如普通用户去访问管理员,404 页面找不到,405,请求方式错误,比如需要get请求写了post请求

500 一般是后端,但是参数错误的话,有可能回报500问题

2,HTTP和HTTPS的区别

http协议传输的数据都是未加密的,是明文的,因此使用http协议传输隐私的信息是非常不安全的,为了保证这些隐私的数据能够加密传输就诞生了https ,https是由ssl和http协议构建的,可以进行加密传输,身份认证的网络协议,比http更加安全。

(1)     HTTPS的两个作用:一是建立一个信息安全通道,用来记录数据传输的安全性。二是确认网络的真实性

(2)     区别:1,http不要证书,https需要申请ca证书,而一般免费的证书很少,因此需要费用成本。2,http下的信息是明文传输的,而https是由ssl和http协议构建的可进行加密传输的身份认证的网络协议,防止网络内容被窃取,比http更安全。3,http连接方式的端口号是80,https是443端口

 

3,cookie   sessionStorage localStorage的区别

相同点:都是存储在浏览器

不同点:(1)cookie数据大小不能超过4kb, sessionStorage和localStorage的存储可以达到5M左右根据不同浏览器的存储空间,(2)cookie在设置的过期时间内一直有效,localStorage永久存储浏览器关闭数据也不会丢失,除非主动删除数据。sessionStorage数据在当前浏览器窗口关闭后自动删除。(3)cookie的数据会自动传递到服务器,localStorage和sessionStorage数据保存在本地不参与服务器交互。

 

4,从URL到页面的加载过程

   用户输入网址--DNS解析--TCP 链接--发起HTTP请求 ---处理请求---浏览器渲染---TCP 断开链接

(1)用户输入网址  通过DNS解析 url 中域名对应的服务器主机,

(2)与服务器主机三次握手 建立 TCP连接

(3)发送HTTP 请求 ,获取服务器返回的数据

(4)浏览器解析HTML css  和  js  等前端文件  然后渲染页面

详细说说:

      在浏览器的地址栏上输入地址,我们在浏览器实际上还不能找到服务器的地址,这些由字母组成的url 是方便我们记忆而已。实际上每个网址都会有相应的ip 地址,而 ip 地址是由数字组成,不方便人们记忆,所以这里我们需要 DNS  解析 把URL  地址解析为 ip地址 ,这个过程就叫 DNS 解析,其实DNS 就是一个数据库,这个数据里面记录着很多   url  和对应 的 ip  地址。这样就可以根据  DNS查到对应的 IP  地址,有了  IP地址 我们就可以在互联网里面找到指定的服务器了。虽然知道具体的 url  地址,但是在正式发送之前还得建立  TCP 连接。

为什么建立  TCP 连接?

       建立  TCP 连接就是要在发送数据之前建立通道,客户端和服务端建立通道,就可以在这个通道里面发送数据了,大家都在这个通道发送数据这样数据就不容易发生错乱。于是就有了建立通道前的三次握手(1)客户端发送SYN 数据包,来表示请求连接。(2)服务器响应 SYN  和  ACK 的数据包来表示同意建立连接(3)客户端再次发送 ACK数据包来表示成功连接

       当我们和服务器建立起连接以后,浏览器是会发送 HTTP 请求报文给服务器,报文格式有 请求行  请求头部  空行  请求数据。请求行里面有:请求方法,请求地址和HTTP协议版本组成。 请求头部其实就是一些关于浏览器的信息,由键值对组成,一行一对。直到遇到空行就表示下面没有请求头部了,最后就是请求数据。

      当服务器收到HTTP 报文以后,服务器会处理请求报文,并响应。响应报文格式有:状态行,响应头部,空行和响应数据组成。状态行最重要的就是那几位数字,比如常见的404  NotFound,表示资源没找到的错误,另外常见200表示请求成功。响应头部 由键值对组成,一行一对。直到遇到空行就表示下面没有响应头部了,最后是响应数据。

    浏览器在接收服务器的响应之后,页面就会开始进行渲染了。也就是在解析接收到的Html     cs s   和  js  等文件。有了这些前端文件以后,用户就可以在前端看到页面内容,也就是在浏览器上看到内容了。这就是在浏览器地址栏输入URL发生的事情了。

Ajax 相关的面试题

1,Promise有哪些方法?和async,await的区别

(1)什么是异步回调地狱? 当一个函数作为参数传入另一个函数中,并且他不会立即执行,只有当满足一定条件后该函数才可以执行,这种函数就称为回调函数。回调地狱就是在此基础上代码一层一层的嵌套,代码的可读性非常差。

(2)Promise的诞生是可以解决异步回调地狱的问题,promise有三种状态:pending   rurfiled  rejected  当把一件事情交给promise时,它的状态就是pending 任务完成了状态就变成rurfiled  ,没有完成失败就变成rejected  ,promise的状态一旦执行就无法被改变。

(3)new  promise()会有两个回调函数resolve  reject的方法,promise的resolve可以快速创建一个成功的promise,reject可以创建一共失败的promise.

Promise.all他会等到所有的promise 都执行完成才会得到全部结果,如果过程中有一个失败就会进入catch。

promise 的 race  方法 比赛  只要有个任务先完成,就会进入then, then中的结果就是率先完成成功的结果。

虽然promise 的 then  解决了回调地狱的问题 但是代码冗余,阅读性差  不易理解

(4)所以推出了async和awit 用来简化promise.then 的链式调用问题。题。async 和 await 是Generator 的语法糖,返回的是一个promise 对象。如果在项目中函数方法前加了async,这个函数的返回值是promise对象,await是等待的意思,像一些请求加了await的话它只会获取请求成功,如果不成功await下面的代码不会执行,如果想捕获错误的话可以利用try catch 捕获,catch可以捕获promise失败的状态。

(5)总结:当我们写代码遇到异步回调时,我们想让异步代码按照我们想要的顺序执行,如果按照传统的嵌套方式,就会出现回调地狱,这样的代码不利于维护。我们可以通过promise对象进行链式编程来解决。这样尽管可以解决问题,代码冗余,阅读性非常差,ES6 给我们推出了更加简化的方法async和await ,可以是异步编程看起来更像同步代码。