浅谈web请求过程--《深入分析Java_Web技术内幕》试读

阅读更多

       网络在生活中无处不在,购物、看书、浏览新闻、聊天,我们几乎把大部分的时间都用在了网络上。那么,当你输入一个网址开始浏览的时候,你有想过这个url请求的处理过程么?

 

       工作之中,无论是在做web安全,还是做网站性能,对于上面的问题,都要有一个基本的认识。本书的试读章节详细的介绍了这个web请求过程。

 

       当一个用户在浏览器里输入一个个URL 时,将会发生很多操作。首先它会请求DNS 把这个域名解析成对应的IP 地址,然后根据这个IP 地址在互联网上找到对应的服务器,向这个服务器发起一个get 请求,由这个服务器决定返回默认的数据资源给访问的用户。在服务器端实际上还有很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这需要一个负载均衡设备来平均分配所有用户的请求;还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSSJS 或者图片)时又会发起另外的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

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

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 节点访问这个静态文件了,如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

 

 

这本书原理讲的非常清晰透彻,也期待本书中其他更为详尽的技术框架原理介绍,相信对于每个人都能学到很多知识。

你可能感兴趣的:(浅谈web请求过程--《深入分析Java_Web技术内幕》试读)