第 1 章:Web基础技术(HTTP请求消息)

第 1 章:Web基础技术作者:党海峰孙霞    来源:希赛网    2014年03月14日

HTTP请求消息

HTTP请求消息由Request-Line(请求行)、Header Field(头域)和Message-Body(消息体)组成,如图1.4所示。

图1.4  HTTP请求消息格式

Request-Line在HTTP请求消息的第一行,一般格式是:

Request-Line = Method[SP]Request-URI[SP]HTTP-Version CRLF

其中Method称为HTTP方法(HTTP Method),它表示该请求所要进行的操作类型;Request-URI称为请求URI,它表示与该请求有关的Web服务器中的资源定位符;HTTP-Version表示该请求使用的HTTP协议的版本号,一般是HTTP/1.0或HTTP/1.1,目前使用的HTTP版本大部分都是HTTP/1.1。[SP]表示空格,CRLF表示回车换行,它们都是格式信息,用于分隔各部分信息。例如:

GET /index.htm HTTP/1.1

就是一个典型的Request-Line,其中GET是HTTP方法、/index.htm是Request-URI、HTTP/1.1是HTTP版本号。

头域紧跟在Request-Line的后面,每个域一行,本节后面部分将会详细介绍头域。消息体在头域后面,与头域隔一个空行,不过并不是所有HTTP请求消息都有消息体,有些就没有消息体,这是由该HTTP请求消息的HTTP方法类型决定的。

1.HTTP方法

HTTP请求消息通过使用不同的HTTP方法来向接收到请求的主机说明其请求所期望执行的操作。HTTP/1.1总共定义了OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT八种HTTP方法,其中GET方法和POST方法是最常见的也是使用最多的HTTP方法,其他方法使用得很少,甚至有些方法在很多服务器中都会被屏蔽或者忽略,所以本书将只重点针对GET方法和POST方法进行详细介绍。

平时读者在上网浏览网页时基本上都是用GET方法,GET方法向服务器申请请求URI指定的资源。请求URI可能指向的是一个服务器Web路径下的一个文件,接收到请求后Web服务器会将该文件的内容作为HTTP响应的内容返回给浏览器;请求URI也可能指向一个数据处理过程(比如一个Servlet),那么Web服务器会执行该过程并将该过程执行结束后向客户端反馈的结果信息加入到HTTP响应中返回。可见在使用GET方法进行的请求响应过程中,数据流向主要是从服务器向客户机,所以GET请求消息的消息体通常不包含任何内容。一般在如下场景会使用GET方法:

在浏览器中键入网页地址,从Web服务器上获取网页中的所有内容,例如HTML、图片、Flash、JavaScript等。请求每一项内容时都会将一个GET请求提交给服务器,然后服务器会处理每一个请求并将请求的内容作为响应返回给浏览器。

单击网页上的一个图片链接打开一个图片。浏览器会将图片的URI构造成一个请求消息,并将请求消息提交给服务器,服务器接收到请求消息,解析请求URI,然后将URI指向的图片返回给浏览器。

POST方法则恰好与GET方法相反,POST方法主要用于向服务器提交数据内容;所以一般来说,POST消息的消息体中会包含提交的数据内容。POST消息中请求URI也可以是一个文件位置或者数据处理过程,假如指向的是一个文件位置,那么Web服务器会将POST消息体中携带的数据作为一个文件保存在指定的位置;如果指向的是一个数据处理过程,那么Web服务器会将POST消息体中携带的数据传递给该数据处理过程,并启动该数据处理过程对数据进行处理。通常POST方法会被使用到如下场景:

提交登录信息。当输入完用户名和密码、单击登录按钮时,浏览器就会将登录信息(用户名和密码,为了安全起见,很多系统会对密码加密)作为POST消息的消息体提交给Web服务器。

在论坛中发帖子。帖子的标题和内容会作为POST消息的消息体提交给Web服务器。

发送E-mail。E-mail的各项信息(发件人、收件人、抄送、密送、标题、正文等)会组织成一定的格式,然后作为POST消息的消息体提交给Web服务器。 

2.Request-URI

Request-URI称为请求URI,它是一个不含空白字符的字符串,符合URI(资源定位符)的格式规范,表示Web服务器上的一个资源位置,可以是以下四种格式:

Request-URI = "*" | absoluteURI | abs_path | authority

* 表示该Request-URI并不指向某个特定的位置,说明该HTTP请求消息所请求的操作是针对整个Web服务器、而不是针对某个特定资源的。当然并不是所有的HTTP方法都能够使用 * 作为Request-URI,只有某些特定的HTTP方法才可以,比如OPTIONS。

absoluteURI是一个用绝对形式表示的URI,即以协议开头的URI,比如:“http://www.csai.cn/image/bg.png”,这种表示形式单独就能指定一个唯一的网络资源位置。

abs_path是一个用相对形式表示的URI,但它必须是一个Web服务器上的绝对路径,必须以一个 / 开头,例如:/image/bg.png。这种表示形式指定了一个从Web服务器根目录开始的相对路径。Web服务器根目录是服务器设置的所有Web资源的顶层目录。假设,域名为“csai.cn”的Web服务器设置的根目录是“D:\webroot”,那么URL“http://www.csai.cn/index.htm”就是请求Web服务器上的文件“D:\webroot\index.htm”。可见,使用abs_path的Request-URI只是指定了Web服务器内部的路径,并没有指定Web服务器的主机地址,所以它不能单独用于指定一个网络位置。用这种Request-URI的HTTP请求消息都会有一个名为Host的头域,它的值就用于指定一个主机的地址,比如:Host头域值为“www.csai.cn”,Request-URI为“/image/bg.png”的HTTP请求消息所指定资源位置也是“http://www.csai.cn/image/bg.png”。

authority仅能被用于CONNECT方法。




posted @ 2017-04-08 11:29  傲骄鹿先生  阅读(15)  评论(0编辑  收藏  举报