网络在生活中无处不在,购物、看书、浏览新闻、聊天,我们几乎把大部分的时间都用在了网络上。那么,当你输入一个网址开始浏览的时候,你有想过这个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 节点访问这个静态文件了,如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。
这本书原理讲的非常清晰透彻,也期待本书中其他更为详尽的技术框架原理介绍,相信对于每个人都能学到很多知识。
相关推荐
java web 技术内幕 试读 。
竹林蹊径:深入浅出Windows驱动开发--试读样章
构建高性能Web站点 [试读]Web组件分离 - 节选
Java Web开发技术大全
《HTML5移动Web开发指南》主要围绕HTML5技术,讲述如何利用HTML5相关技术开发移动Web网站和Web App应用程序。《HTML5移动Web开发指南》共分为四大部分,第一部分主要讲述Web技术的发展及HTML5标准在移动Web技术中的...
数年经验化成一篇解读,不要让时间浪费在不断地寻找spec标准含义的过程中,而是站在经验者之上更上一层楼! 祝每个看过此文档的人都可以为"被某国打压的dram技术"增加技术储备! 解读示例: 1 Byte Mode: 什么是...
网络规划设计师考试考点分析与真题详解_试读.pdf
《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会...
以Java语言为载体,通过讨论Java程序设计的一般过程和方法,重点讲述程序设计基础、面向对象程序设计、算法与数据结构、GUI程序设计和Web程序设计的知识,并涉及计算机科学基础、数据和控制、程序设计理论、软件工程...
Ajax - Web20开发技术详解试读版内容丰富,适合初学者学习。
这是试读版,只有前两章,不过是原版不是扫描版。我会在我的博客记录我的阅读笔记。
Oracle_DBA_手记》_试读版_盖国强.pdf
Web开发秘方 抢鲜试读 七印部落译关于web开发的经典资料很不错的总结和归类方法,值得C#和web 开发人员阅读
试读章节 试读章节 试读章节 试读章节 试读章节
Android技术内幕.系统卷 pdf,是对Android系统源代码进行深入分析的著作。 全书将Android系统从架构上依次分为应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层5个层次,旨在通过对Android系统源代码...
资源名称:玩转我的Android手机_目录_试读书本内容简介: 《玩转我的Android手机》内容简介:Android作为移动智能操作系统的杰出代表,具有无比强大的功能可扩展性。如何快速上手Android手机,让其为生活增添绚丽...
轻松道破软件性能调优方法论和具体实现路径,全面细致,一本书搞定性能优化
以Java语言为载体,通过讨论Java程序设计的一般过程和方法,重点讲述程序设计基础、面向对象程序设计、算法与数据结构、GUI程序设计和Web程序设计的知识,并涉及计算机科学基础、数据和控制、程序设计理论、软件工程...
《响应式Web设计实践》试读干货,响应式——适应浏览器的不同——Web设计实践
Java语言程序设计(基础篇)(英文版·第10版)试读版