因为最近在面试,所以会更新一些跟面试有关的文章,一点点的去更新,也帮助自己更深层更全面的去理解这些东西吧。
在面试中,最经典的一道题就是: “从输入一个新的网址到用户完全看到页面,这期间都发生了什么?”
至少在我面试的几家当中,有四家都问我这个问题,当然如果你就单纯的以为都是同一个问题的话,那就想的太简单了..至少在我面试的这四家公司他们都是针对我的回答找了四个不同的点来问我.. 那么我也就不卖关子了,先上正确答案。
1、输入一个网址:www.jianshu.com
2、浏览器查找域名的IP地址
3、浏览器给web服务器发送一个http请求
4、服务器给浏览器响应一个301永久重定向:会访问“http://www.jianshu.com/” 而非“http://jianshu.com/”
5、浏览器跟踪重定向地址
6、服务器处理请求,并返回一个HTML响应
7、浏览器开始显示HTML
当然,这只是一个大概的流程,其中的细枝末节你可以在大致说完这过程之后再具体的说,比如:
1、DNS:是一个域名系统,域名是互联网上的身份标识,是不可重复的唯一标识资源,DNS解析是互联网绝大多数应用的实际寻址方式
在面试中他问到我这样一个问题:DNS解析发生在什么时候?
当用户输入域名并敲回车后,系统就会调用DNS client,寻找到用户配置或者自动分配的DNS IP,之后就开始整个的解析过程
2、返回一个HTML文件的时候你要考虑这个文件有没有缓存过,缓存过有没有变化。
一般静态文件会允许浏览器对其进行缓存,有的文件可能会不需要与服务器通讯,而从缓存中直接读取。
缓存有什么好处?这个就比较简单了,但是也会被问到,你就说 减少相应的延迟,减少网络带宽消耗
这里也谈到了很多专业的名词,我这里给大家简单介绍一下
1、Exprires: Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。
2、Cache-Control: Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。
只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
3、Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。
Last-Modified:标示这个响应资源的最后修改时间。
If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。
4、Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。
Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。
refer:
1、当你输入一个网址,实际会发生什么?
http://blog.jobbole.com/33951/
2、浏览器 HTTP 协议缓存机制详解
https://my.oschina.net/leejun2005/blog/369148