예스 웹 프레임 워크를 사용하여 하스켈에서 웹 응용 프로그램을 개발 중입니다. (이 문제는 하스켈 및/또는 예 단지 완전성을 위해 이것을 언급합니다.) 요청을 처리하기 위해 Warp 서버를 사용하고 있으며 GZIP 압축과 관련된 Chromium/Firefox (Opera가 아닌)를 사용하여 사이트에 액세스 할 때 이상한 문제가 발생합니다.GZIP 압축 (브라우저에서만 가능)을 사용하여 HTTP 요청에서 내용이 잘림
Hello world!
을 반환하는 사이트를 설정했습니다. 내가 netcat
를 사용하여 사이트를 가져올 내가 gzip
에 Accept-Encoding
을 설정하면
- , 내가 올바른 결과를 얻을. 즉, 내가받은 데이터의 압축을 풀 수 있고 올바르게 압축을 해제하면
Hello world!
이됩니다. - Chromium 또는 Firefox를 사용하여 사이트를보고 싶다면
H
(나머지 콘텐츠는 잘림)입니다.Content-Length
및Content-Encoding
헤더가 서버에 의해 올바르게 설정되었는지 확인했습니다.withWebApp $ Warp.run 3000
이 난 요청입니다 :
getRootR = return $ RepPlain $ toContent ("Hello world!" :: ByteString)
내가 표준
run
기능 워프를 호출하고 있습니다 : 여기
내가 Hello world!
문자열을 보낼 때 사용하는 코드입니다 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 트래픽으로 표시하지만, 와이어 샤크 나에게 (text/plain)Continuation or non-HTTP traffic
것을 요구하면. 그 패킷은 나에게 힘들어 보인다.
그래서 Chromium이나 Firefox에서는 작동하지 않으며 그 이유를 알 수 없습니다. 아무도 이걸로 나를 도와주지 않거나 올바른 방향으로 나를 가리킬 수 있습니까?
맹목적인 순간, 'http://foo.bar/ HTTP/1.1'을 (를) 얻으면 어떻게됩니까? – barsoap
netcat을 통해 HTTP 1.0 대신 HTTP 1.1을 사용하면 어떻게됩니까? 나는 같은 결과를 얻는다. – Cedric
워프 gzip 레이어 문제입니다. 이 모든 것들은 매우 새롭고 개발 중입니다. 난 warp들 (특히 msnoyman)에게 직접 연락을하고, 그때까지 gzip 압축을 끄십시오. – sclv