Идея для разработки - как загружать страницу даже когда отключен сервер или DNS

12
Александр И
На сайте с 20.11.2016
Offline
24
2038

Здравствуйте.

Более 60% пользователей выходят в сеть из браузеров, которые поддерживают ServiceWorker.

http://caniuse.com/#search=servicework

ServiceWorker это проект от Google, часть Progressive Web Apps, которая исполняется перед каждым запросом страницы в браузере.

Но также ServiceWorker продолжает выполняться и когда пользователь ушел из сайта, по типу Web Push, только не требует разрешения пользователя в браузере.

Одна большая поправка, как и весь новый функционал Google Chrome - работает только если ваш сайт на HTTPS.

ServiceWorker отлавливает каждый запрос страницы в браузере, соответственно, можно на лету модифицировать содержимое страницы, кешировать его, получать отдельные участки с разных кластеров и подгружать новый контент даже, когда у пользователя закрыта вкладка с вашим сайтом.

Mozilla создал плагин для WordPress, который позволяет в один клик сделать ваш сайт доступным вне подключения к интернету, а также доставлять новые страницы еще до захода пользователя на сайт. Главное, чтобы пользователь хотя бы раз зашел на ваш сайт, дальше ServiceWorker продолжает работать в фоне

https://en-gb.wordpress.org/plugins/offline-content/

Используя данную технологию, вы можете загружать все нужные JS/CSS/картинки в фоне, еще до того момента, когда они потребуются пользователю

https://en-gb.wordpress.org/plugins/offline-shell/

Но вот одна незадокументированная возможность - вы можете перенаправлять запросы к вашему серверу, если он недоступен.

Например, ваш сайт попал под DDOS атаку/черный список... прокси-сервера/VPN на работе.

Пользователь у которого установлен ServiceWorker (хотя бы один раз посещал ваш сайт), запрашивает главную страницу или какую-либо публикацию из SERP.

Этот запрос отлавливает ServiceWorker.

Дальше он может открыть локальную копию запрашиваемой страницы (если она уже запрашивалась или была доставлена посредством предзагрузки) или...

Мы можем перенаправить этот запрос на сервис Google Cache/Яндекс кеш, вытянуть нужный блок и использовать его так, как будто ответ был получен от вашего сервера.

И если на вашем сайте сидит быстробот, большая вероятность, что содержимое не будет отличаться от реального.

Также, как вы понимаете, это можно использовать не только как защиту от DDOS атак - например, чтобы просто сократить нагрузку на ваш сервер.

S
На сайте с 17.08.2008
Offline
114
#1

Ну это примерно тоже самое, как если бы использовать глобальный супер прокси, если на сайт кто-то заходил, и этот сайт "упал", для другого клиента поднимается его копия из кеша (например при если отклик не произошел за определенное время).

Александр И
На сайте с 20.11.2016
Offline
24
#2
smbbws:
Ну это примерно тоже самое, как если бы использовать глобальный супер прокси, если на сайт кто-то заходил, и этот сайт "упал", для другого клиента поднимается его копия из кеша (например при если отклик не произошел за определенное время).

Да, но в отличии от прокси, это будет работать из коробки у 60% пользователей и в качестве хостера служат супербыстрые сервера Google.

Как вариант, можно использовать Google AMP сервера, а не Google Cache.

Тогда данные будут на 100% последние и актуальные.

Я думаю, реализация очень простая, примерно пару строк в плагине от Mozilla.

Конкретно для меня это неактуально, но возможно кому-то пригодится.

Просто хотел сохранить и поделиться идеей.

Как я понимаю, после этого сайту не страшны блокировки или DDOS?

А как быть с HTTPS? Как происходит повторная валидация сертификатов?

Как я понимаю, если сайт открывается с пометкой "Secure" в Chrome даже в Offline режиме, то повторная валидация не обязательна?

Aisamiery
На сайте с 12.04.2015
Offline
293
#3

