В контексте обработчика beforeunload
, какова функциональная разница между fetch(keep-alive: true)
и установкой атрибута src
тега img
, и какой из них является предпочтительным методом для выполнения запросов GET?
Справочная информация:
Я хочу отправить HTTP-запрос GET в обработчике beforeunload
в коде JavaScript.В документации Navigator.sendBeacon
обсуждается, насколько он хорош для этого варианта использования, , но
Метод sendBeacon () не предоставляет возможности настроить метод запроса
Очевидно, было несколько запросов на такую функциональность несколько лет назад, которые достигли кульминации в рекомендации , чтобы использовать fetch()
,Метод браузера, вызываемый изнутри sendBeacon
, с некоторыми определенными флагами, установленными для решения проблемы запроса unload
:
Приложения, для которых требуются нестандартные настройки для таких запросов, должны использовать API FETCH
сфлаг keep-alive установлен в true
fetch(url, {
method: ...,
body: ...,
headers: ...,
credentials: 'include',
mode: 'cors',
keep-alive: true,
})
Насколько я могу судить, этот тип вызова будет функционально эквивалентен Navigator.sendBeacon
, при этом значение ключа будет keep-alive: true
.
Видимо, тег HTML <img>
также использует keep-alive: true
в соответствии со спецификацией (выделено мной):
Запрос связан сфлаг keepalive ... Это можно использовать для разрешения запросажить объект настроек среды, например, navigator.sendBeacon и элемент HTML img установить этот флаг
Насколько я понимаю, эта документация заключается в том, что выполнение запроса GET
на unload
через img
атрибут *1056* элемента функционально эквивалентен вызову fetch()
с keep-alive: true
, что само по себе 1061 * функционально эквивалентно вызову sendBeacon
(если sendBeacon
может сделать GET
запросы).
Это точно?