From e03d171b14450fd06c55b5668b380dad53ffa75a Mon Sep 17 00:00:00 2001 From: "Paul J. Davis" Date: Thu, 10 Sep 2020 13:38:48 -0500 Subject: Fix missing Content-Type in buffered responses It turns out the "application/json" header is added downstream of the delayed response's StartFun which is skipped for buffered responses. This adds those headers back into the response. --- src/chttpd/src/chttpd.erl | 4 +++- src/chttpd/test/eunit/chttpd_delayed_test.erl | 2 +- src/couch/src/couch_httpd.erl | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/chttpd/src/chttpd.erl b/src/chttpd/src/chttpd.erl index fdca5c810..66613ec6a 100644 --- a/src/chttpd/src/chttpd.erl +++ b/src/chttpd/src/chttpd.erl @@ -877,9 +877,11 @@ end_delayed_json_response(#delayed_resp{buffer_response=true}=DelayedResp) -> #delayed_resp{ req = Req, code = Code, - headers = Headers, + headers = BaseHeaders, chunks = Chunks } = DelayedResp, + couch_httpd:initialize_jsonp(Req), + Headers = couch_httpd:maybe_add_default_headers(Req, BaseHeaders), {ok, Resp} = start_response_length(Req, Code, Headers, iolist_size(Chunks)), send(Resp, lists:reverse(Chunks)). diff --git a/src/chttpd/test/eunit/chttpd_delayed_test.erl b/src/chttpd/test/eunit/chttpd_delayed_test.erl index 64232dcf8..22c211847 100644 --- a/src/chttpd/test/eunit/chttpd_delayed_test.erl +++ b/src/chttpd/test/eunit/chttpd_delayed_test.erl @@ -17,7 +17,7 @@ setup() -> Hashed = couch_passwords:hash_admin_password(?PASS), ok = config:set("admins", ?USER, ?b2l(Hashed), _Persist=false), - ok = config:set("chttpd", "buffer_response", "true"), + ok = config:set("chttpd", "buffer_response", "true", _Persist=false), TmpDb = ?tempdb(), Addr = config:get("chttpd", "bind_address", "127.0.0.1"), Port = mochiweb_socket_server:get(chttpd, port), diff --git a/src/couch/src/couch_httpd.erl b/src/couch/src/couch_httpd.erl index 8f7fedd5e..67587d3c9 100644 --- a/src/couch/src/couch_httpd.erl +++ b/src/couch/src/couch_httpd.erl @@ -39,6 +39,7 @@ -export([check_max_request_length/1]). -export([handle_request/1]). -export([set_auth_handlers/0]). +-export([initialize_jsonp/1, maybe_add_default_headers/2]). -define(HANDLER_NAME_IN_MODULE_POS, 6). -define(MAX_DRAIN_BYTES, 1048576). -- cgit v1.2.1