Как я могу и имеет ли смысл использовать Service Worker для добавления заголовка авторизации ко всем моим запросам API?

Каждый запрос, который я делаю к внутреннему API, требует заголовка авторизации. Я создаю приложение на основе Polymer, используя множество веб-компонентов, как частных, так и сторонних. Почти все вызовы AJAX я делаю через <iron-ajax> элементы. Я знаю, что могу создать пользовательский компонент для достижения централизации, которую я ищу, но мне было интересно, будет ли использование сервисного работника для перехвата запросов к моему API и добавления необходимых заголовков и любых других манипуляций или проверки, которые я мог бы захотеть. жизнеспособным, эффективным или даже возможным. Тем более, что Polymer 1.0 пока не поддерживает расширение других компонентов.


person bearfriend    schedule 19.07.2015    source источник
comment
Я знаю, что могу создать пользовательский компонент --- я думаю, что это именно тот ответ на ваш вопрос и идеальный вариант использования для создания настраиваемого компонента, который обертывает ваши <iron-ajax> вызовы. Это компонент, который использует 1. статические специальные заголовки 2. выполняет проверку 3. настраивается извне. Все это кричит мне о dom-module, и я думаю, что сервисный работник, перехватывающий это и т. д., требует больше работы, чем нужно. Для этого есть элемент!   -  person mbunit    schedule 20.07.2015


Ответы (1)


Думайте о сценарии сервис-воркера как о (java-)скриптовом прокси-сервере — вы, безусловно, можете выполнять любые манипуляции (включая добавление, удаление и манипулирование HTTP-заголовками) с вашими вызовами, пока сервис-воркер контролирует источник. И до тех пор, пока ваши вызовы API не будут иметь одинаковое происхождение. Cross-Origin и другие непрозрачные вещи с запросами становятся сложнее, но я не думаю, что это применимо к вашему варианту использования, судя по тому, как вы это описали.

Единственная проблема с этим подходом заключается в том, что вы в основном ограничиваете область действия своего приложения одним браузером: Google Chrome (версия 40+). Если вас это устраивает, смело продолжайте, но, поскольку Firefox пока не будет поддерживать захват запроса (событие fetch), (даже несмотря на то, что сервисные работники на данный момент, похоже, наконец приземляются в Firefox 43), и вы не можете полифилить сервис-воркеры — вам придется предоставить некоторый резервный механизм в коде JS вашей страницы, если вы хотите поддерживать < em>любой браузер, кроме Chrome 40+, по крайней мере, на несколько месяцев вперед.

person Flaki    schedule 19.07.2015
comment
Чтобы подкрепить это: сервисные работники должны быть прогрессивным улучшением, и разработка страницы, которая будет работать только, если сервисный работник зарегистрирован, почти наверняка является ошибкой. Даже для пользователей Chrome ПО (обычно) не будет активным при первом посещении сайта пользователем или при перезагрузке одной из ваших страниц. - person Jeff Posnick; 20.07.2015
comment
Спасибо вам обоим. Это вносит некоторую ясность в их предполагаемое использование. Я не думаю, что есть смысл их использовать. Я понял, что могу легко перехватить метод xhr.open, чтобы настроить слушателей и сделать там все, что мне нужно, и на данный момент я решил сделать это с помощью Polymer Behavior. - person bearfriend; 21.07.2015