anchor.diff:              throw({not_found, missing});
           {Type, Bin} ->
               Resp = Req:respond({200, [
  -                {"content-type", Type},
  -                {"content-length", integer_to_list(couch_doc:bin_size(Bin))}
  -            ], chunked}),
  +                {"Cache-Control", "must-revalidate"},
  +                {"Content-Type", Type},
  +                {"Content-Length", integer_to_list(couch_doc:bin_size(Bin))}
  +            ] ++ server_header(), chunked}),
               couch_doc:bin_foldl(Bin,
                   fun(BinSegment, []) ->
                       ok = Resp:write_chunk(BinSegment),
  
positive.code:     {500, error, Error}.
  
  send_error(Req, {method_not_allowed, Methods}) ->
      {ok, Req:respond({405, [{"Allow", Methods}], <<>>})};
  send_error(Req, {modified, Etag}) ->
      {ok, Req:respond({412, [{"Etag", Etag}], <<>>})};
  send_error(Req, {not_modified, Etag}) ->
      {ok, Req:respond({304, [{"Etag", Etag}], <<>>})};
  send_error(Req, Error) ->
      {Code, Json} = error_to_json(Error),
      ?LOG_INFO("HTTP Error (code ~w): ~p", [Code, Error]),
  
negative.code:         true  -> "application/json";
          false -> "text/plain;charset=utf-8"
      end.
  
  server_header() ->
      [{"Server", "CouchDB/" ++ couch_server:get_version() ++
                  " (Erlang OTP/" ++ erlang:system_info(otp_release) ++ ")"}].
  