Rails请求标头数据不更新而不刷新



当我第一次到达站点时,request.headers[HTTP_ACCEPT]的结果是"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"

但在内部链路请求之间,它显示text/html, application/xhtml+xml直到我硬刷新页面。

是因为涡轮连杆还是其他问题?

这是涡轮连杆的问题。默认情况下,涡轮链接的XMLHttpRequest只发送标题"text/html,application/xhtml+xml",但您可以通过捕获请求启动事件来发送"images/web"标题,如下所示:

document.addEventListener("turbolinks:request-start", function(event) {
var xhr = event.data.xhr
xhr.setRequestHeader("Accept", "image/webp")
})

问题是如何从javascript中知道浏览器是否接受webp图像以将"images/web"标头发送到服务器。

您可以使用Modernize库或自定义函数,在尝试解码小的webp图像时猜测webp是否可用,如下所述:https://developers.google.com/speed/webp/faq.然而,这些解决方案增加了一定的开销,排除了webp图像最快加载时间的好处。

也许,最有效的解决方案是在服务器端创建一个布尔cookie来存储是否接受webp图像。cookie与对服务器的第一个浏览器GET调用一起存储。在随后的涡轮链接调用中,您可以在javascript代码中检查此cookie:

document.addEventListener("turbolinks:request-start", function(event) {
browserAcceptsWebp = document.cookie.includes('webp_available=true');
if (browserAcceptsWebp) {
var xhr = event.data.xhr;
xhr.setRequestHeader("Accept", "image/webp");
}
});

最新更新