Bug #9591 ยป 0001-WT-9591-make-Http-Request-urlScheme-look-at-X-Forwar.patch
| ReleaseNotes.html | ||
|---|---|---|
|
the way you build Wt, the way you configure Wt or the Wt API and
|
||
|
behaviour.
|
||
|
<h2>Release 4.7.0 (March 2022)</h2>
|
||
|
<ul>
|
||
|
<li>
|
||
|
<a href="https://redmine.webtoolkit.eu/issues/9591" target="_blank">Issue #9591</a>:
|
||
|
<a href="https://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Http_1_1Request.html#a970b7d266c6bead893ec6334520807bf">
|
||
|
Http::Request::urlScheme()
|
||
|
</a> now looks at <code>X-Forwarded-Proto</code> if Wt is behind a trusted reverse proxy.
|
||
|
</li>
|
||
|
</ul>
|
||
|
<h2>Release 4.6.1 (December 23, 2021)</h2>
|
||
|
<p>
|
||
| src/Wt/Http/Request.C | ||
|---|---|---|
|
std::string Request::urlScheme() const
|
||
|
{
|
||
|
return request_ ? request_->urlScheme() : std::string();
|
||
|
if (!request_)
|
||
|
return std::string();
|
||
|
WServer *server = WServer::instance();
|
||
|
return request_->urlScheme(server->configuration());
|
||
|
}
|
||
|
std::string Request::headerValue(const std::string& field) const
|
||
| src/Wt/Http/Request.h | ||
|---|---|---|
|
/*! \brief Returns the url scheme used.
|
||
|
*
|
||
|
* This is either <tt>"http"</tt> or <tt>"https"</tt>
|
||
|
*
|
||
|
* If we're behind a trusted reverse proxy, the value of X-Forwarded-Proto
|
||
|
* will be used if it is present.
|
||
|
*/
|
||
|
std::string urlScheme() const;
|
||
| src/Wt/WEnvironment.C | ||
|---|---|---|
|
void WEnvironment::updateUrlScheme(const WebRequest& request)
|
||
|
{
|
||
|
urlScheme_ = str(request.urlScheme());
|
||
|
Configuration& conf = session_->controller()->configuration();
|
||
|
if (conf.behindReverseProxy() ||
|
||
|
conf.isTrustedProxy(request.remoteAddr())) {
|
||
|
std::string forwardedProto = str(request.headerValue("X-Forwarded-Proto"));
|
||
|
if (!forwardedProto.empty()) {
|
||
|
std::string::size_type i = forwardedProto.rfind(',');
|
||
|
if (i == std::string::npos)
|
||
|
urlScheme_ = forwardedProto;
|
||
|
else
|
||
|
urlScheme_ = forwardedProto.substr(i+1);
|
||
|
}
|
||
|
}
|
||
|
urlScheme_ = request.urlScheme(conf);
|
||
|
}
|
||
| src/web/WebRequest.C | ||
|---|---|---|
|
return host;
|
||
|
}
|
||
|
std::string WebRequest::urlScheme(const Configuration &conf) const
|
||
|
{
|
||
|
if (conf.behindReverseProxy() ||
|
||
|
conf.isTrustedProxy(remoteAddr())) {
|
||
|
std::string forwardedProto = str(headerValue("X-Forwarded-Proto"));
|
||
|
if (!forwardedProto.empty()) {
|
||
|
std::string::size_type i = forwardedProto.rfind(',');
|
||
|
if (i == std::string::npos)
|
||
|
return forwardedProto;
|
||
|
else
|
||
|
return forwardedProto.substr(i+1);
|
||
|
}
|
||
|
}
|
||
|
return urlScheme();
|
||
|
}
|
||
|
}
|
||
| src/web/WebRequest.h | ||
|---|---|---|
|
std::string hostName(const Configuration & conf) const;
|
||
|
std::string urlScheme(const Configuration & conf) const;
|
||
|
protected:
|
||
|
const EntryPoint *entryPoint_;
|
||