3. HTTP 协议 HTTP ( Hypertext Transfer Protocol )是由 W3C ( World Wide Web Consortium )和 ITEF ( Internet Engineering Task Force )共同开发和维护的规范,目前最常用的是 HTTP 1.1 ,也就是 RFC 2616 。 HTTP 是一个 Request-Response 规范,上面说过, C/S 结构的系统也是基于 Request-Response 模型,其实 B/S 结构也就是这么出来的, B/S 中的 Browser 就是这么一个客户端,它利用 HTTP 协议来于服务器交互。 HTTP 中 Request 的方法有: HEAD , GET , POST , PUT , DELETE , TRACE , OPTIONS , CONNECT ,红色部分是最常见的。 客户端和服务器端的一次交互举例:
4. 客户端发出请求: GET /index.html HTTP/1.1 Host: www.example.com 服务器端的响应如下: HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8
5. 实验一: HEAD 使用 telnet 模拟客户端发出 Request 获取页面头部信息,也就是 HTTP 里面的 HEAD : cmd > telnet www.fudan.edu.cn 80 cmd > HEAD / HTTP/1.1 # 这里敲打两次回车 服务器返回如下: HTTP/1.1 400 Bad Request Date: Thu, 25 Sep 2008 15:35:12 GMT Server: Apache/2.0.52 (Trustix Secure Linux/Linux) PHP/4.3.10 Connection: close Content-Type: text/html; charset=iso-8859-1
6. 实验二: GET 同样,使用 Telnet 来模拟客户端发出 Request: cmd > telnet www.g.cn 80 cmd > GET webhp 服务器端就会返回 HTML 代码,也就是 Google 的首页代码。当然,其中不包括图片信息,因为我们的 telnet 只请求了获取一个 HTML 页面,而不是包括了 HTML 页面中图片的所有信息。其中原理就是 Browser 和 HTML 的工作方式。
7. HTML 语言 HTML ( HyperText Markup Language )是 W3C 的一个标准,用来规范 Web 交互的语义,也就是 Browser 和 Web Server 之间的语义。 HTML 的出现,带来的一个好处就是链接,把一个个网页通过链接集合起来;第二个好处是把图、文、声、影嵌入到了同一个文档中,丰富多彩。
11. DHTML DHTML , Dynamic HTML ,是利用现有 Web 表现层技术来进行 客户端 开发,其中涉及到 HTML 、 Javascript 、 CSS 、 DOM(Document Object Model) 相关技术。 DHTML 相比 HTML ,具有更友好的用户界面,可以使得用户的操作更加便捷,如果说 HTML 是实现了 B/S 的可行性,那么 DHTML 则是提高了 B/S 的可用性。 给出一个例子:
12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DHTML example</title> <script type="text/javascript"> function init() { myObj = document.getElementById("navigation"); // .... more code]] } window.onload=init; </script> </head> <body> <div id="navigation"></div> <pre> Often the code is stored in an external file; this is done by linking the file that contains the JavaScript. This is helpful when several pages use the same script: </pre> <script type="text/javascript" src="myjavascript.js"></script> </body> </html>
13. AJAX 进几年来比较热的词, stands for: asynchronous JavaScript and XML. 同 DHTML 类似, AJAX 也是利用了一些现有的 Web 技术,从而提高了 Web 的可用性。 AJAX 的主要思想就是把用户操作和获取响应异步,使得用户不需要时刻等待数据传送而可以继续操作。在 Javascript 编程实现中最主要的是 XMLHttpRequest 对象,此对象根据浏览器不同而具有不同的实现,就连有些同厂商的浏览器也会因为版本不同而具有不同 XMLHttpRequest 对象的实现,所以获取的时候需要判断浏览器类型。
14. 获取 XMLHttpRequest 对象 /* Create a new XMLHttpRequest object to talk to the Web server */ var xmlHttp = false; try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlHttp = false; } } if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); }
18. CGI Bash Example #!/bin/sh #One line of HTTP head echo Content-type: text/plain #One line for the Empty Content echo "" # Do some Business Logic here # Output html response or others echo "<html><body>Hello World!</body></html>"
19. CGI 的不同实现 CGI 有个缺点,就是启动程序的时候需要创建进程,如果每个请求都创建一个解释器的进程,那么效率将会非常低下,此时可以把解释器做成 Web Server 的一部分,在 Apache 中采用模块方式,比如 mod_python,mod_ruby,mod_php 等,这样每次请求就不必都启动一个解释器的进程,也就提高了执行效率。
23. Web Service 的实现方式 Web Service 的实现方式按照通信编码来分有三种: XML-RPC 、 SOAP 、 RESTful( 最近出来的 ) 。 XML-RPC 是 Remote Procedure Call ,由特定格式的 XML 描述,比如 WSDL 格式。 SOAP 是基于 SOAP 协议的 Web Service ,也就是 Simple Object Access Protocal 协议。 RESTful(Representational state transfer ) 是充分利用了 HTTP 协议 (GET,PUT,DELETE...) 实现 Web Service 。
24. Web 2.0 杂谈 SNS , Wiki , Blog 这类应用都是在贯彻全民织网这个理念, Web 2.0 技术还是这些技术,但是系统体现的主体性有所改变,从以往的集中式信息发布平台转变为个人用户信息发布平台。所以对于技术人员而言, Web 2.0 和 1.0 并未有太大的变化,只是技术的使用手法有所改变,而促使这些改变的,就是全民织网这个概念。围绕这个概念,用户体验之类的技术也会由此而生,从而使得富客户端技术能够飞速发展。