Александр И, не вводите народ в заблуждение. Это штука замена более старым апи кэширование, направленное на работу в режиме офлайн. Я так понимаю, что для динамики и контента, требующего постоянного общения с сервером это никак не пойдет, вам в любом случае для кэша надо загрузить статику/страницу, если вы её не загрузили ранее и сервер лежит, то боюсь вы никак её уже и не загрузите. Эти API по большей части для SPA (для моделей на фронте работающих с localStorage)

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
Александр И
На сайте с 20.11.2016
Offline
24
#4
Aisamiery:
Александр И, не вводите народ в заблуждение. Это штука замена более старым апи кэширование, направленное на работу в режиме офлайн. Я так понимаю, что для динамики и контента, требующего постоянного общения с сервером это никак не пойдет, вам в любом случае для кэша надо загрузить статику/страницу, если вы её не загрузили ранее и сервер лежит, то боюсь вы никак её уже и не загрузите. Эти API по большей части для SPA (для моделей на фронте работающих с localStorage)

ServiceWorker работает совместно с Cache API - верно.

Но ServiceWorker исполняется еще до начала запроса к серверу, как только вы ввели адрес в адресную строку, ServiceWorker решает что делать дальше.

Это часть PWA направлена на то, чтобы сделать веб приложения работоспособными в оффлайне и дать им возможность предварительной загрузки, даже когда сайт закрыт.

Если пользователь хотя бы раз посещал сайт, у него уже закеширован shell (js/css).

А идея как раз в том, что динамику, а именно html содержимое страницы можно вытягивать из Google Cache/AMP.

https://developers.google.com/web/fundamentals/getting-started/primers/service-workers

[ATTACH]159209[/ATTACH]

Как я понимаю в respondWith можно вставить и другой код, в том числе и перенаправление запроса и его модификация.

(возможно я ошибаюсь, это просто идея)

Соответственно, ServiceWorker отдает offline.html и выполняет appendChild в body с ответа от Google Cache/AMP/других кластеров.

Это не подойдет для отправки комментариев, поиска по сайту (можно перенаправлять запросы в Google поиск для сайтов), отдачи картинок из содержимого (можно сразу вставлять картинки из CDN/Google Cloud Storage).

Но это подойдет для того, чтобы просто отдавать информацию из Google Cache в шкурке сайта без изменения URL и с сохранением навигации внутри сайта.

Кроме этого, ServiceWorker работает, даже если вкладка с сайтом закрыта (вне процесса вкладки с сайтом).

Соответственно, можно равномерно подгружать ресурсы по типу Push-уведомлений.

Mozilla создали соответствующий плагин для WordPress

https://en-gb.wordpress.org/plugins/offline-shell/

png 159209.png
Aisamiery
На сайте с 12.04.2015
Offline
293
#5

Александр И, все верно, только работает не вкладка, а воркер. У вас нет объектов window и document, вы никого никуда не перенаправите, ничего лишнего не подгрузите. У вас просто есть event, по сути который может сменить состояние чего то. Но это то, что понял я. Я конечно могу в этом плане ошибаться, но политика браузеров всегда заключается в том, что вы не можете сделать ничего без ведома пользователя, в том числе и кросдоменные запросы/релиректы и прочее. Что мешает в вашем случае вместо CDN сформировать url для смены пароля/оплаты чего либо, отправки конфиденциальных данных, да тот же самый ддос организовать в фоне со всех юзеров что были на вашем сайте?

Александр И
На сайте с 20.11.2016
Offline
24
#6
Aisamiery:
да тот же самый ддос организовать в фоне со всех юзеров что были на вашем сайте?

Так ведь основной источников ботов для DDOS и есть расширения в браузерах, js коды, которые встраивает нужный зловредный код в страницы чужих сайтов.

ServiceWorker это новая технология и тот факт, что без запроса пользователя, устанавливается процесс, который может скачивать и хранить в Cache API до 500 ГБ, наводит на размышления.

