В Rails 2.3.4 изменился способ обработки заголовков Accept
:
http://github.com/rails/rails/commit/1310231c15742bf7d99e2f143d88b383c32782d3
Мы не примем это
Обновлен способ, которым Rails обрабатывает входящие заголовки Accept. Это было связано прежде всего с тем фактом, что веб-браузеры, кажется, не всегда знают, чего они хотят ... не говоря уже о том, чтобы последовательно сформулировать это. Таким образом, заголовки Accept теперь используются только для запросов XHR или заголовков отдельных элементов - это означает, что они не запрашивают все. Если это не поможет, мы вернемся к использованию params [: format].
Стоит также отметить, что запросы к действию, в котором вы объявили только шаблон XML, больше не будут автоматически обрабатываться для запроса HTML (запроса браузера). Ранее это работало, но не обязательно по замыслу, а потому, что большинство браузеров отправляют универсальный заголовок Accept (" / "). Поэтому, если вы хотите предоставлять XML напрямую браузеру, обязательно предоставьте формат: xml или явно укажите шаблон XML (представьте "template.xml").
У меня есть активный API, который используется многими клиентами, которые все отправляют заголовки Content-Type
и Accept
, оба установлены на application/xml
. Это работает нормально, но мое тестирование под Rails 2.3.4 показывает, что это больше не работает - я получаю 403 Unauthorized response. Удалите заголовок Accept
и просто отправьте Content-Type
, но это явно неприемлемое решение, поскольку для этого потребуется, чтобы все мои клиенты перекодировали свои приложения.
Если я продолжу развертывание на Rails 2.3.4, все клиентские приложения, использующие API, будут повреждены. Как я могу изменить свое приложение на Rails так, чтобы я мог продолжать обслуживать существующие запросы API на Rails 2.3.4 без необходимости изменения своего кода клиентами?