REST: уместен ли http-код 300 в этой ситуации перенаправления?

У меня есть сайт на нескольких языках. Мне нужно перенаправить пользователей на их языковой стандарт, когда они получают доступ к сайту без кода языкового стандарта в URL-адресе.

e.g.

http://www.mysite.com автоматически перенаправляется на любой http://www.mysite.com/uk или http://www.mysite.com/us

Я смотрю rfc2616 и не решаюсь использовать Code 300 (несколько вариантов) :

Запрошенный ресурс соответствует любому из набора представлений, каждое из которых имеет свое собственное конкретное местоположение, и информация о согласовании, управляемая агентом (раздел 12), предоставляется так, чтобы пользователь (или пользовательский агент) мог выбрать предпочтительное представление и перенаправить его запрос в это место.

Если это не запрос HEAD, ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурсов и местоположений, из которых пользователь или пользовательский агент может выбрать наиболее подходящий. Формат объекта определяется типом носителя, указанным в поле заголовка Content-Type.

В зависимости от формата и возможностей пользовательского агента выбор наиболее подходящего варианта МОЖЕТ быть выполнен автоматически. Однако эта спецификация не определяет никаких стандартов для такого автоматического выбора.

Если у сервера есть предпочтительный выбор представления, он ДОЛЖЕН включить конкретный URI для этого представления в поле Location;

I think I understand, but the wording still makes it a bit cryptic for me. Can someone familiar with response codes confirm if I'm on the right track and explain the following excerpts?

  • [...] и информация о переговорах, управляемая агентом, предоставляется [...]
  • Если это не запрос HEAD, ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурса и местоположения (а) [...]

  • person Michael Ekoka    schedule 17.11.2010    source источник


    Ответы (2)


    В вашем случае я не думаю, что вам нужны «переговоры, ведомые агентом». В вашем случае ваш сервер должен иметь возможность выбирать место перенаправления из заголовка accept-lang. Думаю, можно использовать 303 редирект.

    Согласование, управляемое агентом, используется только тогда, когда сервер не знает, какое представление хочет клиент. В этих случаях сервер вернет список ссылок с различными доступными параметрами. Затем агент выберет желаемое представление.

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

    person Darrel Miller    schedule 17.11.2010
    comment
    На самом деле accept-lang - это самое слабое возможное разрешение. Что ты здесь делаешь с en? Но вы совершенно правы в том, что OP должен быть осторожен с тем, как он ожидает, что агент обработает 300. - person annakata; 18.11.2010
    comment
    Я полагаю, что единственный вариант действительно только 303, так как в Chrome не будет автоматического перенаправления (по крайней мере, версия 19.0.1084.52 m) при статусе 300. - person Andrei I; 26.05.2012

    Я считаю, что это правильный ответ, да. Фактически, я думаю, что это единственный выбор, если вы действительно хотите обрабатывать это как ответ (и не можете, например, выполнять поиск по географическому местоположению), поскольку все остальные ответы диапазона 3xx предназначены для определенных результатов (кроме странного прокси 305).

    Что касается отрывков:

    ... и информация о переговорах, управляемая агентом, предоставляется ...

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

    Если это не запрос HEAD, ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурса и местоположения (а) ...

    Запросы HEAD предназначены для возврата только заголовков ответов (так что вы можете делать такие вещи, как дешевую проверку обновлений содержимого). Поэтому они специально не хотят тела ответа, поэтому не нужно предоставлять список возможных вариантов для 300 в запросе GET или POST.

    person annakata    schedule 17.11.2010