Correção rápida e suja para o infame bug da página em branco do Safari

Para aqueles que ainda não sabem, o Safari tem um bug desagradável que pode fazer com que qualquer página do seu site se torne invisível se o seu servidor responder corretamente com um 304 em algumas circunstâncias.

Vá em frente, pesquise no Google , você encontrará todo o caso de teste e verá muitas pessoas reclamando desde o ano passado. Houve algumas atualizações do Safari durante todo esse tempo, mas por algum motivo a Apple parece não ter feito nada a respeito … ainda …

Bug da página em branco do Safari

Eu não tinha ideia sobre isso até recentemente, quando notei coisas estranhas acontecendo enquanto trabalhava em interiordelight.ro .

Naturalmente, como é um site de portfólio, temos algumas páginas que não mudam entre as solicitações subsequentes, e Express.js é inteligente o suficiente para responder com 304 quando necessário. O que é justo e civilizado, mas se você estiver usando o Safari e pressionar Cmd + R algumas vezes, acabará vendo uma página em branco, sem outra maneira de consertar do que limpar o cache e reiniciar o navegador. E você não pode pedir aos seus visitantes que façam isso.

Esta é a solução alternativa rápida e suja que você pode aplicar em todo o site em um aplicativo baseado em Express.js, em CoffeeScript:

app.all '*', (req, res, next) ->
agent
= req.headers['user-agent']
if agent.indexOf('Safari') > -1 and agent.indexOf('Chrome') is -1 and agent.indexOf('OPR') is -1
res
.header 'Cache-Control', 'no-cache, no-store, must-revalidate'
res
.header 'Pragma', 'no-cache'
res
.header 'Expires', 0
next()

Basicamente, o código acima punirá os navegadores Safari, instruindo-os a não armazenar o conteúdo em cache.

Lamento fazer algo assim porque gosto muito da velocidade do Safari, mas não há muito mais que possamos fazer até que os desenvolvedores da Apple façam seu trabalho como deveriam …