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