Возможен ли пуш-запрос Http2 Cross-origin?

Скажем, у меня есть сервер, который обслуживает HTML-файл в URL https://example.com/ и это относится к CSS-файлу в URL https://test.com/mystyles.css, Можно ли подтолкнуть mystyles.css файл вместе с html-содержимым как часть соединения HTTP2, чтобы браузер использовал это css-содержимое?

Я попытался создать такой запрос с помощью самозаверяющего сертификата на моем локальном хосте (и я предварительно создал исключение безопасности для обоих хостов в своем браузере), отправив html-файл, когда запрос приходит http://localhost/и нажав css с другим именем хоста / портом в :authority или же Host заголовок. Однако при полностраничном обновлении файл CSS извлекается в отдельном запросе с сервера, а не с использованием файла PSS.

Посмотрите эту суть для файла, который я использовал, чтобы проверить это. Если я посещу http://localhost:8080/ тогда текст красный, но если я зайду http://test:8080/ он зеленый, подразумевая, что отправленный контент используется, если источник совпадает.

Есть ли комбинация заголовков, которые нужно использовать, чтобы это работало? Возможно, вызывая CORS?

0 ответов

Да, это теоретически возможно, согласно этому сообщению в блоге от защитника разработчиков Chrome от 2017 года.

Как владельцы developers.google.com/web мы могли заставить наш сервер отправлять ответ, содержащий все, что мы хотели для android.com, и устанавливать его для кеширования на год.

...

Вы не можете протолкнуть активы для любого источника, но вы можете подтолкнуть активы для источников, для которых ваше соединение является "авторитетным".

Если вы посмотрите на сертификат для developers.google.com, вы увидите, что он действителен для всех типов источников Google, включая android.com.

Просмотр информации о сертификате в Chrome Теперь я немного соврал, потому что, когда мы получаем android.com, он выполнит поиск в DNS и увидит, что он завершается на другом IP-адресе, отличном от developers.google.com, поэтому он настроит новый соединение и пропустить наш элемент в push-кеше.

Мы могли бы обойти это, используя фрейм ORIGIN. Это позволяет соединению сказать: "Эй, если вам что-то нужно с android.com, просто спросите меня. Не нужно делать ничего из этого DNS", если это авторитетно. Это полезно для общего объединения соединений, но это довольно ново и поддерживается только в Firefox Nightly.

Если вы используете CDN или какой-то общий хост, взгляните на сертификат, посмотрите, какие источники могут начать продвигать контент для вашего сайта. Это ужасно. К счастью, ни один хост (о котором я знаю) не предлагает полный контроль над HTTP/2 push, и вряд ли благодаря этой маленькой заметке в спецификации: ...

На практике это кажется возможным, если ваш сертификат имеет авторитет над другими доменами и они размещены на одном IP-адресе, но это также зависит от поддержки браузером. Я лично пытался сделать это с помощью Cloudflare и обнаружил, что они не поддерживают push-уведомления из разных источников (аналогично наблюдениям автора сообщения в блоге о CDN в 2017 году).

Другие вопросы по тегам