我已經寫了通過下面的代碼在C#中使用System.Net.HttpListener一個簡單的服務器:最大URL長度
Listener = new HttpListener();
Listener.Prefixes.Add(Prefix);
Listener.Start();
Listener.BeginGetContext(GetContextCallback, null);
我注意到,我的服務器返回一個400 (錯誤請求)每當我發送的URL(在HTTP GET中)超過約255個字符時,HTTP響應。我已經做了一些研究,似乎沒有標準,儘管大多數瀏覽器和服務器似乎至少可以處理大約2000個字符。
有趣的是我的GetContextCallback()甚至在它以這種方式失敗時都不會被調用。
我真的想弄清楚如何配置它來支持大於255個字符,有誰知道是否有可能?
謝謝!
更新:我發現此限制似乎不在整個URL上,而是在單個目錄名稱上。我猜這與MAX_PATH有關,但是我知道其他服務器可以處理這個事實,而且我已經看到了實際的鏈接「瘋狂」,其目錄名稱爲300多個字符(特別是Google的鏈接像/ extern_js/f/........)。
更新:我測試我的服務器通過telnet,使用以下GET請求:
GET /013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789/test.html
Host: 10.15.38.80:8008
Accept: */*
我剛剛從瀏覽器中測試了超過800個字符的字符串,它工作得很好。你能發佈你用於HTTP GET的代碼嗎? – 2011-12-19 19:03:58
我實際上沒有使用代碼來測試,我正在使用telnet。我更新了原始帖子,以包含打破HttpListener的路徑(使用400個返回碼)。 – Locksleyu 2011-12-19 19:15:40
你是對的,這絕對是一個文件夾限制。似乎有些網站支持它(我可以將該URL發佈到google.com沒有問題),但其他網站則不支持(Microsoft.com返回無效的URL錯誤)。問題在於,你是否真的需要文件夾名稱中的那麼多信息?如果您只添加1個子文件夾並將其分成兩半,它仍然有效。我建議保持文件夾級別較小並將數據放入查詢字符串中。 – 2011-12-19 19:41:12