Добавление пользовательских заголовков HTTP с помощью JavaScript

На HTML-странице, щелкая ссылку тега Image («img») или якоря («a»), я хотел бы добавить пользовательские заголовки для запроса GET. Эти ссылки обычно предназначены для загрузки динамического содержимого. Эти заголовки могут быть заголовками SAML или пользовательскими заголовками приложений.

Можно ли добавить эти пользовательские заголовки через JavaScript? Или, если я добавлю их через XMLHttpRequest, как я могу добиться функциональности загрузки?

Это требование относится только к IE6 или 7.

Ответов (5)

Я думаю, что самый простой способ добиться этого - использовать строку запроса вместо заголовков HTTP.

Как уже было сказано, проще всего использовать строку запроса.

Но если вы не можете по соображениям безопасности, вам следует рассмотреть возможность использования файлов cookie.

В 2021 году это можно будет сделать с помощью обслуживающего персонала .

Во-первых, вы должны зарегистрировать сервис-воркера на своей странице.

// index.html
window.addEventListener('load', function () {
    navigator
        .serviceWorker
        .register('/service-worker.js');
});

В Service Worker запрос захватывается, изменяется и пересылается путем вызова WindowOrWorkerGlobalScope.fetch()метода.

// service-worker.js
self.addEventListener('fetch', function (event) {
    event.respondWith(async function () {
        let headers = new Headers()
        headers.append("X-Custom-Header", "Random value")
        return fetch(event.request, {headers: headers})
    }());
});

Обратите внимание, что некоторые веб-браузеры не отображают измененные запросы в консоли разработчика. В этом случае запросы можно отслеживать с помощью таких инструментов, как tcpdump, Wireshark или в журналах сервера.

Если вы используете XHR , то setRequestHeader должно работать, например

xhr.setRequestHeader('custom-header', 'value');

PS Вы должны использовать Hijax для изменения поведения ваших якорей, чтобы он работал, если по какой-то причине AJAX не работает для ваших клиентов (например, заблокированный скрипт в другом месте на странице).

Единственный способ добавить заголовки к запросу изнутри браузера - использовать метод XmlHttpRequest setRequestHeader.

Использование этого с запросом «GET» загрузит ресурс. Уловка состоит в том, чтобы получить доступ к ресурсу заданным способом. Якобы вы должны иметь возможность разрешить кэширование ответа GET на короткий период, следовательно, для перехода к новому URL-адресу или создания тега IMG с URL-адресом src следует использовать кэшированный ответ из предыдущего «GET». Однако это весьма вероятно, особенно в IE, что может быть своего рода закономерностью в отношении кеша.

В конечном итоге я согласен с Мердадом, использование строки запроса - самый простой и надежный метод.

Другой необычной альтернативой является использование XHR для запроса URL-адреса, указывающего на ваше намерение получить доступ к ресурсу. Он может ответить сеансовым файлом cookie, который будет передан при последующем запросе изображения или ссылки.