3 сентября 2010 в 12:06

Сообщаем о ремонтных работах на сервере

Обновление Хабра, проходившее вчерашним вечером, побудило написать краткую заметку. Во время тех.работ Хабр вывешивает одностраничную заглушку, текст на которой гласит о происходящих работах. Заглушка отдается по всем запрошенным адресам. Никакого редиректа: по какому адресу статьи не зайди — везде одинаковый текст о ремонте. При этом ответ сервера сопровождается статусом «HTTP/1.1 200 OK». Так делает большинство известных мне сайтов. И если человеку, по большому счету, все равно, то поисковик, проводящий индексацию сайта в этот момент, видит, что по адресу со статьей обновилось содержание — надо обновить индекс.

Это всё модальные окошки, которые придумали программисты:
[произошла какая-то фигня] — [OK] — Да это же ни фига не ОК!
@mad_escape

Решение придумано до нас и давно стандартизировано — это ответ с кодом 503, говорящий о временной недоступности сервера. Если известно какое время займут работы, то об этом тоже правильно сообщить при помощи заголовка Retry-After.

Таким образом, с точки зрения http, о часовом простое клиентам надо сообщать следующим образом:

HTTP/1.1 503 Service Unavailable
Retry-After: 3600


Поисковая машина при посещении сайта поймет, что лучше его пока не тревожить, а зайти можно через час.
+133
98
oowl 223,8

комментарии (25)

–14
impwx, #
Тогда было бы правильнее определять User Agent и выдавать поисковику HTTP 503, а пользователю — красивую понятную страничку
–14
putnik, #
Насколько я помню, ничто не мешает после 503 вернуть 200 и красивую страничку.
–16
Urn, #
помоему кода ответа раза за раз — нет
–7
el777, #
ШИТО???
Ви есть гаворить по русский?
–22
Urn, #
ололо попячтса пыщь пыщь!!11
–14
Urn, #
блин белиберду написал. жалко кнопки отредактировать нету.
я имелл ввиду — как отправить 2 кода ответа..? помоему никак
+18
el777, #
Не надо отправлять 2 кода, нужно отправить 503 а вместе с ним страницу об ошибке.
В этом случае любой поисковик увидит код и поймет, что произошла ошибка, само содержимое он проигнорирует. А браузер наоборот покажет страницу пользователю. Но тут есть небольшое ограничение — если страница слишком маленькая по числу байт, то браузер на нее может забить (когда-то я это видел на примере Осла) и показать свою заглушку. Но это легко обходится — нужно просто сделать страницу поподробнее и все будет ок.
+53
WaveCut, #
А можно ведь отвечать 503 и при этом выводить красивую понятную страничку, разве нет?
+5
mitnlag, #
В 503 можно прекрасно отдавать красивую понятную страничку.
+4
mitnlag, #
Хабраэффект в миниатюре
–11
Urn, #
поисковики это не любят, и если распознают подобный обман — снизят позицию сайту
0
lugansk, #
Что не любят? Коды статусов?

Если в случае с 200, 301, 302, 403, 404 вполне нормально всё, то почему с 503 должны быть проблемы?

И в чём обман? в том, что «503 Service Unavailable» или в том, что он и правда временно недоступен? :)
+8
lugansk, #
Если б вместо 503 сервер отдавал 418, тогда да, был бы повод насторожиться :)
–1
Urn, #
хаха, можно было бы в руском варианте спецификации хттп кодов написать
418 Йа криведко
–1
Urn, #
обман в том что черные сеошники пользуются таким трюком, как отдавать поисковику одну версию страницу, а юзерам другую. трюк уже устарел и пользы не приносит, поисковики это обходят, и в отместку снижают рейтинг
–3
Regis, #
Вы бред пишете. В примере выше поисковикам и пользователям отдается один и тот же контент. Никакого cloak'инга тут нет.
+3
4vanger, #
Автора недопоняли — он отвечает на первый коммент в теме, в котором как раз и предлагают делать классический cloaking.
0
Urn, #
«Тогда было бы правильнее определять User Agent и выдавать поисковику HTTP 503, а пользователю — красивую понятную страничку»

тоесть имелось ввиду — юзеру код 200 и страницу, а поисковику только 503.
это считается клоакингом? я просто не в курсе таких подробностей
0
Usmekhaiouschiysia, #
Стандарт правилен, но увы, понятен не всем.
+6
ESQUELETO, #
Стандарт скорее не правилен, а стандартен :-)
0
DurRandir, #
Так точно, Кэп.
0
DangerT, #
А поисковики умеют правильно обрабатывать такие результаты в запросах? Ну например пропускать недоступные страницы и не включать в итоговые результаты? А вообще приколько было бы увидеть на странице поиска Гугла отдельной группой ссылки: Сейчас недоступны.
+1
WaveCut, #
Гугл рядом с недоступными сайтами вешает ссылку на кешированную версию, как-то вот так.
+3
seriyPS, #
Это все Nginx виноват sysoev.ru/nginx/docs/http/ngx_http_core_module.html#try_files
там используется скорее всего
try_files /system/maintenance.html $uri @front_controller;
+5
el777, #
Само собой, это все Игорь подстроил :)
Просто не надо делать слишком хитрые трюки и все будет ок.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Видео лекций всего курса первой Школы разработки интерфейсов Яндекса
Антигуа и Барбуда: страна, которая не платит лицензионных отчислений в США
Пояснение ситуации с запретным реестром. О совещании в Роскомнадзоре