问题描述:系统中需要将http的页面重定向到https页面。此功能的由服务器配置来实现较为简单。但是系统中能够修改访问系统的端口号,当修改了https访问的端口号后,再通过http去访问页面。此时浏览器自动判断http请求需要重定向并且是301状态码(此时请求根本没到达服务器)。浏览器认为是301状态码,直接从缓存读取到了重定向的目标地址(也就是https地址)。但是这个时候的https端口号已经修改,导致访问不到系统。清理浏览器缓存后才能访问系统。
解决思路:禁止浏览器缓存
实现:
1.给页面添加meta标签启用Cache-Control控制。结果:失败。原因(个人观点尚未查证):meta控制缓存只针对添加了标签的页面,浏览器不缓存它
2.在服务器上添加响应头。结果:失败。原因:服务器全局添加了响应头之后所有的页面,资源文件都不缓存,但是重定向还是走的缓存。
3.将重定向的状态码修改为302.结果:成功。原理:301永久重定向会启用缓存,302临时重定向,不会启用缓存。
涉及:
浏览器的中输入url到显示页面的流程
浏览器缓存控制
前后端控制缓存的方式及结果
http状态码
服务器实现重定向