2010-05-25 43 views
1

好的,我一直在读HTTP,发现this page。这是一个被张贴有一个例子HTTP请求:有效的HTTP标头? `GET /page.html Http1.0`?

 
GET /http.html Http1.1 
Host: www.http.header.free.fr 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
Accept-Language: Fr 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0) 
Connection: Keep-Alive 

我试图在Telnet和它的工作。但在其他地方我看到这种请求行

 
GET /http.html HTTP/1.1 

重要的不同之处在于HTTP全为大写和/字符。

它们都是正确的吗?他们似乎都在我测试过的网站上工作。我已经浏览了HTTP的RFC,但没有发现任何有用的东西。有没有其他人看过这种请求头?它是正式支持的吗?

+0

如果您使用“Http1.1”表单,'lighttpd'回答“400错误请求”。 – sth 2010-05-25 01:04:58

+0

@sth Apache 1.x和2.x和IIS都接受它.. – Earlz 2010-05-25 01:13:19

回答

3

参照HTTP protocol,它必须在HTTP/1.1HTTP/1.0(较旧的一个)。现在它取决于http服务器的开发方式。它可以接受它,但你不应该依赖它。

编辑:

HTTP-版本= “HTTP”, “/” 1个* DIGIT “”。 1 * DIGIT

而现在的协议是1.1,所以你应该使用:GET /http.html HTTP/1.1

0

应该

GET /http.html HTTP/1.1 
1

根据RFC2145(第3页),

RFC791 [4]定义了3.2节中的“鲁棒性原则”:

一个实现的发送行为必须是保守的,并且接收行为是自由的。

该原理也适用于HTTP。这是解释HTTP规范的任何部分可能仍然不明确的基本依据。特别是,HTTP的实现不应该拒绝消息或不必要地产生错误。

,特别是:

是,而且一直,一个实现接收邮件头,它不明白必须忽略掉这个头中的HTTP规范的明确意图。

那么服务器忽略的情况下的版本号,它是“HTTP1.1”(这是无效),并推测它的解释消息作为HTTP/1.0消息(或者甚至HTTP/0.9! )。当然,你不应该依赖这种行为!