Назад | Перейти на главную страницу

Как уважать acept: text / plain с nginx?

В заголовке http есть поле с именем accept, чтобы клиент мог указать предпочтительный формат. Как мне настроить nginx возвращаться markdown страница в случае запроса обычного текста и обрабатывается с помощью некоторой реализации уценки в случае запроса html?

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

error_page 404 = @404;
location @404 {
    if ($http_Accept ~ "text/plain") {
        rewrite ^ $uri.text-plain break;
    }
    if ($http_Accept ~ "text/html") {
        rewrite ^ $uri.text-html break;
    }
    location ~ \.text-plain$ {
    …
    }
    location ~ \.text-html$ {
    …
    }
}

При этом не будут учитываться приоритеты, указанные в Accept заголовок, а также явный пример «text / plain» и «text / html» также могут быть несколько бесполезными в существующих браузерах - я не уверен, какие пользовательские агенты укажут text/plain в их Accept заголовок.

В былые времена, Accept был полезен для решения, подавать ли .gif или .png изображений, но не сейчас - теперь считается, что все браузеры имеют и всегда поддерживают изображения PNG, и отправка дополнительных байтов в заголовке accept не стоит дополнительного трафика, поэтому, например, Mozilla больше не Acceptс image/png явно, и большинство других браузеров, вероятно, тоже последуют этому примеру.