Urv*_*pta 16 safari redirect webkit http-redirect url-redirection
我正面临一个问题,其中url片段在Safari中的重定向时没有被保留,因为它们应该根据http规范.
设定 -
`/url1` redirects to `/url2#hash`
`/url2` redirects to `/url3`
Run Code Online (Sandbox Code Playgroud)
预期的行为 -
Hitting `/url1` should redirect to `/url3#hash`
Run Code Online (Sandbox Code Playgroud)
观察到的行为 -
Chrome/FF - Hitting `/url1` redirects to `/url3#hash`
Safari(11+) - Hitting `/url1` redirects to `/url3`
Run Code Online (Sandbox Code Playgroud)
我确实阅读过早期版本Safari报告的问题.我也尝试过在其他SO线程中发布的解决方案是徒劳的.
任何帮助表示赞赏.
我们今天遇到了同样的问题并提出了一些补充意见。我们还能够使用示例 Spring Boot 应用程序重现该问题:
@Controller
class RedirectController {
@GetMapping("/url1")
String url1() {
return "redirect:/url2#hash";
}
@GetMapping("/url2")
String url2() {
return "redirect:/url3";
}
@GetMapping("/url3")
@ResponseBody
String url3() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
当在 OSX 10.15.7 (Catalina) 上使用 Safari 14.1.2 运行时,点击/url1/会导致/url3不继承/url2. 但在 OSX 11.5.2 (Big Sur) 上使用 Safari 14.1.2(相同版本)执行此操作是可行的。击中/url1导致/url3#hash.
无论如何,击打/url1#this-is-fragment都会导致/url3#this-is-fragment。
我们的假设是,Safari(在 Catalina 上)仅当片段是在浏览器中创建而不是在服务器上创建时才会携带片段。Big Sur 上的 Safari 的行为似乎与其他浏览器(例如 Firefox 和 Chrome)类似。
基于该假设,一个“解决方案”是客户端重定向,例如通过元刷新:
@Controller
class RedirectController {
@GetMapping("/url1")
@ResponseBody
String url1ClientSideRedirect() {
return """
<html>
<head>
<meta http-equiv="refresh" content="0;URL='/url2#hash'">
</head>
<body></body>
</html>
""";
}
@GetMapping("/url2")
String url2() {
return "redirect:/url3";
}
@GetMapping("/url3")
@ResponseBody
String url3() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
我想任何使用 JavaScript 的客户端都window.location可以工作。
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |