http相关面试题

72 阅读2分钟

1.封装ajax步骤

1.创建xhr对象
2.初始化一个异步请求
3.监听onreadystatechange事件,等到xhr的readyState等于4的时候,并且xhr.status等于200,就是ajax请求返回的结果
这里有两种方式封装返回值,一个是用回调函数,另外一个是用promise
function ajax(url,cb) {
  return new Promise((resolve, reject) => {
    // 创建一个XHR对象
    const xhr = new XMLHttpRequest()
    // 初始化一个异步请求(还没发请求)
    xhr.open('GET', url, true)
    // 绑定状态改变的监听
    xhr.onreadystatechange = function () { 
        /*
        ajax引擎得到响应数据后
        	将xhr的readyState属性指定为4
        	将响应数据保存在response / responseText属性上
        	调用此回调函数
        */
        
      // 如果状态值不为4, 直接结束(请求还没有结束)
      if (xhr.readyState !== 4) {
        return
      }
      // 如果响应码在200~~299之间, 说明请求都是成功的
      if (xhr.status>=200 && xhr.status<=299) {
        // 指定promise成功及结果值
        // 此处也可以用回调函数 
        // cb(JSON.parse(xhr.responseText))
        resolve(JSON.parse(xhr.responseText)) // 属性值哪来的?
      } else { // 请求失败了
        // 指定promise失败及结果值
        reject(new Error('request error staus '+ request.status))
      }
    }
    xhr.send()
  })
}

2.dom事件

// 事件传播流程
1.捕获阶段(由外到内) 2.目标事件发生阶段 3.冒泡事件(由内到外,冒泡到顶级元素)
// 基于事件冒泡所以有了事件委托,将事件绑定到父元素上

3.跨域是浏览器限制

// 跨域到底是什么:浏览器要求网页和server必须同源,
比如,浏览器地址:
目标地址: <http://www.haha.com:8081/xxx>
目标请求地址:<http://www.haha.com:8080/yyy>
加载image/link/script不受同源策略限制
// JSONP原理
用js新建一个script标签,然后绑定上src属性带上请求参数
const script = document.createElement('script');  
// 设置script元素的src属性,其中包含了要调用的函数名和数据URL  
script.src = 'http://localhost:3000/data?callback=handleResponse';  
// 将script元素添加到DOM中,这会触发请求  
document.body.appendChild(script);  
// 只能用get请求
// 服务端cors原理
// 开发阶段node的代理服务器
// 上线的话nginx反向代理

从输入url到渲染出页面的过程

// dns解析
// tcp链接
// 发请求,接受服务器的响应
// 解析数据,显示页面
// 断开链接

理解重排和重绘

// 更新dom活style会导致页面发生回流(重绘)
// resize事件,修改元素,修改style,字体大小

//修改颜色,背景色,visiblity,重绘

页面刷新与缓存, 常规刷新不影响,强制刷新=》不适用缓存

区别cookie与session

  • cookie保存在浏览器端(前台可以操作)
  • session保存在服务器端(前台不能操作)
  • session依赖于cookie(session的id以cookie的形式保存在浏览器端)
  • 如何实现关闭浏览再打开访问, 还是同一个会话(能得到前面的session对象)?
  • 后台将保存session id的cookie指定为持久化cookie setMaxAge(1000* 60*60) 服务器端指定