好久好久没写博客了,但在这期间参与了多场面试,最后成功进入宇宙厂,现在来汇总一下面试期间遇到的各种问题(文章写于刚入职时,上传时已在职6个月)

跨域的options请求问题

这个问题是笔者在写新人项目的时候,遇到跨域问题的时候问到的
首先我们要知道什么是options请求,options请求也可以叫预检请求,是浏览器在发送复杂请求时,主动发起的请求,他发生在发起复杂请求之前,那么什么是复杂请求?

简单请求

  • 请求方式为GET,HEAD,POST的请求
  • 认为设置规范集合之内的首部字段,如Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width
  • Content-Type 的值仅限于下列三者之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain
  • 请求的xml对象没有任何事件监听器
  • 请求中没有使用ReadableStream对象

复杂请求

  • PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH;
  • 人为设置了以下集合之外首部字段,即简单请求外的字段;
  • Content-Type 的值不属于下列之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain。
    那么对于options请求,最在意的是什么?
    请求头 Request Header:
字段 作用
Access-Control-Request-Method 实际请求的方法
Access-Control-Request-Header 实际请求将携带的自定义请求头字段

响应头 Response Header:

字段 作用
Access-Control-Allow-Methods 表明服务器允许的方法
Access-Control-Allow-Origin 允许跨域请求的域名,所有的为*
Access-Control-Allow-Headers 服务器接受的请求头字段
Access-Control-Max-Age 制定预检请求能缓存多久

options的请求目的是为了判断资源是否支持跨域,所以我们可以为其添加缓存时间,一般多一点没什么问题

如果jsonp支持跨域,那么为什么不都用jsonp,jsonp的本质是什么

jsonp请求的本质是利用了“Ajax请求会受到同源策略限制,而script标签不会”,所以他的本质是绕过了同源策略来发起请求获取数据
jsonp只支持get请求,并且jsonp存在xss漏洞

script标签的async和defer分别有什么作用

这里我们先拓展一下什么是同步加载,异步加载,延迟加载

  • 加载和解析 顺序: 浏览器在 解析 HTML 页面代码时, 是 从上到下 依次 加载, 解析、渲染
  • 同步加载完成后, 立刻执行脚本(脚本分为加载和执行两个阶段), 直到脚本加载和执行完成,才能进行页面的解析/渲染/显示。
  • 也就是说,如果我的script执行时间很长,会导致浏览器停止渲染,页面阻塞
  • 我们可以写一个代码来测试

async异步加载

  • async加载是异步的,而执行是同步的
  • 其在下载完毕之后会立刻执行同步代码(可能是页面解析之前,也可能是页面解析之后)
  • 这就意味着,如果你的加载非常快,可能在页面解析时打断页面解析

defer延迟加载

  • defer的加载是异步的,执行是延迟执行
  • 延迟执行是在页面完成解析后再执行
  • 这意味着,加载和执行都不会打断页面的解析

参考文献:【深入理解 script 标签的 async,defer 属性(同步加载,异步加载,延迟执行)】(至于为什么没连接,因为是byteTech的文章)

nodeType都有什么值

这个我甚至没听说过,当时也没回答出来(非当前公司),好像是一个只读属性,可以知道当前对象是什么节点
例如元素,文本,注释

nodeType值 表示
1 元素
2 属性
3 文本
8 注释
9 document

这里留一个地址
https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType

Q.E.D.