2道面试题:输入URL按回车&HTTP2

经过几轮面试,我发现真正那种问答的技术面,写一堆项目真不如去刷技术文章做用大,所以刷了一段时间的博客和掘金,整理下曾经被问到的2道面试题javascript

  • 从浏览器输入URL按回车到页面显示都发生了什么
  • 说说你了解的HTTP/2

笔者才疏学浅,若有错误欢迎各位dalao指正。java

从浏览器输入URL按回车到页面显示都发生了什么

  1. 浏览器根据URL进行DNS查询
    • 首先从DNS缓存中查询
    • 若未在缓存中找到,则不停的向上一级级请求DNS服务器
  2. 取得IP地址,创建TCP链接
  3. 构造HTTP请求报
    • 添加一些HTTP首部
    • 根据同源政策添加cookie
  4. 在TCP链接上发送HTTP报文,等待响应
  5. 服务器处理HTTP请求报文,返回响应HTTP响应报文
  6. 浏览器处理服务器返回的HTTP响应报文,若为HTML则渲染页面,不包括脚本的简单渲染流程以下
    1. 解析DOM、CSSOM
    2. 根据DOM、CSSOM计算render tree
    3. 根据render tree进行layout
    4. paint,至此,用户能够看到页面了

说说你了解的HTTP/2

讲真,看了那么多关于HTTP/2的文章,虽然没用过可是也能感受出HTTP/2与HTTP/1.1的差距不是一点半点git

这里整理的是“具体来讲,对比HTTP/1.1,HTTP/2有哪些不一样”github

  • 在浏览器端,HTTP/2仅能在TLS下运行,也就是HTTPS。这不是由于HTTP/2标准强制要求,而是全球两大浏览器领导者 —— Firefox和Chrome都明确地表示,他们只会实现基于TLS的HTTP/2
  • HTTP/2取消了大量头字段,而且取消了小版本号。也就是说服务器和客户端都必须肯定本身是否完整兼容http2或者完全不兼容
  • 最重要的一点,HTTP/2再也不是一个基于文本的协议,经过新增的二进制分帧层变成了一个二进制协议,这意味着:
    • HTTP/2使用二进制帧进行数据交换。HTTP/2规范中一共定义了10种帧,其中最基础的两种分别对应于HTTP/1.1的DATA和HEADERS帧
    • HTTP/2能够对压缩头信息进行压缩了。反正是二进制帧
  • 利用帧,HTTP/2能够在单个TCP链接上高效传输全部资源
    • 经过在单个链接上创建多个流,实现流的多路复用
    • 流能够指派一个优先级,也能够为流创建依赖关系。这样能够避免“浏览器明明在等关键的CSS和JS,服务器却还在发图片”
    • 彻底避免线头阻塞
  • 服务器能够利用RST_STREAM帧随时中断某个chunk的发送
  • 服务器能够主动向客户端推送资源让客户端缓存。固然,客户端可使用RST_STREAM帧拒绝掉服务器的“好意”
  • HTTP/2的流能够进行流量控制,经过公示流量窗口来限制另外一端发送数据

若是让你用Js写个爬虫,你怎么写?

分an享li下本身用纯客户端javascript写的pixiv.net爬虫,在学习ES6或对js爬虫感兴趣的小伙伴欢迎Star一波哟~~面试

参考文献

相关文章
相关标签/搜索