当通过 https 发出原始请求时,在 Location-header 中获取 http
Getting http in the Location-header when the original request was made over https
我的问题:
1) 当浏览器的原始请求是使用 https 发出时,为什么我在 Location-header 中得到 http 作为方案?
2) 这是 wildfly 负载均衡器问题吗?
My Request Header is:
method: POST
scheme: https
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 39
content-type: application/x-www-form-urlencoded
origin: https://10.43.201.207
referer: https://10.43.201.207/myapp/login.html
My Response Header is:
content-length: 0
date: Thu, 03 Jan 2019 04:55:42 GMT
location: http://10.43.201.207/myapp/dashboard.html?init=1
server: WildFly/12
set-cookie: APP_AUTH=leTPWYd1222zsrrtRRtgpuEWEWc7pR0CBuNPYPT5QHbGn_Db7ICK; path=/; secure; HttpOnly
set-cookie: JSESSIONID="leTee33333PWYdSDSDweetRRtgpuc7pR0CBuNPYPT5QHbGn_Db7ICK.master-0:master-server"; Version=1; Path=/myapp; Secure; HttpOnly
status: 302
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Undertow/1
x-xss-protection: 1; mode=block
负载均衡器是否正在剥离 TLS 并将请求作为 HTTP 转发到应用程序?如果是这样,那么该应用程序在执行重定向时,可能使用与接收请求相同的协议。
如果是这种情况,要么让应用强制执行 https
,要么让负载均衡器重写返回的响应。
您可能需要设置 proxy-address-forwarding="true"
and/or request_header_add X-Forwarded-Proto https
.
以上问题的详细解决方案说明如下:
我们有一个负载均衡器位于两台 Wildfly 服务器前面。负载均衡器处理 SSL 握手并强制所有流量通过 https
,wildfly 节点上没有证书,负载均衡器和服务器之间的流量未加密,wildfly 节点对 SSL.The 一无所知负载均衡器和 Wildfly 节点之间的通信是通过 http
协议。
当用户点击受保护的页面时,例如https://someip/app
请求流程如下:
- 客户端浏览器通过
https
到负载均衡器
- 通过
http
协议将负载均衡器加载到 wildlfy 节点。
- 在 wildlfy 服务器节点的
http
中添加了 proxy-address-forwarding="true"
听众
另一种选择是让负载均衡器将 Strict-Transport-Security header 添加到服务器响应中,例如:
Strict-Transport-Security max-age=300;
这将有效地告诉客户他应该始终使用 https 联系您的服务器。
我的问题:
1) 当浏览器的原始请求是使用 https 发出时,为什么我在 Location-header 中得到 http 作为方案?
2) 这是 wildfly 负载均衡器问题吗?
My Request Header is:
method: POST
scheme: https
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 39
content-type: application/x-www-form-urlencoded
origin: https://10.43.201.207
referer: https://10.43.201.207/myapp/login.html
My Response Header is:
content-length: 0
date: Thu, 03 Jan 2019 04:55:42 GMT
location: http://10.43.201.207/myapp/dashboard.html?init=1
server: WildFly/12
set-cookie: APP_AUTH=leTPWYd1222zsrrtRRtgpuEWEWc7pR0CBuNPYPT5QHbGn_Db7ICK; path=/; secure; HttpOnly
set-cookie: JSESSIONID="leTee33333PWYdSDSDweetRRtgpuc7pR0CBuNPYPT5QHbGn_Db7ICK.master-0:master-server"; Version=1; Path=/myapp; Secure; HttpOnly
status: 302
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: Undertow/1
x-xss-protection: 1; mode=block
负载均衡器是否正在剥离 TLS 并将请求作为 HTTP 转发到应用程序?如果是这样,那么该应用程序在执行重定向时,可能使用与接收请求相同的协议。
如果是这种情况,要么让应用强制执行 https
,要么让负载均衡器重写返回的响应。
您可能需要设置 proxy-address-forwarding="true"
and/or request_header_add X-Forwarded-Proto https
.
以上问题的详细解决方案说明如下:
我们有一个负载均衡器位于两台 Wildfly 服务器前面。负载均衡器处理 SSL 握手并强制所有流量通过 https
,wildfly 节点上没有证书,负载均衡器和服务器之间的流量未加密,wildfly 节点对 SSL.The 一无所知负载均衡器和 Wildfly 节点之间的通信是通过 http
协议。
当用户点击受保护的页面时,例如https://someip/app
请求流程如下:
- 客户端浏览器通过
https
到负载均衡器
- 通过
http
协议将负载均衡器加载到 wildlfy 节点。 - 在 wildlfy 服务器节点的
http
中添加了proxy-address-forwarding="true"
听众
另一种选择是让负载均衡器将 Strict-Transport-Security header 添加到服务器响应中,例如:
Strict-Transport-Security max-age=300;
这将有效地告诉客户他应该始终使用 https 联系您的服务器。