一. 从输入网址到看到网页内容的这个过程中到底发生了什么

不谈浏览器解析文件那部分哦。

过程如下:

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中查找这些域名,发送请求,重定向等等…