[erlang-questions] Patch to inets for correct handling of HTTP's Conditional GET

Frej Drejhammar frej.drejhammar@REDACTED
Sun Aug 19 20:38:38 CEST 2007


The http client in inets for R11B-5 does not handle conditional get
correctly. Doing a http:request/4 with the "If-None-Match" and
"If-Modified-Since" headers set such that the server gives a 304 "Not
Modified" reply, the httpc_handler still expects to receive a
body. This eventually leads to a timeout. The attached bug.erl
demonstrates the problem by retrieving the slashdot rss-feed.

The included patch seems to fix the problem, although I'm not
completely sure about its correctness when pipelining is used.


Frej Drejhammar

--- otp_src_R11B-5/lib/inets/src/http_client/httpc_handler.erl  2007-06-11 12:25:27.000000000 +0200
+++ otp_src_R11B-5.orig/lib/inets/src/http_client/httpc_handler.erl   2007-08-19 18:09:16.000000000 +0200
@@ -489,6 +489,9 @@
     {NewBody, NewRequest}= stream(Body, State#state.request, Code),
     handle_response(State#state{body = NewBody, request = NewRequest}).
+handle_http_body(<<>>, State = #state{status_line = {_,304, _}}) ->
+    handle_response(State#state{body = <<>>});
 handle_http_body(<<>>, State = #state{request = #request{method = head}}) ->
     handle_response(State#state{body = <<>>});

-------------- next part --------------
A non-text attachment was scrubbed...
Name: bug.erl
Type: application/octet-stream
Size: 1138 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20070819/4ac4f1f9/attachment.obj>

More information about the erlang-questions mailing list