Cross-global fetch usage

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Эта статья объясняет крайний случай, который случается с fetch (и потенциально другими APIs, предоставляющими такой же способ получения данных). Когда cross-origin fetch, включающий относительный URL, инициируется из <iframe>, относительный URL может использовать текущий глобальный location вместо того что задается в iframe.

Крайний случай

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

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

Проблема

In the past we would resolve the relative URL against the current global, for example:

let absolute = new URL(relative, window.location.href)

This is not a problem as such. It is just that different APIs that exhibit this kind of behavior were doing it inconsistently with the behavior defined in the spec, which could lead to problems further down the line. 

Решение

In Firefox 60 onwards, Mozilla resolves the relative URL against the global that owns the fetch() function being used (see баг 1432272).  So in the case described above, it is resolved against the iframe's location:

let absolute = new URL(relative, frame.contentWindow.location.href)

There is a lot of discussion in progress about getting new specs to align with this behavior change, to mitigate potential problems going forward.

Метки документа и участники

Внесли вклад в эту страницу: qqwweeaassdd
Обновлялась последний раз: qqwweeaassdd,