У вас явно неверное представление о SW - он использует Cache API/Web Manifest, но его главная задача - висеть в фоне, скачивать и отлавливать запросы.

Вот кстати, Chrome на мобильных уже предлагает установку сайтов с SW на домашний экран

https://www.smashingmagazine.com/wp-content//uploads/2016/08/web-app-install-banner-opt.png

Я уже предоставлял ссылку на WordPress плагин от Mozilla, который позволяет скачивать в фоне дополнительные ресурсы для работы сайта (как я понимаю, при вызове того же события, только не fetch, а update/install)

https://en-gb.wordpress.org/plugins/offline-shell/

В примерах разработки PWA от Google, запросы к HTML странице переписывались на запросы к JSON посредством SW и дальше уже ответ встраивался в offline.html шаблон после его инициализации.

Значит таки можно указать свои адреса, как источник для кеша.

Только вопрос в том, можно ли обращаться к другим доменам.

Google хочет заменить обычные приложения PWA - если обычные приложения могут сами выбирать кластер/сервер, к которому обращаться, почему не дать такую возможность PWA?

А как же CDN?

Но я пока не изучал этот вопрос более детально.

Я возможно проверю это в ближайшее время.

Если кто-то проверит раньше, пожалуйста, поделитесь с нами.

Александр И
На сайте с 20.11.2016
Offline
24
#7

Google часто предзагружает первый результат (прорисовывает, если быть точным) в SERP через <link rel="prerender"...

Что было сделано:

1. На служебной странице был UNREGISTER ServiceWorker для сайта, с которым выполнялся пункт номер 2

chrome://serviceworker-internals/

2. Найден сайт в Google, где для него выводится расширенный сниппет и Google добавляет его в <link rel="prerender">.

А именно "smashingmagazine.com"

3. Обновлена страница

chrome://serviceworker-internals/

4. В ней появился ServiceWorker сайта, который Google добавил в prerender.

При этом я не переходил по ссылке из SERP!

Кто хочет повторить эксперимент, переходите сразу на chrome://serviceworker-internals/, потом вводите на google.com (не в адресную строку, это само себе вызывает prerender) "smashingmagazine.com" и обновляйте chrome://serviceworker-internals/.

В результате, без посещения сайта, у вас появляется процесс, который будет скачивать обновления сайта, которого вы не посещали.

То-есть, без посещения сайта, Google Chrome подтягивает скрипт, который может скачивать и хранить до 500 ГБ в Cache API.

Я пока изучаю вопрос SW более подробно, в том числе, какие функции доступны ему.

Как я понимаю, в контексте Event, ему недоступно множество методов и свойств, которые доступны в Document/Window.

Как я понял, Fetch, в том числе и с другого домена (Google Cache/AMP) ему доступен.

https://fetch.spec.whatwg.org/

Возможно у кого-то появились мысли по этому поведению браузера/Google,

буду рад услышать, можно в личные сообщения.

SeVlad
На сайте с 03.11.2008
Offline
1609
#8
Александр И:
как загружать страницу даже когда отключен сервер

Ну всё, сбыласть мечта идиотов - теперь можно скачать весь интернет :)

А ничего не разрывает в голове, при сочетании в одном переложении слов (по смыслу) "мобильный" и "загрузка не запрашиваемого"?

Новая вера, новые адепты... :(

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Aisamiery
На сайте с 12.04.2015
Offline
293
#9
Александр И:

То-есть, без посещения сайта, Google Chrome подтягивает скрипт, который может скачивать и хранить до 500 ГБ в Cache API.

Я все забываю спросить, хранить то он где будет? У меня на винте? А хохо не хохо?😂

SeVlad
На сайте с 03.11.2008
Offline
1609
#10
Aisamiery:
У меня на винте?

В кеше гуглохрома. В памяти и/или винте в зависимости от настроек девайсов. (мобильных, ога :) )

Да-да, в сжатом виде. Запаковать-распаковать, найти все связи, отренддерить...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий