WEB开发中的HTTP基础知识
时间:2006-06-01 来源:jiahaolin
一个术语:Web应用(Web application).不严格地说,可以将其定义为在一个服务器上运行的应用,对此应用,用户可以通过一个通用的客户端加以访问。在目前来说,最常用的就是PC机或工作站上的WEB浏览器,另外还包括:PDA,蜂窝电话及其他专用设备。
HTTP定义的通信模型为所有WEB应用设计奠定了基础。
要注意HTTP请求/响应模型的特点:
1.HTTP是一个无状态协议(stateless protocol)。这说明,服务器发送其响应后,不会保留客户的任何信息,因此,也就无法觉察出来自同一个客户的多个请求可能是相关的。
2.不同于独立的GUI应用,WEB应用无法轻松地提供反馈,客户与服务器之间的每一个交互都需要一次请求/响应交换。即便现在的AJAX技术可以在后台发出不需要刷新页面的HTTPRequest,仍然是一次请求/响应交换。
3.协议中未明确是如何建立请求的,因此,服务器也无法对触发客户请求的不同方法加以区别,包括无法响应浏览器的关闭动作等。
那么,HTTP协议倒底传递哪些信息呢?
首先,假定大家知道UTL/URI。在http://www.ietf.org/rfc/rfc2396.txt这个地址可以得到详细信息。
下面是一个合法的HTTP请求的例子:
GET /index.html HTTP/1.1
Host:www.sahara.name
User-Agent:Mozilla/5.0 (Windows; U; Win 9x 4.90;en-US;rv:1.0.2)
Accept:image/gif,image/jpeg,image/pjpeg/,image/png,*/*
Accept-Language:en
Accept-Charset:iso-8859-1,*,utf-8
第一行指定了GET方法,并请求使用HTTP/1.1协议版本返回一个/index.html的资源
Accept首部提供了浏览器所接受的语言和文件格式的有关信息。这些首部均可以在程序中获取。
HTTP规范(可以在http://www.w3.org/获取)对所有功能有详细描述。
同时,这个请求并不一定要指向一个静态文件,也可以指向一个程序,并发送一定参数。
下面是一个响应的内容
HTTP/1.1 200 OK
LAST-MODIFIED:Mon,20 Dec 2002 23:26:42 GMT
Date:Tue,11 Jan 2003 20:52:40 GMT
Status:200
Content-Type:text/html
Servlet-Engine:Tomcat Web Server/5.0
Content-Length:59
<html>
<body><h1>Hello World!</h1></body>
</html>
状态行以协议名开头,其后为一个状态码以及这个状态码的简单描述。
LAST-MODIFIED为服务器部分资源的一个时间戳。
请求参数的处理:
在我们开发WEB APPLICATION的时候,往往需要处理有关参数传递的问题,在传递过程中,我们仍然在使用HTTP协议,那么,有什么方法可以传递这些参数呢?
可以有两种访求来发送参数:以查询串(query string)的形式加在URI上,或者作为请求消息体的一部分发送。
请求方法:POST/GET
联系到我们在HTTP协议中说的参数的处理,GET是使用第一种方式进行参数传递,这样的后果是很容易被浏览器保存为一个书签。如果使用POST方法,则不会有这个问题,所有参数均会作为消息体的一部分发送。
http://www.sahara.name/check.jsp?id=10这个例子就是使用了GET方法。
另外,对于响应中的contentType属性,它指定了页面所生成的内容的MIME类型。对于HTML内容,最常用的是text/html,对于预定义格式的纯文本,则是text/plain.不过,也可以指定其他类型,对于支持XML的浏览器可以使用text/xml,对于内置WML浏览器的设备,可以使用text/vnd.wap.wml。容器会将这些信息作为一个响应首部发送到浏览器并由浏览器解析处理。
HTTP定义的通信模型为所有WEB应用设计奠定了基础。
要注意HTTP请求/响应模型的特点:
1.HTTP是一个无状态协议(stateless protocol)。这说明,服务器发送其响应后,不会保留客户的任何信息,因此,也就无法觉察出来自同一个客户的多个请求可能是相关的。
2.不同于独立的GUI应用,WEB应用无法轻松地提供反馈,客户与服务器之间的每一个交互都需要一次请求/响应交换。即便现在的AJAX技术可以在后台发出不需要刷新页面的HTTPRequest,仍然是一次请求/响应交换。
3.协议中未明确是如何建立请求的,因此,服务器也无法对触发客户请求的不同方法加以区别,包括无法响应浏览器的关闭动作等。
那么,HTTP协议倒底传递哪些信息呢?
首先,假定大家知道UTL/URI。在http://www.ietf.org/rfc/rfc2396.txt这个地址可以得到详细信息。
下面是一个合法的HTTP请求的例子:
GET /index.html HTTP/1.1
Host:www.sahara.name
User-Agent:Mozilla/5.0 (Windows; U; Win 9x 4.90;en-US;rv:1.0.2)
Accept:image/gif,image/jpeg,image/pjpeg/,image/png,*/*
Accept-Language:en
Accept-Charset:iso-8859-1,*,utf-8
第一行指定了GET方法,并请求使用HTTP/1.1协议版本返回一个/index.html的资源
Accept首部提供了浏览器所接受的语言和文件格式的有关信息。这些首部均可以在程序中获取。
HTTP规范(可以在http://www.w3.org/获取)对所有功能有详细描述。
同时,这个请求并不一定要指向一个静态文件,也可以指向一个程序,并发送一定参数。
下面是一个响应的内容
HTTP/1.1 200 OK
LAST-MODIFIED:Mon,20 Dec 2002 23:26:42 GMT
Date:Tue,11 Jan 2003 20:52:40 GMT
Status:200
Content-Type:text/html
Servlet-Engine:Tomcat Web Server/5.0
Content-Length:59
<html>
<body><h1>Hello World!</h1></body>
</html>
状态行以协议名开头,其后为一个状态码以及这个状态码的简单描述。
LAST-MODIFIED为服务器部分资源的一个时间戳。
请求参数的处理:
在我们开发WEB APPLICATION的时候,往往需要处理有关参数传递的问题,在传递过程中,我们仍然在使用HTTP协议,那么,有什么方法可以传递这些参数呢?
可以有两种访求来发送参数:以查询串(query string)的形式加在URI上,或者作为请求消息体的一部分发送。
请求方法:POST/GET
联系到我们在HTTP协议中说的参数的处理,GET是使用第一种方式进行参数传递,这样的后果是很容易被浏览器保存为一个书签。如果使用POST方法,则不会有这个问题,所有参数均会作为消息体的一部分发送。
http://www.sahara.name/check.jsp?id=10这个例子就是使用了GET方法。
另外,对于响应中的contentType属性,它指定了页面所生成的内容的MIME类型。对于HTML内容,最常用的是text/html,对于预定义格式的纯文本,则是text/plain.不过,也可以指定其他类型,对于支持XML的浏览器可以使用text/xml,对于内置WML浏览器的设备,可以使用text/vnd.wap.wml。容器会将这些信息作为一个响应首部发送到浏览器并由浏览器解析处理。
相关阅读 更多 +