shrpx: Relay Connection: upgrade header field for HTTP/1.1 connections
This commit is contained in:
parent
d9611e65ac
commit
ae0533334c
|
@ -118,14 +118,18 @@ int HttpDownstreamConnection::push_request_headers()
|
||||||
hdrs += downstream_->get_request_path();
|
hdrs += downstream_->get_request_path();
|
||||||
hdrs += " ";
|
hdrs += " ";
|
||||||
hdrs += "HTTP/1.1\r\n";
|
hdrs += "HTTP/1.1\r\n";
|
||||||
|
bool connection_upgrade = false;
|
||||||
std::string via_value;
|
std::string via_value;
|
||||||
std::string xff_value;
|
std::string xff_value;
|
||||||
const Headers& request_headers = downstream_->get_request_headers();
|
const Headers& request_headers = downstream_->get_request_headers();
|
||||||
for(Headers::const_iterator i = request_headers.begin();
|
for(Headers::const_iterator i = request_headers.begin();
|
||||||
i != request_headers.end(); ++i) {
|
i != request_headers.end(); ++i) {
|
||||||
if(util::strieq((*i).first.c_str(), "X-Forwarded-Proto") ||
|
if(util::strieq((*i).first.c_str(), "connection")) {
|
||||||
|
if(util::strifind((*i).second.c_str(), "upgrade")) {
|
||||||
|
connection_upgrade = true;
|
||||||
|
}
|
||||||
|
} else if(util::strieq((*i).first.c_str(), "X-Forwarded-Proto") ||
|
||||||
util::strieq((*i).first.c_str(), "keep-alive") ||
|
util::strieq((*i).first.c_str(), "keep-alive") ||
|
||||||
util::strieq((*i).first.c_str(), "connection") ||
|
|
||||||
util::strieq((*i).first.c_str(), "proxy-connection")) {
|
util::strieq((*i).first.c_str(), "proxy-connection")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -149,6 +153,8 @@ int HttpDownstreamConnection::push_request_headers()
|
||||||
}
|
}
|
||||||
if(downstream_->get_request_connection_close()) {
|
if(downstream_->get_request_connection_close()) {
|
||||||
hdrs += "Connection: close\r\n";
|
hdrs += "Connection: close\r\n";
|
||||||
|
} else if(connection_upgrade) {
|
||||||
|
hdrs += "Connection: upgrade\r\n";
|
||||||
}
|
}
|
||||||
if(get_config()->add_x_forwarded_for) {
|
if(get_config()->add_x_forwarded_for) {
|
||||||
hdrs += "X-Forwarded-For: ";
|
hdrs += "X-Forwarded-For: ";
|
||||||
|
|
|
@ -594,6 +594,7 @@ int HttpsUpstream::on_downstream_header_complete(Downstream *downstream)
|
||||||
if(LOG_ENABLED(INFO)) {
|
if(LOG_ENABLED(INFO)) {
|
||||||
DLOG(INFO, downstream) << "HTTP response header completed";
|
DLOG(INFO, downstream) << "HTTP response header completed";
|
||||||
}
|
}
|
||||||
|
bool connection_upgrade = false;
|
||||||
std::string via_value;
|
std::string via_value;
|
||||||
char temp[16];
|
char temp[16];
|
||||||
snprintf(temp, sizeof(temp), "HTTP/%d.%d ",
|
snprintf(temp, sizeof(temp), "HTTP/%d.%d ",
|
||||||
|
@ -604,8 +605,11 @@ int HttpsUpstream::on_downstream_header_complete(Downstream *downstream)
|
||||||
hdrs += "\r\n";
|
hdrs += "\r\n";
|
||||||
for(Headers::const_iterator i = downstream->get_response_headers().begin();
|
for(Headers::const_iterator i = downstream->get_response_headers().begin();
|
||||||
i != downstream->get_response_headers().end(); ++i) {
|
i != downstream->get_response_headers().end(); ++i) {
|
||||||
if(util::strieq((*i).first.c_str(), "keep-alive") || // HTTP/1.0?
|
if(util::strieq((*i).first.c_str(), "connection")) {
|
||||||
util::strieq((*i).first.c_str(), "connection") ||
|
if(util::strifind((*i).second.c_str(), "upgrade")) {
|
||||||
|
connection_upgrade = true;
|
||||||
|
}
|
||||||
|
} else if(util::strieq((*i).first.c_str(), "keep-alive") || // HTTP/1.0?
|
||||||
util:: strieq((*i).first.c_str(), "proxy-connection")) {
|
util:: strieq((*i).first.c_str(), "proxy-connection")) {
|
||||||
// These are ignored
|
// These are ignored
|
||||||
} else if(!get_config()->no_via &&
|
} else if(!get_config()->no_via &&
|
||||||
|
@ -628,6 +632,8 @@ int HttpsUpstream::on_downstream_header_complete(Downstream *downstream)
|
||||||
downstream->get_request_minor() <= 0) {
|
downstream->get_request_minor() <= 0) {
|
||||||
// We add this header for HTTP/1.0 or HTTP/0.9 clients
|
// We add this header for HTTP/1.0 or HTTP/0.9 clients
|
||||||
hdrs += "Connection: Keep-Alive\r\n";
|
hdrs += "Connection: Keep-Alive\r\n";
|
||||||
|
} else if(connection_upgrade) {
|
||||||
|
hdrs += "Connection: upgrade\r\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hdrs += "Connection: close\r\n";
|
hdrs += "Connection: close\r\n";
|
||||||
|
|
Loading…
Reference in New Issue