1.1 HTTP
HTTP允许Web服务器和浏览器通过Internet发送并接收数据,是一种基于“请求-响应”的协议。客户端请求一个文件,服务器端对该请求进行响应。HTTP使用可靠的TCP连接,TCP协议默认使用TCP 80端口。HTTP协议的第一个版本是HTTP/0.9,后来被HTTP/1.0取代,随后HTTP/1.0又被当前版本HTTP/1.1取代。HTTP/1.1定义于RFC(Request for Comment,请求注解) 2616中,可以从http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf下载。
注意 本节简单地介绍HTTP 1.1,目的是帮助你了解Web服务器应用程序发送的消息。若你对此有兴趣,想了解更多信息,请阅读RFC 2616。
在HTTP中,总是由客户端通过建立连接并发送HTTP请求来初始化一个事务的。Web服务器端并不负责联系客户端或建立一个到客户端的回调连接。客户端或服务器端可提前关闭连接。例如,当使用Web浏览器浏览网页时,可以单击浏览器上的Stop按钮来停止下载文件,这样就有效地关闭了一个Web服务器的HTTP连接。
1.1.1 HTTP请求
一个HTTP请求包含以下三部分:
请求方法—统一资源标识符(Uniform Resource Identifier ,URI)—协议/版本
请求头
实体
HTTP请求的示例如下所示:
请求方法—URI—协议/版本部分出现在请求的第一行,
POST /examples/default.jsp HTTP/1.1
其中POST是请求方法,/examples/default.jsp表示URI,HTTP/1.1表明请求使用的协议及其版本。
每个HTTP请求可以使用HTTP标准中指定的诸多请求方法中的一种。HTTP 1.1支持的7种请求方法包括:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。其中GET和POST是Internet应用中最常用的两种请求方法。
URI指定Internet资源的完整路径。URI通常会被解释为相对于服务器根目录的相对路径。因此,它总是以“/”开头的。统一资源定位符(Uniform Resource Locator ,URL)实际上是URI的一种类型(参见http://www.ietf.org/rfc/rfc2396.txt)。协议版本指明了当前请求使用的HTTP协议的版本。
请求头包含客户端环境和请求实体正文的相关信息。例如,请求头可能会包含浏览器使用的语言,请求实体正文的长度等信息。各个请求头之间用回车/换行(Carriage Return/LineFeed, CRLF)符间隔开。
在请求头和请求实体正文之间有一个空行,该空行只有CRLF符。这个空行对HTTP请求格式非常重要。CRLF告诉HTTP服务器请求实体正文从哪里开始。在有些Internet编程书籍中,CRLF被认为是HTTP请求的第4部分。
在前面的HTTP请求的示例中,请求实体正文很简单,如下所示:
当然,在一个典型的HTTP请求中,HTTP请求实体正文也可以很长。
1.1.2 HTTP响应
与HTTP请求类似,HTTP响应也包括三部分:
协议—状态码—描述
响应头
响应实体段
下面是一个HTTP响应的示例:
HTTP响应头的第一行与HTTP请求头的第一行类似。第一行指明了使用的协议是HTTP/1.1,请求发送成功(状态码200表示请求成功),一切都正常执行。
从上面的示例中可以看出,它与请求头类似,响应头也包含了一些有用的信息。响应实体正文是一段HTML代码。响应头和响应实体正文之间由只包含CRLF的一个空行分隔。