Angular (7) интерфейс взаимодействует с REST API на сервере
, а затем:
<a href="https://my-server.com/my-api/document?id=3">Download</a>
, который говорит мне, что ваш RESTful API нена самом деле RESTful.
Причина в том, что указанный выше запрос GET не является частью парадигмы RESTful API.Это базовый HTTP-запрос GET, который дает ответ не-JSON типа контента, и этот ответ не представляет состояние ресурса RESTful.
Это всего лишь семантика URL и ничего не меняет,но вы, как правило, сталкиваетесь с проблемами такого рода, когда начинаете смешивать вещи в гибридном API.
Однако теперь, когда я добавил аутентификацию, это больше не работает, потому что браузер невключить токен аутентификации в запрос при извлечении документа.
Нет, он работает правильно.Это сервер , который выдает 401
несанкционированный ответ.
Я понимаю, что вы говорите.Тег <a>
больше не позволяет загружать URL-адрес, поскольку этот URL-адрес теперь требует аутентификации.С учетом вышесказанного для сервера довольно странно требовать аутентификацию HEADER для GET-запроса в контексте, где ни один из них не может быть предоставлен.Это не проблема, уникальная для вашего опыта, так как я видел, как это часто случается.Мысль о том, чтобы переключиться на токен JWT и подумать, что это решает все.
Использование createObjectURL()
для преобразования ответа в новое окно, является своего рода хаком, который имеет другие побочные эффекты.Например, блокировщики всплывающих окон, мутация истории браузера и неспособность пользователя видеть загрузку, отменить загрузку или просмотреть ее в истории загрузок своего браузера.Вы также должны задаться вопросом о всей памяти, которую загрузка загружает в браузере, и переключение на base64 просто приведет к уменьшению потребления памяти.
Вы должны решить эту проблему, установив аутентификацию сервера.
<a href="https://my-server.com/my-api/document?id=3&auth=XXXXXXXXXXXXXXXXXXXX">Download</a>
Гибридный API RESTful заслуживает подхода гибридной аутентификации.