
1.2 HTTP 请求响应模型
Web应用是基于B/S架构(也就是浏览器/服务器架构)的。应用程序部署在服务器端,客户端通过浏览器访问应用程序。客户端发送HTTP请求消息给服务器,服务器将请求传递给Web应用程序,Web应用程序处理请求,并把响应的HTML页面传回给客户端,所以说HTTP协议基于请求响应模型。
一个完整的HTTP会话过程包括:首先,客户端与Web服务器建立连接,客户端向Web服务器发送HTTP请求消息,Web服务器处理请求,并将响应消息传送给客户端,这样一个来回后,这个连接就关闭了。
HTTP超文本传输协议是一个无状态的协议。也就是说,每当客户端访问Web服务器上的某个Web页面时,都要建立与服务器的一个独立的连接。服务器不保留前一次访问的任何信息。Web服务器将客户端对某个页面的每次访问都当做相互无关的访问来处理;服务器不会自动保留用户的状态信息。
HTTP消息包括起始行、题头域和信息体3部分。
起始行通常是请求消息的首行,包含3个域:HTTP方法、通用资源标识符和HTTP协议版本。尽管有几种HTTP方法可以从服务器中检索数据,但是最常用的方法只有get和post方法。例如,get请求的请求行如下。
get/first.html HTTP/1.0
HTTP请求的题头域可以没有或有多个。请求题头域允许客户端向服务器传递有关请求和客户端本身的一些附加信息。请求消息和响应消息的题头域是相同的。首先是题头域的名称,接着是冒号和值。如果对同一个题头域规定了多个值,则必须用逗号隔开。例如:
hosting:localhost:8080 accept-encoding:gzip,deflate
一旦服务器接收并处理了请求消息,它就必须向客户端返回一条响应消息。响应消息包含状态行、0个多个题头域,空行后是一个消息体。状态行包含响应消息所采用的HTTP协议版本,之后是响应状态码和状态描述,中间用空格隔开。响应状态码是3位数字,用于描述服务器的响应状态。
1yy(以1开头的3位数):主要是实验性质的。
2yy:表明请求成功。例如,200表明已成功取得了请求页面。
3yy:表明在请求成功之前应该采取进一步的行动。
4yy:表明浏览器无法满足请求。例如,404表示请求的页面不存在。
5yy:表明服务器出现问题。例如,500说明服务器内部发生错误。