HTTP请求格式、状态码及常用请求方法

来源:互联网 发布:telnet 服务 linux 编辑:程序博客网 时间:2024/06/06 09:03

常用的HTTP请求方法,按照RFC2616标准(HTTP1.1)来看,通常有以下8种方法:get、post、put、delete、head、trace、connect、options。

HTTP请求格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
l 请求方法URI协议/版本
l 请求头(Request Header)
l 请求正文
下面是一个HTTP请求的例子:

GET/sample.jspHTTP/1.1Accept:image/gif.image/jpeg,*/*Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)Accept-Encoding:gzip,deflateusername=jinqiao&password=1234

(1) 请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
(2) 请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长

Accept:image/gif.image/jpeg.*/*Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)Accept-Encoding:gzip,deflate.

请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
l 协议状态版本代码描述
l 响应头(Response Header)
l 响应正文
下面是一个HTTP响应的例子:

HTTP/1.1 200 OKServer:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:23:42 GMTContent-Length:112<html><head><title>HTTP响应示例<title></head><body>Hello HTTP!</body></html>

协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):
HTTP/1.1 200 OK
响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

Server:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:13:33 GMTContent-Type:text/htmlLast-Moified:Mon,6 Oct 2003 13:23:42 GMTContent-Length:112

响应正文响应正文就是服务器返回的HTML页面:

<html><head><title>HTTP响应示例<title></head><body>Hello HTTP!</body></html>

响应头和正文之间也必须用空行分隔。  

HTTP应答码

HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型:1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT Found,意味着请求中所引用的文档不存在。5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500

对于我们Web开发人员来说掌握HTTP应答码有助于提高Web应用程序调试的效率和准确性。

GET:获取资源

get方法用来请求已被uri识别的资源。这点很好理解,假如资源是个文本或者图片,那么会直接在网页上展示;如果是像CGI那样的程序,则会返回经过执行的结构;如果识别不了,一般会跳出下载窗口。
由于服务器的限制,对get提交通常有长度限制。

GET /index.html HTTP/1.1Host: www.baidu.com

POST:传输实体主体

post方法用来传输实体的主体。虽然get也可以,但是一般是用post传输。虽然post和get功能很相似,但是post的主要目的并不是用来获取响应的主题内容。
在REST架构标准的网站中,post被用来创建资源。

POST / HTTP/1.1Host: www.baidu.comContent-Length: 6

PUT:传输文件

put方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求uri指定的位置中。
由于在HTTP1.1中,put方法本身不带验证机制,因此一般网站并不使用put方法。在REST架构标准的网站中,会开放此方法用来更新资源。

PUT / HTTP/1.1Host: www.baidu.comContent-Length: 6

DELETE:删除文件

delete方法用来删除文件,是与put相反的方法。
由但于在HTTP1.1中,delete方法和put方法一样不带验证机制,因此一般网站并不开放delete方法。REST架构标准的网站中,会开放此方法用来作为删除资源。

DELETE /example.html HTTP/1.1Host: www.baidu.com

HEAD:获取报文首部

head方法和get方法一样,只是不返回报文主体部分。用于确认uri的有效性及资源更新的时间等。从资源操作的语义来讲,一个针对某个目标资源发送的HEAD请求一般不是为了获取目标资源本身的内容,而是得到描述目标资源的元数据信息。服务器一般讲对应资源的元数据置于响应的报头集合返回给客户端,这样的响应一般不具有主体部分。

GET /index.html HTTP/1.1Host: www.baidu.com

TRACE:追踪路径

trace用于远程诊断服务器,它会把服务器之前的请求通信环会给客户端。不过该方法很少 用到,再加上支持该方式的服务器存在跨站脚本漏洞(XST攻击),通常就更不会用到了。
Apache下禁用TRACE

RewriteEngine onRewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)RewriteRule .* - [F]

CONNECT:要求用隧道协议链接代理

connect用于代理进行传输,如使用SSL
使用格式如下:

CONNECT 代理服务器名:端口号 HTTP版本

OPTIONS:询问支持的方法

options用于询问当前请求uri指定的资源支持的方法,从而确定确定针对某当前uri的请求必须具有怎样的约束(比如应该采用怎样的HTTP方法以及自定义的请求报头),然后根据其约束发送真正的请求。比如针对“跨域资源”的预检(Preflight)请求采用的HTTP方法就是OPTIONS。

OPTIONS /index.html HTTP/1.1Host: www.baidu.com

常见方法支持的HTTP协议版本

HTTP1.0、HTTP1.1支持的方法

0 0
原创粉丝点击