REST: HTTP-код 300 подходит в этой ситуации перенаправления? - PullRequest
5 голосов
/ 17 ноября 2010

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

, например

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

Я смотрю на rfc2616 и не решаюсь использовать код 300 (множественный выбор):

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

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

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

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

Я думаю, что понимаю, но формулировка все еще делает ее немного загадочной для меня. Может ли кто-нибудь, знакомый с кодами ответов, подтвердить, что я на правильном пути, и объяснить следующие выдержки?

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

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

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

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

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

0 голосов
/ 18 ноября 2010

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

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

... и агентские переговоры информация предоставляется ...

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...