Какой HTTP-код использовать для перенаправления в загружаемый файл? - PullRequest
0 голосов
/ 04 января 2012

На моем сайте есть страница загрузки. Когда пользователь нажимает кнопку загрузки, он попадает на страницу «Спасибо за загрузку». Через 2 секунды эта страница перенаправляется в реальный физический файл.

Так что это выглядит примерно так:

Страница загрузки : http://example.com/download

Пользователь нажимает кнопку «Скачать» : http://example.com/download/getit

Через 2 секунды страница перенаправляется на : http://example.com/uploads/files/file_to_download_v2.1.zip

В настоящее время, когда я перенаправляю на загружаемый файл, я использую код HTTP 301 (перемещен постоянно). Однако я не думаю, что это правильный код, поскольку в соответствии со стандартом :

Запрошенному ресурсу был назначен новый постоянный URI , и любые будущие ссылки на этот ресурс ДОЛЖНЫ использовать один из возвращенных URI. [...] Этот ответ кешируется , если не указано иное.

Однако странице «скачать / получить» не был присвоен новый URI, она просто перенаправляет на другой ресурс, но его собственный URI не изменился. Кроме того, ответ не должен кэшироваться, поскольку загружаемый файл может измениться при выпуске новой версии.

Итак, какой будет правильный HTTP-код в этом случае?

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Если вы возвращаете HTTP-код, страница перенаправляет немедленно , независимо от того, используете ли вы 301 (перемещено навсегда) или 302 (найдено) (в противном случае идеально подходит для вашего варианта использования). Если вы хотите перенаправить через 2 секунды , вам необходимо использовать одно из:

  1. Refresh HTTP-заголовок

    Refresh: 2; url=http://example.com/uploads/files/file_to_download_v2.1.zip
    
  2. То же самое в метаэквиве HTML в содержании страницы:

    <meta http-equiv="Refresh" content="2; url=http://example.com/uploads/files/file_to_download_v2.1.zip" />
    
  3. JavaScript, но это может не сработать для всех, поэтому я бы избежал этого.

1 голос
/ 04 января 2012

HTTP 302 найдено

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

...