reapply: location-header: tweak location header handling

- Fix potentially sending the location header into PSOL twice.
- Be more thorough when unsetting the location header

Attempts to fix #725

from oschaaf
This commit is contained in:
Jeffrey Crowell
2015-12-31 10:38:38 -05:00
committed by Jeff Kaufman
parent 749511c5c3
commit de82e87246
+6 -5
View File
@@ -303,6 +303,12 @@ ngx_int_t ps_base_fetch_handler(ngx_http_request_t* r) {
STR_CASE_EQ_LITERAL(header->key, "Last-Modified") || STR_CASE_EQ_LITERAL(header->key, "Last-Modified") ||
STR_CASE_EQ_LITERAL(header->key, "Expires"))))) { STR_CASE_EQ_LITERAL(header->key, "Expires"))))) {
header->hash = 0; header->hash = 0;
if (STR_CASE_EQ_LITERAL(header->key, "Location")) {
// There's a possible issue with the location header, where setting
// the hash to 0 is not enough. See:
// https://github.com/nginx/nginx/blob/master/src/http/ngx_http_header_filter_module.c#L314
r->headers_out.location = NULL;
}
} }
} }
} else { } else {
@@ -453,11 +459,6 @@ void copy_response_headers_from_ngx(const ngx_http_request_t* r,
headers->set_status_code(r->headers_out.status); headers->set_status_code(r->headers_out.status);
if (r->headers_out.location != NULL) {
headers->Add(HttpAttributes::kLocation,
str_to_string_piece(r->headers_out.location->value));
}
// Manually copy over the content type because it's not included in // Manually copy over the content type because it's not included in
// request_->headers_out.headers. // request_->headers_out.headers.
headers->Add(HttpAttributes::kContentType, headers->Add(HttpAttributes::kContentType,