本篇体验当在浏览器地址栏中输入网址后发生的事情。参考了韩星和Igor Ostrovsky的博文。
一切从输入网址/域名开始:
1、浏览器查找域名对应的IP地址
实际上是查找DNS(Domain Name System的缩写,存储域名和IP地址映射的分布式数据库)的过程。查找DNS缓存的顺序为:
1、在浏览器中查找DNS缓存:不同的浏览器缓存DNS的时间是不一样的,一般在1-30分钟时间。比如FireFox的默认DNS缓存时间是1分钟。
2、在系统中查找DNS缓存。
3、在路由器中查找DNS缓存。
4、在ISP(网路提供商)的DNS缓存服务器中查找。
5、如果以上都没有,ISP的DNS服务器开车从root域名服务器开始递归,即从顶级域名开始,再到二级域名、三级域名。
如图:
另外:
● 一个域名可能对应多个不同的IP,这个是由"Round-robin DNS"解决方案提供实现。
● 针对来自不同客户端的IP请求,"负载均衡器Load-balancer"可以把不同的IP请求动态分配到不到的服务器。
● 针对来自不同区域客户端的IP请求,"Geographic DNS"把一个域名与不同的IP映射起来,根据域名的区域,返回对应的IP。
2、浏览器发送HTTP请求到服务器
User-Agent:描述了浏览器信息。
Accept:能接收的返回类型。
Accept-Encoding:能接收的返回的编码类型。
Accept-Language:能接收的返回语言。
Connection: 要求服务端TCP打开以保持通讯。
Cookie:针对该域名的cookie,以键值对存放,包括登录用户名、服务器分配给客户端的号码等。
请求的类型:
1、GET请求,把请求参数放在URL地址中:http://baidu.com/some.aspx?id=1。
2、POST请求,用于提交表单数据,参数放在请求主体中。
3、服务器返回永久重定向
在浏览器地址栏输入:http://facebook.com/
可见:
请求的是:http://facebook.com/
返回的是:http://www.facebook.com/
Status Code是:301 Moved Permanently
重定向后再请求,返回Status Code:200:
为什么需要重定向?
处于对搜索引擎和缓存友好的考虑。
有趣的是:
当输入"http://baidu.com/"时
Request URL自动变成了:http://www.baidu.com, 也没有出现重定向。
4、服务器处理请求
服务器软件(比如IIS,Apache)工作原理:
→接收HTTP请求。
→搜寻哪个handler处理请求。
什么是handler?
读取请求中的一切信息,比如参数、缓存,再转换成HTML相应。
5、服务器返回HTML响应
6、浏览器渲染HTML
7、浏览器发送Ajax请求
发送GET或POST请求到服务器,返回jsong, string, html, xml等。