aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/api/fetch_api/cross-global_fetch_usage/index.html
blob: ec05253d7f1bf47bb275cc046620391c52929fc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
---
title: Cross-global fetch usage
slug: Web/API/Fetch_API/Cross-global_fetch_usage
translation_of: Web/API/Fetch_API/Cross-global_fetch_usage
---
<p class="summary">Эта статья объясняет крайний случай, который случается с fetch (и потенциально с другими API, предоставляющими такой же способ получения данных). Когда cross-origin fetch, включающий относительный URL, инициируется из {{htmlelement("iframe")}}, относительный URL может использовать текущий глобальный location вместо того что задается в iframe.</p>

<h2 id="Крайний_случай">Крайний случай</h2>

<p>Многие сайты никогда не столкнутся с таким поведением. Чтобы увидеть его:</p>

<ul>
 <li>Вам понадобится same-origin iframe</li>
 <li>Этот same-origin iframe должен располагаться с другим base URL</li>
 <li>Вы должны использовать функцию fetch cross-global, т. е. <code>frame.contentWindow.fetch()</code></li>
 <li>Переданный в fetch URL должен быть относительным</li>
</ul>

<h2 id="Проблема">Проблема</h2>

<p>В прошлом мы разрешали относительный URL адрес вместо текущего глобального, для примера:</p>

<pre class="brush: js">let absolute = new URL(relative, window.location.href)</pre>

<p>Это не проблема как таковая. Просто разные API, демонстрирующие такое поведение, делали его несовместимым с поведением, определенным в спецификации, что может привести к проблемам в дальнейшем.</p>

<h2 id="Решение">Решение</h2>

<p>В Firefox 60 и далее, Mozilla сопоставляет относительный URL с глобальным, которой принадлежит используемой функции <code>fetch()</code> (смотри {{bug(1432272)}}). Таким образом в случае описанном выше, он разрешается в зависимости от расположения iframe:</p>

<pre class="brush: js">let absolute = new URL(relative, frame.contentWindow.location.href)</pre>

<p>Ведется много дискуссий о том, как привести новые спецификации в соотвествие с этим изменением поведения, для того чтобы уменьшить возможные проблемы в будущем.</p>