На момент написания статьи нет. Chrome (и, вероятно, другие браузеры слишком рано, чем позже) запретят XHR-syn c из-за плохого UX для пользователя (браузер зависает, если пользователь закрывает вкладку, и выполняется запрос XHR-syn c ).
Хотя есть несколько обходных путей, но у каждого есть и свои недостатки
- Используйте новый (и экспериментальный) sendBeacon API -
sendBeacon
просто «ставит в очередь» запрос, и это гарантирует, что запрос будет запущен даже при выгрузке страницы. Это тоже без блокировки UX. Некоторые ограничения в этом отношении заключаются в том, что вы не можете изменить заголовки запроса по умолчанию. Если вам НУЖНО добавить пользовательские заголовки, вам придется использовать BLOB-объект , и эти заголовки тоже должны быть совместимы с CORS. И не будет работать в старых браузерах (глядя на вас, IE) Use fetch()
API + keepalive
флаг - но это снова работает, если вы запрашиваете заголовки в CORS-safelist. По сути, если ваш запрос fetch()
имеет определенные заголовки запроса, то из соображений безопасности можно выполнить предварительный запрос. Если такой предварительный запрос сделан, то fetch()
+ keepalive
запрещается некоторыми браузерами. В основном вам нужно, чтобы ваш запрос был простым, чтобы это работало. Например, такие как вы не можете использовать content-type=application/json
здесь. Одним из способов решения этой проблемы является отправка данных в формате text/plain
и заставить ваш сервер обрабатывать их соответствующим образом. Подробнее о CORS простых и предварительных запросах можно найти здесь. - Chrome разрешает временный обходной путь, но он будет работать только до октября 2020 года. Подробнее об этом здесь .