HTTP请求行
HTTP请求行位于请求消息的第一行,它包括三个部分,分别是请求方式、资源路径以及所使用的HTTP协议版本,具体示例如下:
GET /index.html HTTP/1.1
上面的示例就是一个HTTP请求行,其中GET是请求方式,index.html是请求资源路径,HTTP1.1是通信使用的协议版本。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行结束。
关于请求资源和协议版本,大家都比较容易理解,而HTTP请求方式对大家来说比较陌生,接下来就针对HTTP的请求方式进行具体分析。
在HTTP的请求消息中,请求方式有GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT和CONNECT八种,每种方式都指明了操作服务器中指定URI资源的方式,它们表示的含义如表1所示。
表1 HTTP八种请求方式
请求方式 | 含义 |
---|---|
GET | 请求获取请求行的URI所标识的资源 |
POST | 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件) |
HEAD | 请求获取由URI所标识资源的响应消息头 |
PUT | 将网页放置到指定URL位置(上传/移动) |
DELETE | 请求服务器删除URI所标识的资源 |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项和需求 |
表1中列举了HTTP的八种请求方式,其中最常用的就是GET和POST方式,接下来,针对这两种请求方式进行详细讲解,具体如下所示:
1、GET方式
当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上一个超链接时,浏览器将使用GET方式发送请求。如果将网页上的form表单的method属性设置为“GET”或者不设置method属性(默认值是GET),当用户提交表单时,浏览器也将使用GET方式发送请求。
如果浏览器请求的URL中有参数部分,在浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后面。先来看一个URL地址,具体如下:
http://www.itcast.cn/javaForum?name=lee&psd=hnxy
在上述URL中,“?”后面的内容为参数信息。参数是由参数名和参数值组成的,并且中间使用等号(=)进行连接。需要注意的是,如果URL地址中有多个参数,参数之间需要用“&”分隔。
当浏览器向服务器发送请求消息时,上述URL中的参数部分会附加在要访问的URI资源后面,具体如下所示:
GET /javaForum?name=lee&psd=hnxy HTTP/1.1
需要注意的是,使用GET方式传送的数据量有限,最多不能超过1KB。
2、POST方式
如果网页上form表单的method属性设置为“POST”,当用户提交表单时,浏览器将使用POST方式提交表单内容,并把各个表单元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI地址的参数传递。另外,在使用POST方式向服务器传递数据时,Content-Type消息头会自动设置为“application/x-www-form-urlencoded”,Content-Length消息头会自动设置为实体内容的长度,具体示例如下:
POST /javaForum HTTP/1.1
Host: www.itcast.cn
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
name=lee&psd=hnxy
对于使用POST方式传递的请求信息,服务器端程序会采用与获取URI后面参数相同的方式来获取表单各个字段的数据。
需要注意的是,在实际开发中,通常都会使用POST方式发送请求,其原因主要有两个,具体如下:
1)POST传输数据大小无限制
由于GET请求方式是通过请求参数传递数据的,因此最多可传递1KB的数据。而POST请求方式是通过实体内容传递数据的,因此可以传递数据的大小没有限制。
2)POST比GET请求方式更安全
由于GET请求方式的参数信息都会在URL地址栏明文显示,而POST请求方式传递的参数隐藏在实体内容中,用户是看不到的,因此,POST比GET请求方式更安全。