2012-12-04 55 views
0

我們使用telnet機制向服務器發送http請求並獲得響應。 當使用telnet發送HTTP GET請求時,我們注意到了一件奇怪的事情。 第一種方法適用於大多數環境,但不適用於其中一種環境。但第二種方法(而不是相對路徑,使用完整路徑)在此環境中正常工作。使用telnet的HTTP請求沒有得到任何迴應

**

  • 方法一:

**

(printf的「GET /test.jsp HTTP/1.0 \ nAccept:*/* \ n用戶代理: WatchDog \ n \ n「; sleep 9)| telnet xx.xx.xx.xx 8093 嘗試xx.xxx.xx.xx ... 連接到xx.xx.xx.xx. 轉義字符是'^]'。

由外國主機關閉的連接。

**

  • 方法2:

**

(printf的「GET http://xx.xx.xx.xx:8093/test.jsp HTTP/1.0 \ nAccept:*/* \ n用戶代理:看門狗\ n \ n「;睡9)|遠程登錄XX.XX.XX.XX 8093

Trying xx.xx.xx.xx... 
Connected to xx.xx.xx.xx. 
Escape character is '^]'. 
HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=91643475E80038EA8770CE6803EE320C; Path=/ 
Content-Type: text/html;charset=UTF-8 
Content-Language: zh-US 
Content-Length: 42 
Date: Mon, 03 Dec 2012 04:25:09 GMT 
Connection: close 

The Server is Running 

Connection closed by foreign host. 

爲什麼方法1是不是隻在一個環境中運行?我們需要在那個環境中檢查一些東西嗎?

請給你的建議...

感謝, Sekhar

回答

1

HTTP/1.0(RF​​C 1945)指定結尾是CR LF行。有些服務器可能嚴格應用此規則。嘗試以\ r \ n作爲行結尾發送請求。發送絕對URI也被保留供代理使用(RFC 1945的第5.1.2節)。

如果不同的行尾和URI的風格並不能幫助你必須看看服務器的配置/實施,我看不出什麼錯方法1.

1

除了行結束這must be \r\n和您的接受標題應該是*/*而不是/,您的第一個請求沒有主機名。

HTTP 1.1服務器可以拒絕沒有主機集的HTTP請求,無論是在絕對請求URI還是主機頭中。

+0

「HTTP 1.1服務器可能會拒絕沒有主機集的HTTP請求,無論是在絕對請求URI還是在主機頭中 - >您能告訴我在哪些情況下會發生這種情況嗎?因爲我們發送HTTP請求到HTTP 1.1服務器與主機和使用相對路徑在大多數環境中工作正常。 – Sekhar

+0

@Sekhar不,這是一個應該與您的Web服務器製造商一起檢查的實現細節。 RFC指出,服務器可能會嘗試使用試探法(例如,檢查某個特定主機所特有的URI路徑),以確定正在請求的確切資源是什麼。「_](http:// tools .ietf.org/HTML/RFC2616#部-5.2)。如果您只是修正了您的請求,即在標頭或URL中創建一個包含主機的有效HTTP請求,並使用'\ r \ n'分隔標頭,則它只適用於所有服務器。 – CodeCaster

相關問題