我正在開發使用耶索德Web框架(altough我認爲這個問題是不相關的Haskell和/或耶索德,我在Haskell一個Web應用程序HTTP請求切斷只是爲了完整性而提及這一點)。我使用Warp服務器來處理請求,並且在使用涉及GZIP壓縮的Chromium/Firefox(但不是Opera)訪問網站時遇到了一個奇怪的問題。內容獲取與GZIP壓縮(僅適用於瀏覽器)
我有一個網站建立僅Hello world!
返回。
- 如果我取使用
netcat
的網站,我設置Accept-Encoding
到gzip
,我得到正確的結果。這意味着我可以解壓縮我收到的數據並將其正確解壓至Hello world!
。 - 如果我想看看使用鉻或Firefox的網站,我得到的是
H
(內容的其餘部分被切斷)。我確認服務器正確設置了標頭Content-Length
和Content-Encoding
。
這裏是我用來發送Hello world!
串代碼:
getRootR = return $ RepPlain $ toContent ("Hello world!" :: ByteString)
我打電話經與標準run
功能:
withWebApp $ Warp.run 3000
這是我的要求與netcat
發送,與它的工作原理:
GET/HTTP/1.0
Accept-Encoding: gzip,
和解壓的netcat的輸出結果:
$ nc --idle-timeout=1 localhost 3000 < test | tail -n1 | gunzip
nc: using stream socket
Hello world!
還有一兩件事:如果我使用Wireshark的數據包嗅探流量顯示爲HTTP流量,但Wireshark的告訴我(text/plain)Continuation or non-HTTP traffic
。這個數據包對我來說很不錯。
所以,出於某種原因,它只是不會有鉻和Firefox,並且我想不通爲什麼。任何人都可以幫助我解決這個問題,或者指引我走向正確的方向嗎?
只是一個盲目的鏡頭,當你GET GET HTTP://foo.bar/ HTTP時會發生什麼? – barsoap 2011-02-26 15:02:46
你的意思是如果我通過netcat使用HTTP 1.1而不是HTTP 1.0來嘗試它?我得到相同的結果。 – Cedric 2011-02-26 16:22:31
我敢打賭,這是經編gzip層的問題。所有這些東西都非常新,正在開發中。我會直接聯繫warp球員(特別是msnoyman),然後關閉gzip壓縮。 – sclv 2011-02-26 16:48:45