一. 从输入网址到看到网页内容的这个过程中到底发生了什么
不谈浏览器解析文件那部分哦。
过程如下:
1. 输入网址
2. 浏览器查找域名的IP地址
域名解析过程如下:
1)浏览器缓存——浏览器会缓存DNS记录一段时间。有趣的是,操作系统并不会告诉浏览器要存多久,所以浏览器会存一个固定的时间,大约2~30分钟。
2)系统缓存——如果浏览器缓存中没有要找的记录,浏览器会做一个系统调用(Windows中是gethostbyname)。操作系统有自己的缓存记录。
3)路由缓存——请求会发向路由器,路由器一般会有自己的缓存记录。
4)ISP DNS缓存——下一个被查询的是ISP的域名服务器缓存记录。在这里一般都能找到需要的缓存记录。
3. 浏览器给Web服务器发送一个http请求
下面是在浏览器的调试窗口中截取的CSDN个人主页的http请求头部
4. 网站服务的永久重定向响应
服务器给浏览器响应一个301永久重定向响应,为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像http://www.igoro.com/ 和http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
5. 浏览器跟踪重定向地址
现在浏览器知道了要访问的正确地址,它会发送另一个获取请求。
6. 服务器 “请求” 处理
服务器收到了GET请求,处理请求,并做出响应。
7. 服务器返回一个HTML响应
下面是截取的个人主页的http响应头部
8. 浏览器开始显示HTML
9. 浏览器发送请求,以获取嵌入在HTML中的对象
在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。这些文件就包括CSS/JS/图片等资源,这些资源的地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…