Use helper functions for headers generation Following functions were introduced:
- add_headers/2 - basic_headers/2 - basic_headers_no_cors/2 COUCHDB-2966 Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/4f80b406 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/4f80b406 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/4f80b406 Branch: refs/heads/master Commit: 4f80b40666d9ac77d4bca038eb7bdbe9a9ff3a84 Parents: 9d28c57 Author: ILYA Khlopotov <iil...@ca.ibm.com> Authored: Tue Mar 8 08:29:58 2016 -0800 Committer: ILYA Khlopotov <iil...@ca.ibm.com> Committed: Tue Mar 15 10:14:17 2016 -0700 ---------------------------------------------------------------------- src/couch_httpd.erl | 50 ++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/4f80b406/src/couch_httpd.erl ---------------------------------------------------------------------- diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl index 645176b..d4b56f8 100644 --- a/src/couch_httpd.erl +++ b/src/couch_httpd.erl @@ -479,11 +479,8 @@ serve_file(Req, RelativePath, DocumentRoot) -> serve_file(#httpd{mochi_req=MochiReq}=Req, RelativePath, DocumentRoot, ExtraHeaders) -> log_request(Req, 200), - ResponseHeaders = server_header() - ++ couch_httpd_auth:cookie_auth_header(Req, []) - ++ ExtraHeaders, - ResponseHeaders1 = chttpd_cors:headers(Req, ResponseHeaders), - {ok, MochiReq:serve_file(RelativePath, DocumentRoot, ResponseHeaders1)}. + Headers = basic_headers(Req, ExtraHeaders), + {ok, MochiReq:serve_file(RelativePath, DocumentRoot, Headers)}. qs_value(Req, Key) -> qs_value(Req, Key, undefined). @@ -661,26 +658,22 @@ log_response(Code, Body) -> ok end. -start_response_length(#httpd{mochi_req=MochiReq}=Req, Code, Headers, Length) -> +start_response_length(#httpd{mochi_req=MochiReq}=Req, Code, Headers0, Length) -> log_request(Req, Code), couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - Headers1 = Headers ++ server_header() ++ - couch_httpd_auth:cookie_auth_header(Req, Headers), - Headers2 = chttpd_cors:headers(Req, Headers1), - Resp = MochiReq:start_response_length({Code, Headers2, Length}), + Headers1 = basic_headers(Req, Headers0), + Resp = MochiReq:start_response_length({Code, Headers1, Length}), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok end, {ok, Resp}. -start_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers) -> +start_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0) -> log_request(Req, Code), couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - CookieHeader = couch_httpd_auth:cookie_auth_header(Req, Headers), - Headers1 = Headers ++ server_header() ++ CookieHeader, - Headers2 = chttpd_cors:headers(Req, Headers1), - Resp = MochiReq:start_response({Code, Headers2}), + Headers1 = basic_headers(Req, Headers0), + Resp = MochiReq:start_response({Code, Headers1}), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok @@ -699,6 +692,8 @@ no_resp_conn_header([{Hdr, _}|Rest]) -> _ -> no_resp_conn_header(Rest) end. +http_1_0_keep_alive(#httpd{mochi_req = MochiReq}, Headers) -> + http_1_0_keep_alive(MochiReq, Headers); http_1_0_keep_alive(Req, Headers) -> KeepOpen = Req:should_close() == false, IsHttp10 = Req:get(version) == {1, 0}, @@ -708,14 +703,11 @@ http_1_0_keep_alive(Req, Headers) -> false -> Headers end. -start_chunked_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers) -> +start_chunked_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0) -> log_request(Req, Code), couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - Headers1 = http_1_0_keep_alive(MochiReq, Headers), - Headers2 = Headers1 ++ server_header() ++ - couch_httpd_auth:cookie_auth_header(Req, Headers1), - Headers3 = chttpd_cors:headers(Req, Headers2), - Resp = MochiReq:respond({Code, Headers3, chunked}), + Headers1 = add_headers(Req, Headers0), + Resp = MochiReq:respond({Code, Headers1, chunked}), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok @@ -741,8 +733,7 @@ send_response_no_cors(#httpd{mochi_req=MochiReq}=Req, Code, Headers, Body) -> log_request(Req, Code), couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), Headers1 = http_1_0_keep_alive(MochiReq, Headers), - Headers2 = Headers1 ++ server_header() ++ - couch_httpd_auth:cookie_auth_header(Req, Headers1), + Headers2 = basic_headers_no_cors(Req, Headers1), log_response(Code, Body), {ok, MochiReq:respond({Code, Headers2, Body})}. @@ -1120,6 +1111,19 @@ validate_bind_address(Address) -> _ -> throw({error, invalid_bind_address}) end. +add_headers(Req, Headers0) -> + Headers = basic_headers(Req, Headers0), + http_1_0_keep_alive(Req, Headers). + +basic_headers(Req, Headers0) -> + Headers = basic_headers_no_cors(Req, Headers0), + chttpd_cors:headers(Req, Headers). + +basic_headers_no_cors(Req, Headers) -> + Headers + ++ server_header() + ++ couch_httpd_auth:cookie_auth_header(Req, Headers). + %%%%%%%% module tests below %%%%%%%%