这其实是一个经典的面试题了,都可以自由发挥各个方面,说出自己的理解,而且涉及的面也是巨多,就看怎么看待了。
URL,英文是Uniform / Universal Resource Locator,中文的翻译就是统一资源定位符,俗称网页地址,简短的说法是网址,用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
它从左到右由如下部分构成:
1. 传送协议protocol:最常用的是HTTP协议(超文本传输协议),它也是目前WWW中应用最广的协议;其他也还有ftp、file、https、、mailto、git等,当然也有自定义的协议(私有协议),例如tencent等;
2. 主机host:通常为域名或者IP地址,当然在其前面还可以有连接到服务器所需的用户名和密码;
3. 端口号port:以数字形式表示,每种协议都有自己默认的端口号,例如http协议的默认端口号就是80,https的默认端口号就是443等;
4. 路径path:以“/”字元区别路径中的每一个目录名称,一般表示的就是主机上的一个目录或文件地址;
5. 查询query:以“?”字元为起点,每个参数以“&”隔开,再以“=”分开参数名称与其对应的值;
6. 片段fragment:也就是在浏览器环境下location的hash值,用于指定网络资源中的片断,一般用于定位到某个位置。
介绍了URL,下边直说最简单的通过浏览器发起HTTP请求资源过程,没有代理,通过域名访问的情况,将要发生如下事情:
1. 浏览器查询缓存,如果缓存存在跳到第9步;
2. 浏览器询问操作系统服务器的IP地址;
3. 操作系统做DNS查询,返回IP地址给浏览器;
4. 浏览器打开对服务器的TCP连接;
5. 浏览器通过TCP连接发送HTTP请求;
6. 浏览器接收HTTP响应并且可能关掉TCP连接,或者是重新使用连接处理新请求(也就是keepalive);
7. 浏览器检查HTTP响应是否为一个重定向(3xx 结果状态码 ),一个验证请求(401),错误(4xx 5xx)等等,这些都是不同响应的正常处理(2xx);
8. 如果响应可缓存,将存入缓存;
9. 浏览器解码响应(例如:如果它是gziped压缩);
10. 浏览器决定如何处理这些响应(例如,它是HTML页面,一张图片,一段音乐);
11. 浏览器展现响应,对未知类型还会弹出下载对话框(现在一般不会弹出了,用户对浏览器设置而定)。