问题背景:
某客户反馈,容器服务的ingress他们同时支持http和https,ingress的ssl-redirect配置为false,但是目前它还会自动跳转到https,导致他们客户调用出现了问题。
问题分析:
1 拿到域名后使用curl -vvv http://域名/ -L 测试看了下并没有发现用户反馈有跳转的情况;
2 继续和用户沟通要他们的复现方法,大致是这样的:
(1)打开浏览器先第一次访问http,然后再访问https。
(2)然后再访问http它就跳回https了。
看到上述用户描述后,难道触发了缓存,按照用户反馈的情况我用无痕模式测试看了下,结果确实复现了,无痕模式下缓存是关闭的,看起来并不是触发了缓存什么的机制
3 开始chrom的浏览器的F12调试到network面板,看看刷新http请求,相关header请求是什么样,结果抓到了异常了,信息如下:
从请求的信息来看是HSTS而且有307的情况,这里就需要聊下什么是HSTS了,HSTS 是 HTTP 严格传输安全(HTTP Strict Transport Security) 的缩写。 这是一种网站用来声明他们只能使用安全连接(HTTPS)访问的方法。 如果一个网站声明了 HSTS 策略,浏览器必须拒绝所有的 HTTP 连接并阻止用户接受不安全的 SSL 证书。 目前大多数主流浏览器都支持 HSTS (只有一些移动浏览器无法使用它)。
HSTS 工作原理
通常,当您在 Web 浏览器中输入 URL 时,您会跳过协议部分。 例如,你输入的是 www.acunetix.com,而不是 http://www.acunetix.com。 在这种情况下,浏览器假设你想使用 HTTP 协议,所以它在这个阶段发出一个 HTTP 请求 到 www.acunetix.com,同时,Web Server 会返回 跳转 状态码将请求重定向到 HTTPS 站点。 接下来浏览器使用 HTTPS 连接到 www.acunetix.com。 这时 HSTS 安全策略保护开始使用 HTTP 响应头。
问题到这里就比较清晰了,是nginx-ingress开启了HSTS影响到了,社区的介绍:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#hsts