Correção de falha de solicitações AJAX após navegar de volta no Safari

O Drupal e muitos outros sistemas usam um token exclusivo nos formulários para evitar ataques CSRF.

Depois de garantir que os cabeçalhos de Cache-Control corretos foram definidos e que o Safari estava realmente fazendo uma nova solicitação ao servidor para obter o formulário atualizado, o Safari ainda parecia estar enviando um token desatualizado com solicitações AJAX após navegar de volta no navegador, causando eles falhem.

O problema parece ser com o Safari preenchendo novamente os dados do formulário para campos ocultos e pode ser resolvido definindo o atributo autocomplete no campo que contém o token CSRF:

Drupal.behaviors.safariBackAjaxFix = {
attach
: function (context, settings) {
/**
* Fix for AJAX requests failing after hitting the back button in Safari.

* Without autocomplete disabled on the hidden form_build_id input,

* Safari resets the form state when navigating back, ignoring the fresh

* form_build_id it needs and using the old one that no longer works.

*/

$
('input[name="form_build_id"]').attr('autocomplete', 'off');
}
};

Depois disso, o Safari respeita o token atualizado na entrada e as solicitações AJAX são bem-sucedidas.