网络在生活中无处不在,购物、看书、浏览新闻、聊天,我们几乎把大部分的时间都用在了网络上。那么,当你输入一个网址开始浏览的时候,你有想过这个url请求的处理过程么?
工作之中,无论是在做web安全,还是做网站性能,对于上面的问题,都要有一个基本的认识。本书的试读章节详细的介绍了这个web请求过程。
当一个用户在浏览器里输入一个个URL 时,将会发生很多操作。首先它会请求DNS 把这个域名解析成对应的IP 地址,然后根据这个IP 地址在互联网上找到对应的服务器,向这个服务器发起一个get 请求,由这个服务器决定返回默认的数据资源给访问的用户。在服务器端实际上还有很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这需要一个负载均衡设备来平均分配所有用户的请求;还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS 或者图片)时又会发起另外的HTTP 请求,而这些请求很可能会在CDN 上,那么CDN 服务器又会处理这个用户的请求,大体上一个用户请求会涉及这么多的操作。每一个细节都会影响这个请求最终是否会成功。
所以尽管我们看到的是发出一个url,最终返回一个网页,但是中间的过程却是很复杂的,涉及着http协议、dns解析、cdn工作等一系列服务单元和处理。
我对于web安全方面关注的更多一些,所以我在这就谈谈http协议的相关内容。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
为了更好的了解http协议,我们可以用telnet并打开回显功能,来观察http协议的通讯过程。
比如说我们举个简单例子:
1、打开telnet
1.1 打开telnet
运行-->cmd-->telnet
1.2 打开telnet回显功能
set localecho
2、连接服务器并发送请求
2.1 open
www.guet.edu.cn
80 //注意端口号不能省略
HEAD /index.asp HTTP/1.0
Host:www.guet.edu.cn
/*我们可以变换请求方法,请求桂林电子主页内容,输入消息如下*/
open
www.guet.edu.cn
80
GET /index.asp HTTP/1.0 //请求资源的内容
Host:www.guet.edu.cn
2.2 open
www.sina.com.cn
80 //在命令提示符号下直接输入telnet
www.sina.com.cn
80
HEAD /index.asp HTTP/1.0
Host:www.sina.com.cn
3 实验结果:
3.1 请求信息2.1得到的响应是:
HTTP/1.1 200 OK //请求成功
Server: Microsoft-IIS/5.0 //web服务器
Date: Thu,08 Mar 200707:17:51 GMT
Connection: Keep-Alive
Content-Length: 23330
Content-Type: text/html
Expries: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private
//资源内容省略
3.2 请求信息2.2得到的响应是:
HTTP/1.0 404 Not Found //请求失败
Date: Thu, 08 Mar 2007 07:50:50 GMT
Server: Apache/2.0.54 <Unix>
Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
ETag: "6277a-415-e7c76980"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Vary: Accept-Encoding
Content-Type: text/html
X-Cache: MISS from zjm152-78.sina.com.cn
Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
X-Cache: MISS from th-143.sina.com.cn
Connection: close
失去了跟主机的连接
上面就是http协议通讯的过程,我们可以看到相应的一些报头信息,从而更清楚明白的了解http协议。
除去http协议,我最感兴趣的便是负载均衡工作,因为在工作中网站流量过大时,必然需要上CDN(虽然成本略高~呵呵),但其实我对其工作原理并不甚了解。读完本章了解到CDN的工作原理如下:
一个用户访问某个静态文件(如CSS 文件),这个静态文件的域名假如是cdn.taobao.com,那么首先要向Local DNS 服务器发起请求,一般经过迭代解析后回到这个域名的注册服务器去解析,一般每个公司都会有一个DNS 解析服务器。这时这个DNS 解析服务器通常会把它重新CNAME 解析到另外一个域名,而这个域名最终会被指向CDN 全局中的DNS 负载均衡服务器,再由这个GTM 来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN 节点。
拿到 DNS 解析结果,用户就直接去这个CDN 节点访问这个静态文件了,如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。
这本书原理讲的非常清晰透彻,也期待本书中其他更为详尽的技术框架原理介绍,相信对于每个人都能学到很多知识。