什么是Web?及web服务器原理
什么是Web?
Web就是一种超文本信息系统,Web的一个主要的概念就是超文本连接,它使得文本不再象一本书一样是固定的线性的。而是可以从一个位置跳到另外的位置。你可以从中获取更多的信息。可以转到别的主题上。想要了解某一个主题的内容只要在这个主题上点一下,就可以跳转到包含这一主题的文档上。正是这种多连接性我们才把它称为Web。
World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的。通过WEB,互联网上的资源,可以在一个网页里比较直观的表示出来;而且资源之间,在网页上可以链来链去。在WEB1.0上做出巨大贡献的公司有Netscape,Yahoo和Google。 Netscape研发出第一个大规模商用的浏览器,Yahoo的杨致远提出了互联网黄页, 而Google后来居上,推出了大受欢迎的搜索服务。
搜索最大的贡献是,把互联网上海量的信息,用机器初步分了个线索。但是,光知道网页里有哪些关键字,只解决了人浏览网页的需求。所以,Tim-Berners-Lee在提出WWW不久,即开始推崇语义网(Semantic Web)的概念。为什么呢?因为互联网上的内容,机器不能理解。他的理想是,网页制作时和架构数据库时,大家都用一种语义的方式,将网页里的内容表述成机器可以理解的格式。这样,整个互联网就成了一个结构严谨的知识库。从理想的角度,这是很诱人的,因为科学家和机器都喜欢有次序的东西。Berners-Lee关心的是,互联网上数据,及能否被其它的互联网应用所重复引用。举一个例子说明标准数据库的魅力。有个产品叫LiberyLink。装了它后,到Amazon上去浏览时,会自动告诉你某一本书在用户当地的图书馆能否找到,书号是多少等。因为一本书有统一的书号和书名,两个不同的互联网服务(Amazon 和当地图书馆数据库检索)可以公享数据,给用户提供全新服务。
但是,语义网提出之后,曲高和寡,响应的人不多。为什么?因为指望要网页的制作者提供这么多额外的信息去让机器理解一个网页,太难;简直就是人给机器打工。这违反了人们能偷懒就偷懒的本性。看看Google的成功就知道。 Google有个Page Rank技术,将网页之间互相链接的关系,用来做结果排序的一个依据,变相利用了网页制作人的判断力。想一想网页的制作者们,从数量来说,比纯浏览者的数量小得多。但Google就这一个革新,用上了网页的制作者的一部份力量,已将其推上了互联网的顶峰。
所以互联网下一步,是要让所有的人都忙起来,全民织网,然后用软件,机器的力量使这些信息更容易被需要的人找到和浏览。如果说WEB1.0是以数据为核心的网,那我觉得WEB2.0是以人为出发点的互联网。我们看一看最近的一些WEB2.0产品,就可以理解以上观点。
Blog: 用户织网,发表新知识,和其他用户内容链接,进而非常自然的组织这些内容。
RSS: 用户产生内容自动分发,定阅
Podcasting: 个人视频/声频的发布/定阅
SNS: blog+人和人之间的链接
WIKI: 用户共同建设一个大百科全书
从知识生产的角度看,WEB1.0的任务,是将以前没有放在网上的人类知识,通过商业的力量,放到网上去。WEB2.0的任务是,将这些知识,通过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在这个过程中继续将知识深化,并产生新的思想火花;
从内容产生者角度看,WEB1.0是商业公司为主体把内容往网上搬,而WEB2.0则是以用户为主,以简便随意方式,通过blog/podcasting 方式把新内容往网上搬;
从交互性看,WEB1.0是网站对用户为主;WEB2.0是以P2P为主。
从技术上看,WEB客户端化,工作效率越来越高。比如像Ajax技术, GoogleMAP/Gmail里面用得出神入化。
我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,而且提供了这些内容之间的链接关系和浏览路径。在SNS里面,内容是以用户为核心来组织的。WEB2.0是以用户为核心的互联网。
那么,这种意义上的WEB2.0,和Tim Berners-Lee的语义网,有什么不同呢?语义网的出发点是数据的规整及可重复被机器调用,提出使用语义化的内容发布工具, 试图从规则和技术标准上使互联网更加有序。 Google等搜索引擎,在没有语义网的情况下,尽可能的给互联网提供了线索。 WEB2.0则是鼓励用户用最方便的办法发布内容(blog/podcasting),但是通过用户自发的(blog)或者系统自动以人为核心(SNS)的互相链接给这些看似凌乱的内容提供索引。因为这些线索是用户自己提供,更加符合用户使用感受。互联网逐渐从以关键字为核心的组织方式和阅读方式,到以互联网用户的个人portal(SNS)为线索,或者以个人的思想脉络(blog/rss)为线索的阅读方式。WEB2.0强调用户之间的协作。WIKI是个典型例子。从这个角度看,互联网是在变得更有序,每个用户都在贡献:要么贡献内容,要么贡献内容的次序.
对下一代互联网的看法,还会有很多的讨论。有一点可以肯定,WEB2.0是以人为核心线索的网。提供更方便用户织网的工具,鼓励提供内容。根据用户在互联网上留下的痕迹,组织浏览的线索,提供相关的服务,给用户创造新的价值,给整个互联网产生新的价值,才是WEB2.0商业之道。
Web的特点:
一、Web是图形化的和易于导航的(navigate)
Web 非常流行的一个很重要的原因就在于它可以在一页上同时显示色彩丰富的图形和文本的性能。在Web之前Internet上的信息只有文本形式。Web可以提供将图形、音频、视频信息集合于一体的特性。同时,Web是非常易于导航的,只需要从一个连接跳到另一个连接,就可以在各页各站点之间进行浏览了。
二、Web与平台无关
无论你的系统平台是什么,你都可以通过Internet访问WWW。浏览WWW对你的系统平台没有什么限制。无论从Windows平台、UNIX平台、Macintosh还是别的什么平台我们都可以访问WWW。对WWW的访问是通过一种叫做浏览器(browser)的软件实现的。如Netscape 的Navigator、NCSA的Mosaic、Microsoft的Explorer等。
三、Web是分布式的
大量的图形、音频和视频信息会占用相当大的磁盘空间,我们甚至无法预知信息的多少。对于Web没有必要把所有信息都放在一起,信息可以放在不同的站点上。只需要在浏览器中指明这个站点就可以了。使在物理上并不一定在一个站点的信息在逻辑上一体化,从用户来看这些信息是一体的。
Web 是动态的
最后,由于各Web站点的信息包含站点本身的信息,信息的提供者可以经常对站上的信息进行更新。如某个协议的发展状况,公司的广告等等。一般各信息站点都尽量保证信息的时间性。所以Web站点上的信息是动态的。经常更新的。这一点是由信息的提供者保证的。
Web动态的特性还表现在Web是交互的。
Web的交互性首先表现在它的超连接上,用户的浏览顺序和所到站点完全由他自己决定。另外通过FORM的形式可以从服务器方获得动态的信息。用户通过填写FORM可以向服务器提交请求,服务器可以根据用户的请求返回相应信息。
Web服务器工作原理:
一个 Web 服务器也被称为 HTTP 服务器,它通过 HTTP 协议与客户端通信。这个客户端通常指的是 Web 浏览器。一个基于 Java 的 Web 服务器用到二个重要的类,java.net.Socket 与 java.net.ServerSocket ,并通过 HTTP 消息通信。因此,本文从讨论 HTTP 与这二个类开始,然后我将解释一个与本文相关的简单的 Web 应用。
The Hypertext Transfer Protocol(HTTP)
HTTP 是一种让 Web 服务器与浏览器(客户端)通过 Internet 发送与接收数据的协议。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。HTTP 运用可靠的 TCP 连接,通常用的 TCP 80 端口。它的第一个版本是 HTTP/0.9 ,然后被 HTTP/1.0 取代。当前的版本是 HTTP/1.1 ,由RFC2616(.pdf) 定义。
本节主要对应 HTTP 1.1 ,足够使你充分理解由 Web 服务器程序发出的消息。如果你对更加详细的知识有兴趣,可以参考 RFC2616 。
在 HTTP 中,客户端总是通过建立一个连接与发送一个 HTTP 请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回叫连接。客户端与服务器端都可以提前中断一个连接。例如,当用一个浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的 HTTP 连接。
HTTP 请求
一个 HTTP 请求包含三个部分:
Method-URI-Protocol/Version方法-地址-版本
Request header请求头
Entity body请求实体
下面是一个 HTTP 请求实例:
POST /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/ch8/SendDetails.htm
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
LastName=Franks&FirstName=Michael
The Method-URI-Protocol/Version 在这个请求的第一行:
POST /servlet/default.jsp HTTP/1.1
其中 POST 是请求的类型。每个客户端 HTTP 请求可以是 HTTP 规范中指定的许多请求类型中的一种。HTTP 1.1 支持七种类型的请求,它们是 GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE。其中 GET 与 POST 是 Internet 应用中经常用到的二种请求类型。
URI 完整地指定了 Internet 资源。一个 URI 通常被解析为相对服务器的根目录。这样,它应该总是以一个 '/' 前缀开始。一个 URL 实际上是 URI 的一种类型。
Version 指的是该 HTTP 请求所用到的 HTTP 协议版本。
请求头包含了客户端环境与请求实体的一些有用的信息。例如它包含浏览器设定的语言、实体的长度等等。每条请求头用回车换行符(CRLF)分开。
一个非常重要的空行分开了请求头与实体,它标志着实体内容的开始。一些 Internet 开发书籍认为这个 CRLF 空行是 HTTP 请求的第四个部分。
在上面的 HTTP 请求中,实体只是简单以下的一行:
LastName=Franks&FirstName=Michael
在一个典型的 HTTP 请求中,请求实体内容会长得多。
HTTP 响应
与请求相似,HTTP 响应也由三部分组成:
Protocol-Status code-Description协议状态 描述代码
Response headers响应头
Entity body响应实体
以下是一个 HTTP 响应的实例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112
<html>
<head>
<title>HTTP Response Example</title></head><body>
Welcome to Brainy Software
</body>
</html>
响应头的第一行类似请求头的第一行,告诉你所用的协议是 HTTP 1.1 ,请求成功(200=success),以及没有任何问题。
响应头类似请求头也包含了一些有用的信息。响应的实体响应本身的 HTML 内容。头与实体之间由回车换行的空行(CRLF)分开。
Socket 类
一个 socket 是一个网络连接的端点,它使得一个应用可以从网络读与写。在不同电脑上的二个应用软件能够通过收发字节流而彼此通信。要发一个信息到另一个应用程序,你需要知道它的IP地址,以及它的 socket 端口号。在 Java 中,一个 socket 用 java.net.Socket 来实现。
要创建一个 socket ,你可以用 Socket 类中几个构建方法中的一个。其中一个接受主机名与端口号作为参数:
new Socket("yahoo.com", 80);
一旦你成功地创建了一个 Socket 类的实例,你就可以用它去发送与接收字节流了。要发送字节流,你需要呼叫 Socket 类的 getOutputStream 方法来得到一个 java.io.OutputSteam 对象。要发送文本到远程的程序,你通常需要从返回的 OutputStream 创建一个 java.io.PrintWriter 对象。要从连接的另一端接收字节流,你需要呼叫 Socket 类的 getInputStream 方法,它返回一个 java.io.InputStream 对象。
以下代码创建一个可以与本地 HTTP 服务器通信的 socket (127.0.0.1 表示一个本地的主机),发送一个 HTTP 请求,并接收从服务器的响应。它还创建一个 StringBuffer 对象来接受响应,并打印到控制台。
Socket socket= new Socket("127.0.0.1", "8080");
OutputStream os= socket.getOutputStream();
boolean autoflush = true;
PrintWriter out= new PrintWriter( socket.getOutputStream(), autoflush );
BufferedReader in = new BufferedReader(
new InputStreamReader( socket.getInputStream() ));
// send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection: Close");
out.println();
// read the response
boolean loop= true;
StringBuffer sb = new StringBuffer(8096);
while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
Thread.currentThread().sleep(50);
}
// display the response to the out console
System.out.println(sb.toString());
socket.close();
注意要从 web 服务器得到正确的响应,你必须要发送用 HTTP 协议编译了的 HTTP 请求。如果你看了上面的 HTTP 部分,你应该能够理解上面代码中的 HTTP 请求。
黑客首选--Web 2.0应用程序
日前,全球互联网内容安全领导者趋势科技(东京证交所代号:4704)发布了趋势科技实验室整理分析的“08 年病毒威胁摘要暨-09年病毒趋势预测”。根据这份研究报告指出,2008年亚洲地区的网络罪犯纷纷使用新媒介或针对旧媒介进行改良,用以谋取利益,并且以大规模的网页入侵、AUTORUN 恶意软件、社交诈骗手法与区域性病毒威胁为主要四大类型网络犯罪。进入2009年,值得注意的是:由于Web2.0社交网站的使用率大增,然而网站设计的安全弱点加上Web2.0用户的认知不足,因此,这类网站将成为 Web威胁繁衍的沃土。同时,2009年还需特别留意的还有浏览器与其他Web 应用程序,它们将成为黑客攻击的首要目标!
趋势科技的产品技术顾问徐学龙指出:“2008年,锁定特定用户群与热门网站为目标的病毒攻击手法相当猖獗。在5月份,包括娱乐、政治、购物网、社交网络等各种性质的网站达到病毒入侵的最高峰,全球许多网站被植入了恶意代码,借此感染不知情的网民。该趋势似乎正以令人无法想象的速度持续发展,相当令人忧心。”
据趋势科技2008年度数据安全分析报告指出:去年感染比例最高的是以利用USB移动储存装置作为传播媒介的AUTORUN恶意软件,在亚洲区即高达15%的感染比例,而在欧洲、中东及非洲 (EMEA) 地区感染数最高的恶意软件当中也出现其身影,甚至还成功渗透NASA与美国国防部网络。由于企业内部USB移动储存装置不易控管,造成窃取私密数据越来越方便,随之兴起了盗卖个人资料的地下经济。而Web威胁结合USB、Email整合而成的混合式攻击,也使得处理病毒问题日趋复杂,企业MIS人员很难找出造成问题的恶意软件档案,致使企业生产力降低。针对此现象,徐学龙进一步分析:“现今病毒感染途径范围越来越大,光靠单一防护措施已经越来越难以防止,若是没做好环节中的其中一项,将导致企业内部用户感染病毒的频率上升。”
另外报告中提到,在过去一年中黑客擅于利用网民所关心的事件,如四川地震、北京奥运等作为套诱饵制作恶意软件向网民连番攻击,而针对特定地区的独特背景所设计的不同攻击事件也依然层出不穷。举例来说,08年2 月份,中国在线游戏平台联众网站遭恶意软件作者利用安全弱点设下陷阱等待玩家上钩。另外,持续兴风作浪的网络钓鱼诈骗邮件,在08年则锁定Yahoo! Japan拍卖网站用户为攻击目标,使他们面临帐户信息遭窃的风险。
Web 2.0的安全风险及对策
在企业IT世界中,安全风险随处可遇,例如不够强壮的密码,意料之外的电子邮件附件,浏览网页时误点了恶意网址,还有不请自来的流氓软件。诸如防火墙、杀毒软件等安全工具基本可以处理这些安全威胁。不过,随着Web 2.0应用逐渐增多,企业IT部门又迎来了新的安全威胁,传统的安全工具在面对Web 2.0应用时往往显得心有余而力不足,那么企业IT部门应该如何应对Web 2.0应用所带来的安全威胁呢?
Web 2.0应用安全风险加剧
随着互联网和Web 2.0应用的日益普及,无论是个人用户,还是企业用户,都将面临着巨大的安全威胁。
安全公司Sophos曾经表示,每天有15000多个新网页将被感染,90%的Web威胁位于合法的黑客站点上,同时在全部搜索结果中有1%包含被感染的网页。
其中,对于多数IT经理或信息安全管理者来说,社交网站所带来的安全威胁日渐增大。黑客们已经把目光转向了众多知名社交网站。
在过去一年中,著名社交网站Facebook用户已经屡次遭到了多种蠕虫病毒的袭击。恶意分子首先获得某Facebook用户帐户,然后向其好友发送一条消息,告诉他们点击这个链接观看来自谷歌Picasa的相片或者是一段视频。缺乏防范意识的用户点击链接后,会被提示下载一个视频控件,但这实际上是一个传播木马病毒的恶意程序。
去年8月份,Facebook的1800多名用户的信息遭到秘密安装的木马程序窜改。
而微博客Twitter也同样成为网络罪犯散播恶意软件和商业广告讯息的工具。最近Twitter用户就遭遇到了钓鱼攻击,黑客首先用伪冒网站骗取用户的账号和密码,然后向被攻击用户的好友发送销售讯息或利用Twitter特有的缩址服务,欺骗网友进入第三方网站。
除了社交网站之外,其它很多Web 2.0应用同样深受用户喜欢,因为它们非常易用和实用,用户一般主动去安装这些工具,但是同时它们也将其固有的风险引入到了企业此前非常牢固的网络架构之内,让企业数据面临着安全风险。
Web 2.0应用安全防护的难点
对于IT经理来说,防护Web 2.0应用所带来的安全风险是一件非常麻烦的事情,因为这些安全威胁的特点已经与传统的安全威胁有了很大区别。
在过去,可以在网络入口处保护网络终端,但是现在,Web内容逐渐趋于动态化,用户需要持续不断的更新现有内容、共享应用程序,并通过多种渠道进行即时通讯。
很多Web 2.0应用都对算法进行了优化,以确保不被阻挡,另外,这些应用还可以将自己伪装成HTTP、FTP、SMTP和Telnet通信,来绕开防火墙和目前统一威胁管理系统的探测。
另外,企业IT人员无法采取一刀切的形式,禁止员工使用所有Web 2.0应用,这是不现实的。因为这样做只会阻扰员工,切断本应通过这些应用得到的具有潜在价值的商机。
如何应对Web 2.0应用安全风险
企业IT人员需要根据当今世界的Web2.0调整自己的安全策略,为社交网站、博客和所有其他类型的网站创建规则,同时借助于新的安全工具来检测和屏蔽恶意Web 2.0应用。
为了避免Web 2.0应用导致企业数据面临威胁,企业安全人员应对企业内部的核心数据进行分门别类,并通过高质量的加密保证非常有价值的数据不被拦截和非授权用户利用。
另外,加强企业内部员工的安全意识教育,通过不断强化员工的风险意识,实际操作培训等使员工自觉遵守相关的策略,帮助企业避免核心数据从内部泄露。
除了加强安全策略和提高员工安全意识外,市场也在呼唤新的技术来加强对Web 2.0应用的管理和防护。
美国FaceTime Communications公司最近推出了名为ACE的新探测分类技术,“ACE”是应用程序控制引擎(Application Control Engine)的首字母缩写。这种专利安全技术可以扫描网络,识别1400多个Web 2.0应用和5万多个社交网络插件。
扫描网络上的恶意应用程序对IT人士来说或许不是一件新鲜的事情,但是FaceTime的ACE技术关注于扫描Web 2.0应用,这就颇具新意了。
通过FaceTime的ACE,这1400多个Web应用可以被识别,同时更多的社交网络插件也可以被单独认出。不管这些应用使用什么端口、协议或逃避技术,ACE都可以发现并关闭它们。
另外,ACE软件开发工具可以让第三方解决方案提供商进行扩展开发,可以帮助它们的客户管理即时通讯、端对端文件共享、社交网络、Web 2.0、VOIP等方面的应用。
学习更多web前端知识:http://www.zhihaijiangku.com