nghttpx: Ignore port when rewriting location header
This commit is contained in:
parent
ccfa13cd5b
commit
9afebcb229
20
src/http2.cc
20
src/http2.cc
|
@ -457,27 +457,15 @@ std::string rewrite_location_uri(const std::string& uri,
|
||||||
if((u.field_set & (1 << UF_HOST)) == 0) {
|
if((u.field_set & (1 << UF_HOST)) == 0) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
std::string host;
|
|
||||||
copy_url_component(host, &u, UF_HOST, uri.c_str());
|
|
||||||
if(u.field_set & (1 << UF_PORT)) {
|
|
||||||
host += ":";
|
|
||||||
host += util::utos(u.port);
|
|
||||||
if(host != request_host) {
|
|
||||||
// :authority or host have "host", but host in location header
|
|
||||||
// field may have "host:port".
|
|
||||||
auto field = &u.field_data[UF_HOST];
|
auto field = &u.field_data[UF_HOST];
|
||||||
if(!util::streq(request_host.c_str(), request_host.size(),
|
if(!util::startsWith(std::begin(request_host), std::end(request_host),
|
||||||
&uri[field->off], field->len) ||
|
&uri[field->off], &uri[field->off] + field->len) ||
|
||||||
downstream_port != u.port) {
|
(request_host.size() != field->len &&
|
||||||
return "";
|
request_host[field->len] != ':')) {
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(host != request_host) {
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
std::string res = upstream_scheme;
|
std::string res = upstream_scheme;
|
||||||
res += "://";
|
res += "://";
|
||||||
auto field = &u.field_data[UF_HOST];
|
|
||||||
res.append(&uri[field->off], field->len);
|
res.append(&uri[field->off], field->len);
|
||||||
if(upstream_scheme == "http") {
|
if(upstream_scheme == "http") {
|
||||||
if(upstream_port != 80) {
|
if(upstream_port != 80) {
|
||||||
|
|
Loading…
Reference in New Issue