@psiklop

Объясните принцип срабатывания кода в service worker + php header?

Есть код в service worker для показа автономной страницы, когда нет сети.

self.addEventListener('fetch', (event) => {
const requestURL = new URL(event.request.url);
if (requestURL.origin == location.origin)  {

if (event.request.mode == 'navigate' && event.request.method == 'GET')
	event.respondWith(isReachable().then((r)=>r ? fetch(event.request):caches.match(OFFLINE_URL)));
}
});
function isReachable() {
  return fetch(location.origin, {method: 'HEAD', mode: 'no-cors'})
	.then((resp) =>  resp && (resp.ok || resp.type === 'opaque'))
	.catch((e)=>{});
}


Работает нормально, но код конфликтует с кодом php который служит для фикса от повторной отправки формы.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $_SESSION["post"] = $_POST;
    header("Location: ".$_SERVER["REQUEST_URI"]);
    exit;
}

$_SESSION["post"] исчезает. Я засек этот баг и в принципе могу его пофиксить.
Но меня интересует, что именно происходит и почему. Кто-нибудь может объснить ?
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
@psiklop Автор вопроса
Вообщем все предсказуемо: isReachable функция своим пред-запросом и удаляет сессию, я почему-то решил, что запрос с method: 'HEAD' не выполняет код PHP, но если вставить в самый верх index.php: if ($_SERVER['REQUEST_METHOD'] == 'HEAD') exit; тогда работает, но я не понимаю, что это значит для поисковых систем и ботов. Поэтому решил выправить isReachable так:
return fetch(location.origin+"/robots.txt", {method: 'HEAD', mode: 'no-cors'})...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы