СÑаном на заÑаз ми вже деÑо знаÑмо пÑо fetch.
РозглÑнÑмо ÑеÑÑÑ API, Ñоб Ð¾Ñ Ð¾Ð¿Ð¸Ñи вÑÑ Ð¹Ð¾Ð³Ð¾ можливоÑÑÑ.
ÐвеÑнÑÑÑ ÑвагÑ: бÑлÑÑÑÑÑÑ Ð· ÑиÑ
опÑÑй викоÑиÑÑовÑÑÑÑÑÑ ÑÑдко. Ðи можеÑе пÑопÑÑÑиÑи Ñей ÑоздÑл Ñ Ð²Ñе одно без пÑоблем коÑиÑÑÑваÑиÑÑ fetch.
Тим не менÑ, коÑиÑно знаÑи, Ñо може ÑобиÑи fetch, ÑÐ¾Ð¼Ñ ÑкÑо виникне Ñака необÑ
ÑднÑÑÑÑ, завжди можна повеÑнÑÑиÑÑ Ð´Ð¾ ÑÑÑÑ ÑÑаÑÑÑ Ñ ÑозÑбÑаÑиÑÑ Ð´ÐµÑалÑнÑÑе.
ÐÑÑ Ð¿Ð¾Ð²Ð½Ð¸Ð¹ ÑпиÑок вÑÑÑ
можливиÑ
опÑÑй fetch з ÑÑ
Ñиповими знаÑеннÑми (алÑÑеÑнаÑиви в коменÑаÑÑÑ
):
let promise = fetch(url, {
method: "GET", // POST, PUT, DELETE Ñа ÑнÑÑ
headers: {
// знаÑÐµÐ½Ð½Ñ ÑÑого Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ Ð·Ð°Ð·Ð²Ð¸Ñай вÑÑановлÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑно,
// залежно вÑд ÑÑла запиÑÑ
"Content-Type": "text/plain;charset=UTF-8"
},
body: undefined // string, FormData, Blob, BufferSource або URLSearchParams
referrer: "about:client", // або "", Ñоб не поÑилаÑи заголовок Referer,
// або URL з поÑоÑного джеÑела
referrerPolicy: "strict-origin-when-cross-origin", // no-referrer-when-downgrade, no-referrer, origin, same-origin...
mode: "cors", // same-origin, no-cors
credentials: "same-origin", // omit, include
cache: "default", // no-store, reload, no-cache, force-cache або only-if-cached
redirect: "follow", // manual, error
integrity: "", // конÑÑолÑна ÑÑма, напÑиклад "sha256-abcdef1234567890"
keepalive: false, // true
signal: undefined, // AbortController, Ñоб пеÑеÑваÑи запиÑ
window: window // null
});
ÐеÑелÑк вÑажаÑ, Ñи не Ñак?
Ðи повнÑÑÑÑ Ð²Ð¸ÑвÑÑлили method, headers Ñа body Ñ Ð³Ð»Ð°Ð²Ñ Fetch.
ÐпÑÑÑ signal виÑвÑÑлена Ñ Ð³Ð»Ð°Ð²Ñ Fetch: ÐеÑеÑиваннÑ.
Ð¢ÐµÐ¿ÐµÑ ÑозглÑнÑмо ÑеÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑей.
referrer, referrerPolicy
Ð¦Ñ Ð¾Ð¿ÑÑÑ Ð²ÐºÐ°Ð·ÑÑÑÑ, Ñк fetch вÑÑановлÑÑ HTTP-заголовок Referer.
ÐазвиÑай Ñей заголовок вÑÑановлÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑно Ñ Ð¼ÑÑÑиÑÑ Ð°Ð´ÑеÑÑ ÑÑоÑÑнки, з ÑÐºÐ¾Ñ Ð±Ñв зÑоблений запиÑ. У бÑлÑÑоÑÑÑ ÑÑенаÑÑÑв вÑн Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð½Ðµ важливий, ÑнодÑ, з меÑÐ¾Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸, Ñ ÑÐµÐ½Ñ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñи або ÑкоÑоÑиÑи його.
ÐпÑÑÑ referrer дозволÑÑ Ð·Ð°Ð´Ð°Ñи бÑдÑ-Ñкий Referer (в межаÑ
поÑоÑного джеÑела) або видалиÑи його..
Щоб не надÑилаÑи Referer, задайÑе поÑожнÑй ÑÑдок:
fetch('/page', {
referrer: "" // Ð½ÐµÐ¼Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ Referer
});
Щоб вÑÑановиÑи ÑнÑÑ URL-адÑеÑÑ Ð² Ð¼ÐµÐ¶Ð°Ñ Ð¿Ð¾ÑоÑного джеÑела:
fetch('/page', {
// пÑипÑÑкаÑÑи, Ñо ми на ÑÑоÑÑнÑÑ https://javascript.info
// ми можемо задаÑи бÑдÑ-Ñкий заголовок Referer, але ÑÑлÑки в межаÑ
поÑоÑного джеÑела
referrer: "https://javascript.info/anotherpage"
});
ÐпÑÑÑ referrerPolicy Ð·Ð°Ð´Ð°Ñ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ñ Ð¿Ñавила Ð´Ð»Ñ Referer..
ÐапиÑи подÑлÑÑÑÑÑÑ Ð½Ð° 3 Ñипи:
- ÐÐ°Ð¿Ð¸Ñ Ð½Ð° Ñе ж джеÑело.
- ÐÐ°Ð¿Ð¸Ñ Ð½Ð° ÑнÑе джеÑело.
- ÐÐ°Ð¿Ð¸Ñ Ð· HTTPS на HTTP (з безпеÑного на небезпеÑний пÑоÑокол).
Ðа вÑдмÑÐ½Ñ Ð²Ñд опÑÑÑ referrer, Ñка дозволÑÑ Ð·Ð°Ð´Ð°Ñи конкÑеÑне знаÑÐµÐ½Ð½Ñ Referer, referrerPolicy вказÑÑ Ð±ÑаÑзеÑÑ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ñ Ð¿Ñавила Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ÑÐ¸Ð¿Ñ Ð·Ð°Ð¿Ð¸ÑÑ.
ÐÐ¾Ð¶Ð»Ð¸Ð²Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ñ Referrer Policy specification:
"strict-origin-when-cross-origin"â Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв до однакового джеÑела надÑилаÑи повнийReferer, Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв мÑж ÑÑзними джеÑелами надÑилаÑи лиÑе джеÑело, ÑкÑо Ñе не HTTPSâHTTP запиÑ, ÑÐ¾Ð´Ñ Ð½ÑÑого не надÑилаÑи."no-referrer-when-downgrade"â Ñипове знаÑеннÑ: повнийRefererнадÑилаÑÑÑÑÑ Ð·Ð°Ð²Ð¶Ð´Ð¸, Ñ Ñба Ñо ми не надÑилаÑмо Ð·Ð°Ð¿Ð¸Ñ Ñз HTTPS на HTTP (на Ð¼ÐµÐ½Ñ Ð±ÐµÐ·Ð¿ÐµÑний пÑоÑокол)."no-referrer"â нÑколи не надÑилаÑиReferer."origin"â надÑилаÑи лиÑе джеÑело вReferer, а не Ð¿Ð¾Ð²Ð½Ñ URL-адÑеÑÑ ÑÑоÑÑнки, напÑиклад лиÑеhttp://site.comзамÑÑÑÑhttp://site.com/path."origin-when-cross-origin"â надÑилаÑи повнийRefererÐ´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв до однакового джеÑела, але лиÑе ÑаÑÑÐ¸Ð½Ñ Ð´Ð¶ÐµÑела Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв мÑж ÑÑзними джеÑелами (Ñк показано виÑе)."same-origin"â надÑилаÑи повнийRefererÐ´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв до однакового джеÑела, але безRefererÐ´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв мÑж ÑÑзними джеÑелами."strict-origin"â надÑилаÑи лиÑе джеÑело, а неRefererÐ´Ð»Ñ HTTPSâHTTP запиÑÑв."unsafe-url"â завжди надÑилаÑи Ð¿Ð¾Ð²Ð½Ñ URL-адÑеÑÑ Ð²Referer, навÑÑÑ Ð´Ð»Ñ HTTPSâHTTP запиÑÑв.
ÐÑÑ ÑаблиÑÑ Ð·Ñ Ð²ÑÑма комбÑнаÑÑÑми:
| ÐнаÑÐµÐ½Ð½Ñ | Ðо Ñого ж джеÑела | Ðо ÑнÑого джеÑела | HTTPSâHTTP |
|---|---|---|---|
"no-referrer" |
- | - | - |
"no-referrer-when-downgrade" |
full | full | - |
"origin" |
origin | origin | origin |
"origin-when-cross-origin" |
full | origin | origin |
"same-origin" |
full | - | - |
"strict-origin" |
origin | origin | - |
"strict-origin-when-cross-origin" або "" (Ñипове знаÑеннÑ) |
full | origin | - |
"unsafe-url" |
full | full | full |
ÐÑипÑÑÑÑмо, Ñ Ð½Ð°Ñ Ñ Ð·Ð¾Ð½Ð° адмÑнÑÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ñ ÑÑÑÑкÑÑÑÐ¾Ñ URL-адÑеÑи, Ñка не повинна бÑÑи вÑдома за межами ÑайÑÑ.
ЯкÑо ми надÑилаÑмо fetch, Ñо Ñипово вÑн завжди надÑÐ¸Ð»Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Referer Ñз Ð¿Ð¾Ð²Ð½Ð¾Ñ URL-адÑеÑÐ¾Ñ Ð½Ð°ÑÐ¾Ñ ÑÑоÑÑнки (окÑÑм випадкÑв, коли ми надÑилаÑмо Ð·Ð°Ð¿Ð¸Ñ Ñз HTTPS на HTTP, ÑÐ¾Ð´Ñ Ð±ÐµÐ· Referer).
ÐапÑиклад, Referer: https://javascript.info/admin/secret/paths.
ЯкÑо ми Ñ Ð¾Ñемо, Ñоб ÑнÑÑ Ð²ÐµÐ±-ÑайÑи знали лиÑе джеÑело, а не URL-ÑлÑÑ , ми можемо задаÑи опÑÑÑ:
fetch('https://another.com/page', {
// ...
referrerPolicy: "origin-when-cross-origin" // Referer: https://javascript.info
});
Ðи можемо додаваÑи його до вÑÑÑ
викликÑв fetch, навÑÑÑ ÑнÑегÑÑваÑи в JavaScript бÑблÑоÑÐµÐºÑ Ð½Ð°Ñого пÑоекÑÑ, Ñка вÑдповÑÐ´Ð°Ñ Ð·Ð° запиÑи Ñа викоÑиÑÑовÑÑ fetch вÑеÑединÑ.
Ðого Ñдина вÑдмÑннÑÑÑÑ Ñ Ð¿Ð¾ÑÑвнÑÐ½Ð½Ñ Ð· ÑÐ¸Ð¿Ð¾Ð²Ð¾Ñ Ð¿Ð¾Ð²ÐµÐ´ÑÐ½ÐºÐ¾Ñ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв до ÑнÑого джеÑела fetch надÑÐ¸Ð»Ð°Ñ Ð»Ð¸Ñе виÑ
ÑÐ´Ð½Ñ ÑаÑÑÐ¸Ð½Ñ URL-адÑеÑи (напÑиклад, https://javascript.info, без ÑлÑÑ
Ñ). ÐÐ»Ñ Ð·Ð°Ð¿Ð¸ÑÑв до наÑого джеÑела ми вÑе Ñе оÑÑимÑÑмо повний Referer (може бÑÑи коÑиÑним Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ Ð· налагодженнÑ).
fetchÐолÑÑика вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Referrer, Ñо опиÑана Ñ ÑпеÑиÑÑкаÑÑÑ, ÑÑоÑÑÑÑÑÑÑ Ð½Ðµ лиÑе fetch, а Ñ Ð±ÑлÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑноÑ.
ÐокÑема, можна вÑÑановиÑи ÑÐ¸Ð¿Ð¾Ð²Ñ Ð¿Ð¾Ð»ÑÑÐ¸ÐºÑ Ð´Ð»Ñ Ð²ÑÑÑÑ ÑÑоÑÑнки за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ HTTP-заголовка Referrer-Policy або окÑемого поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ <a rel="noreferrer">.
mode
ÐпÑÑÑ mode Ñ Ð·Ð°Ñобом безпеки, Ñо запобÑÐ³Ð°Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¾Ð²Ð¸Ð¼ запиÑам мÑж ÑÑзними джеÑелами:
"cors"â запиÑи мÑж ÑÑзними джеÑелами Ñипово дозволенÑ, Ñк опиÑано в Fetch: ÐапиÑи мÑж ÑÑзними джеÑелами,"same-origin"â запиÑи мÑж ÑÑзними джеÑелами забоÑоненÑ,"no-cors"â Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ Ð»Ð¸Ñе безпеÑÐ½Ñ Ð·Ð°Ð¿Ð¸Ñи мÑж ÑÑзними джеÑелами.
Ð¦Ñ Ð¾Ð¿ÑÑÑ Ð¼Ð¾Ð¶Ðµ бÑÑи коÑиÑноÑ, ÑкÑо URL-адÑеÑа Ð´Ð»Ñ fetch надÑ
одиÑÑ Ð²Ñд ÑÑеÑÑÐ¾Ñ ÑÑоÑони, Ñ Ð¼Ð¸ Ñ
оÑемо, Ñоб âглобалÑний пеÑемикаÑâ обмежÑвав можливÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑв мÑж ÑÑзними джеÑелами.
credentials
ÐпÑÑÑ credentials визнаÑаÑ, Ñи Ð¼Ð°Ñ fetch надÑилаÑи Ñайли cookie Ñа заголовки HTTP-Authorization Ñазом Ñз запиÑом.
"same-origin"â Ñипове знаÑеннÑ, не надÑилаÑи запиÑи мÑж ÑÑзними джеÑелами,"include"â завжди надÑилаÑи, вимагаÑAccess-Control-Allow-CredentialsвÑд ÑеÑвеÑа ÑнÑого джеÑела, Ñоб JavaScript мÑг оÑÑимаÑи доÑÑÑп до вÑдповÑдÑ, пÑо Ñо йдеÑÑÑÑ Ñ Ð³Ð»Ð°Ð²Ñ Fetch: ÐапиÑи мÑж ÑÑзними джеÑелами,"omit"â нÑколи не надÑилаÑи, навÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв з однаковим джеÑелом.
cache
Типово запиÑи fetch викоÑиÑÑовÑÑÑÑ ÑÑандаÑÑне HTTP-кеÑÑваннÑ. ТобÑо вÑн Ð²Ð¸Ð·Ð½Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸ Expires Ñ Cache-Control, надÑÐ¸Ð»Ð°Ñ If-Modified-Since Ñ Ñ.д. Так Ñамо Ñк ÑоблÑÑÑ Ð·Ð²Ð¸ÑÐ°Ð¹Ð½Ñ HTTP-запиÑи.
ÐпÑÑÑ cache дозволÑÑÑÑ ÑгноÑÑваÑи HTTP-ÐºÐµÑ Ð°Ð±Ð¾ Ñонко налаÑÑÑваÑи його викоÑиÑÑаннÑ:
"default"âfetchвикоÑиÑÑовÑÑ ÑÑандаÑÑÐ½Ñ Ð¿Ñавила HTTP-кеÑÑ Ñа заголовки,"no-store"â повнÑÑÑÑ ÑгноÑÑваÑи HTTP-кеÑ, Ñей Ñежим ÑÑане Ñиповим, ÑкÑо ми вÑÑановимо заголовокIf-Modified-Since,If-None-Match,If-Unmodified -Since,If-MatchабоIf-Range,"reload"â не бÑаÑи ÑезÑлÑÑÐ°Ñ Ñз HTTP-кеÑÑ (ÑкÑо Ñ), а заповниÑи ÐºÐµÑ Ð²ÑдповÑÐ´Ð´Ñ (ÑкÑо заголовки вÑдповÑÐ´Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑÑÑ ÑÑ Ð´ÑÑ),"no-cache"â ÑÑвоÑиÑи Ñмовний запиÑ, ÑкÑо Ñ ÐºÐµÑована вÑдповÑдÑ, Ñ Ð·Ð²Ð¸Ñайний Ð·Ð°Ð¿Ð¸Ñ Ð² ÑнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ. ÐаповниÑи HTTP-ÐºÐµÑ Ð²ÑдповÑддÑ,"force-cache"â викоÑиÑÑовÑваÑи вÑдповÑÐ´Ñ Ð· HTTP-кеÑÑ, навÑÑÑ ÑкÑо вÑн заÑÑаÑÑлий. ЯкÑо в HTTP-кеÑÑ Ð½ÐµÐ¼Ð°Ñ Ð²ÑдповÑдÑ, зÑобиÑи звиÑайний HTTP-запиÑ, поводиÑиÑÑ Ñк зазвиÑай,"only-if-cached"â викоÑиÑÑовÑваÑи вÑдповÑÐ´Ñ Ð· HTTP-кеÑÑ, навÑÑÑ ÑкÑо вÑн заÑÑаÑÑлий. ЯкÑо в HTTP-кеÑÑ Ð½ÐµÐ¼Ð°Ñ Ð²ÑдповÑдÑ, Ñо видаÑи помилкÑ. ÐÑаÑÑÑ Ð»Ð¸Ñе ÑодÑ, колиmodeÐ¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ"same-origin".
redirect
ÐазвиÑай fetch пÑозоÑо ÑлÑдÑÑ HTTP-пеÑеадÑеÑаÑÑÑм, Ñаким Ñк 301, 302 ÑоÑо.
ÐпÑÑÑ redirect дозволÑÑ Ð·Ð¼ÑниÑи Ñе:
"follow"â Ñипове знаÑеннÑ, ÑлÑдÑваÑи HTTP-пеÑеадÑеÑаÑÑÑм,"error"â помилка пÑи HTTP-пеÑеадÑеÑаÑÑÑ,"manual"â дозволÑÑ Ð¾Ð±ÑоблÑÑи HTTP-пеÑеадÑеÑаÑÑÑ Ð²ÑÑÑнÑ. У ÑÐ°Ð·Ñ Ð¿ÐµÑеадÑеÑаÑÑÑ Ð¼Ð¸ оÑÑимаÑмо ÑпеÑÑалÑний обâÑÐºÑ Ð²ÑдповÑÐ´Ñ Ð·response.type="opaqueredirect"Ñа нÑлÑовим/поÑожнÑм ÑÑаÑÑÑом Ñ Ð±ÑлÑÑÑÑÑÑ ÑнÑÐ¸Ñ Ð²Ð»Ð°ÑÑивоÑÑей.
integrity
ÐпÑÑÑ integrity дозволÑÑ Ð¿ÐµÑевÑÑиÑи, Ñи вÑдповÑÐ´Ð°Ñ Ð²ÑдповÑÐ´Ñ ÐºÐ¾Ð½ÑÑолÑнÑй ÑÑÐ¼Ñ Ð²ÑдомÑй напеÑед.
Як опиÑано в ÑпеÑиÑÑкаÑÑÑ, Ñ ÐµÑ-ÑÑнкÑÑÑми, Ñо пÑдÑÑимÑÑÑÑÑÑ, Ñ SHA-256, SHA-384 Ñ SHA-512, залежно вÑд бÑаÑзеÑа.
ÐапÑиклад, ми заванÑажÑÑмо Ñайл Ñ Ð·Ð½Ð°Ñмо, Ñо його конÑÑолÑна ÑÑма SHA-256 доÑÑвнÑÑ âabcdefâ (ÑпÑÐ°Ð²Ð¶Ð½Ñ ÐºÐ¾Ð½ÑÑолÑна ÑÑма, звиÑайно, довÑа).
Ðи можемо ÑозмÑÑÑиÑи його в опÑÑÑ integrity, напÑиклад:
fetch('http://site.com/file', {
integrity: 'sha256-abcdef'
});
ÐÐ°Ð»Ñ fetch ÑамоÑÑÑйно обÑиÑлиÑÑ SHA-256 Ñ Ð¿Ð¾ÑÑвнÑÑ Ð¹Ð¾Ð³Ð¾ з наÑим ÑÑдком. У ÑÐ°Ð·Ñ ÑозбÑжноÑÑÑ Ð±Ñде згенеÑована помилка.
keepalive
ÐпÑÑÑ keepalive вказÑÑ Ð½Ð° Ñе, Ñо Ð·Ð°Ð¿Ð¸Ñ Ð¼Ð°Ñ âпеÑежиÑиâ веб-ÑÑоÑÑнкÑ, Ñка його ÑнÑÑÑÑвала.
ÐапÑиклад, ми збиÑаÑмо ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ñо Ñе, Ñк поÑоÑний вÑдвÑдÑÐ²Ð°Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑ Ð½Ð°ÑÑ ÑÑоÑÑÐ½ÐºÑ (клÑки миÑÑ, ÑÑагменÑи ÑÑоÑÑнки, ÑÐºÑ Ð²Ñн пеÑеглÑдаÑ), Ð´Ð»Ñ Ð°Ð½Ð°Ð»ÑÐ·Ñ Ñ Ð¿Ð¾Ð»ÑпÑÐµÐ½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑÑкого доÑвÑдÑ.
Ðоли вÑдвÑдÑÐ²Ð°Ñ Ð·Ð°Ð»Ð¸ÑÐ°Ñ Ð½Ð°ÑÑ ÑÑоÑÑÐ½ÐºÑ â ми Ñ Ð¾ÑÑли б збеÑегÑи Ð´Ð°Ð½Ñ Ð½Ð° наÑÐ¾Ð¼Ñ ÑеÑвеÑÑ.
ÐÐ»Ñ ÑÑого ми можемо викоÑиÑÑовÑваÑи подÑÑ window.onunload:
window.onunload = function() {
fetch('/analytics', {
method: 'POST',
body: "statistics",
keepalive: true
});
};
ÐазвиÑай, коли докÑÐ¼ÐµÐ½Ñ Ð²Ð¸Ð²Ð°Ð½ÑажÑÑÑÑÑÑ, вÑÑ Ð¿Ð¾Ð²âÑÐ·Ð°Ð½Ñ Ð· ним меÑÐµÐ¶ÐµÐ²Ñ Ð·Ð°Ð¿Ð¸Ñи пеÑеÑиваÑÑÑÑÑ. Ðле опÑÑÑ keepalive говоÑиÑÑ Ð±ÑаÑзеÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑваÑи Ð·Ð°Ð¿Ð¸Ñ Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑежимÑ, навÑÑÑ Ð¿ÑÑÐ»Ñ Ñого, Ñк вÑн залиÑиÑÑ ÑÑоÑÑнкÑ. ÐÑже, ÑÑ Ð¾Ð¿ÑÑÑ Ð½ÐµÐ¾Ð±Ñ
Ñдна Ð´Ð»Ñ ÑÑпÑÑного Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ð°Ñого запиÑÑ.
Ðона Ð¼Ð°Ñ ÐºÑлÑка обмеженÑ:
- Ðи не можемо вÑдпÑавлÑÑи мегабайÑи: лÑмÑÑ ÑÑла Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв
keepaliveÑÑановиÑÑ 64ÐÐ.- ЯкÑо нам поÑÑÑбно зÑбÑаÑи багаÑо ÑÑаÑиÑÑики пÑо вÑдвÑдÑваннÑ, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð½Ð°Ð´ÑилаÑи ÑÑ ÑегÑлÑÑно пакеÑами, Ñоб на оÑÑаннÑй запиÑ
onunloadне залиÑилоÑÑ Ð±Ð°Ð³Ð°Ñо. - Це Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÑÑоÑÑÑÑÑÑÑ Ð²ÑÑÑ
keepalive-запиÑÑв Ñазом. ÐнÑими Ñловами, ми можемо паÑалелÑно виконÑваÑи декÑлÑка запиÑÑвkeepalive, але ÑÑма довжин ÑÑ Ð½ÑÑ ÑÑл не повинна пеÑевиÑÑваÑи 64ÐÐ.
- ЯкÑо нам поÑÑÑбно зÑбÑаÑи багаÑо ÑÑаÑиÑÑики пÑо вÑдвÑдÑваннÑ, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð½Ð°Ð´ÑилаÑи ÑÑ ÑегÑлÑÑно пакеÑами, Ñоб на оÑÑаннÑй запиÑ
- Ðи не зможемо обÑобиÑи вÑдповÑÐ´Ñ ÑеÑвеÑа, ÑкÑо докÑÐ¼ÐµÐ½Ñ Ð±Ñде виванÑажений. Ð¢Ð¾Ð¼Ñ Ð² наÑÐ¾Ð¼Ñ Ð¿ÑикладÑ
fetchпÑойде ÑÑпÑÑно завдÑкиkeepalive, але наÑÑÑÐ¿Ð½Ñ ÑÑнкÑÑÑ Ð½Ðµ пÑаÑÑваÑимÑÑÑ.- У бÑлÑÑоÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв, напÑиклад, пÑи ÑозÑилÑÑ ÑÑаÑиÑÑики, Ñе не Ñ Ð¿ÑоблемоÑ, оÑкÑлÑки ÑеÑÐ²ÐµÑ Ð¿ÑоÑÑо пÑÐ¸Ð¹Ð¼Ð°Ñ Ð´Ð°Ð½Ñ Ñа зазвиÑай на ÑÐ°ÐºÑ Ð·Ð°Ð¿Ð¸Ñи вÑдпÑавлÑÑ Ð¿Ð¾ÑÐ¾Ð¶Ð½Ñ Ð²ÑдповÑдÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)