xss_get

Директива `xss_get` включает поддержку JSONP (JSON with Padding) ответов в NGINX для междоменных GET-запросов.

Синтаксисxss_get on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
Аргументыflag

Описание

Директива xss_get играет ключевую роль в обеспечении поддержки JSONP в NGINX для междоменных AJAX-запросов. Когда она установлена в 'on', директива изменяет способ возврата данных сервером для GET-запросов, оборачивая тело ответа в указанную JavaScript-функцию обратного вызова. Этот подход служит обходным решением для same-origin policy в браузерах, позволяя скриптам с одного домена выполнять запросы к ресурсам на другом домене. По сути это позволяет серверу отвечать на AJAX-вызовы с других источников, встраивая ответ в вызываемую из JavaScript функцию вместо возврата чистых JSON-данных.

Директиву можно задать в разных контекстах: http, server, location и if (внутри блока location). Когда директива включена, клиенты могут указать функцию обратного вызова в своём GET-запросе с помощью параметра query. Сервер затем использует имя, переданное в аргументе callback, чтобы сформировать ответ, обернув исходный ответ сервера в вызов JavaScript-функции. Это позволяет веб-приложениям обходить ограничения, налагаемые браузерами на кросс-доменные запросы.

По умолчанию директива xss_get установлена в 'off', то есть JSONP не поддерживается, если её явно не включить. Эту директиву следует использовать вместе с другими связанными директивами, такими как xss_callback_arg, которая задаёт имя функции для вызова на стороне клиента. В целом включение этой директивы повышает интерактивность веб-приложений, которым требуются междоменные запросы.

Пример конфига

server {
    location /foo {
        xss_get on;
        xss_callback_arg 'callback';
        xss_input_types 'application/json'; 
        xss_output_type 'application/x-javascript'; 
    }
}

Убедитесь, что соответствующая директива xss_callback_arg установлена для обработки требуемого параметра callback.

Проблемы cross-origin всё ещё могут возникать, если не настроить всё внимательно со стороны клиента и сервера.

Тщательно протестируйте, чтобы убедиться, что JavaScript, сгенерированный в ответ, правильно отформатирован. Верите или нет, неправильные имена callback могут вызвать ошибки JavaScript.

← Ко всем директивам