X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> HTTP-код 503
ShowPrint
ShowPrint
Topic Starter сообщение 16.7.2018, 21:51; Ответить: ShowPrint
Сообщение #1


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

Было сказано
( @ 13.7.2018, 16:36) *
вменяемые движки должны возвращать код 503

С данной позицией согласен на все 500%, собственно давно реализовал на своём самописе, но...
[offtopic]* Тёзка, прости великодушно если потревожил[/offtopic]


После долгой устойчивой работы в течение одной прошлой недели на одной и той же странице трижды сложилась ситуация:
  • получал от ЯВМ уведомление на изменение статуса с 200 на N/A

  • отправлял страницу в переобход

  • статус менялся с N/A на 200


Вопрос "что за ня" Платонам был задан (в корректной форме со смыслом можно ли точнее понять причину для её скорейшей ликвидации), ответа пока нет, ждёмс...
В ожидании решил проверить код, в результате чего и возник вопрос...

Собственно имеющий отношение к топику код:
Развернуть/Свернуть


<?php
header('Content-Type: text/html; charset=UTF-8');

function DBConnect(){
// function code
}

if(!($DBLink=DBConnect())){
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
die('Sorry, not available now');
}
?>
<!DOCTYPE html>
<html lang="ru">

<!-- Some code -->

</html>



Понятно что причиной N/A может быть и не БД, но созрело аж несколько вопросов:
1. Если это всё-таки БД, то не стоит ли 

header('Content-Type: text/html; charset=UTF-8');

опустить ниже, к доктайпу?
Задумался, так как аптайм сервера на текущий момент близок к 3-м месяцам, а основная часть контента всё-таки завязана на БД

2. Правильно понимаю что под N/A может скрываться какой-то конкретный код ответа сервера (например 408, 410 и т.д.)?
2.1. Если да, то узнать конкретный можно только у Платона? Или запрашивая и анализируя логи у хостинга тоже можно? (вирт, Бегет)
2.1.1. Может кто-то помочь с чтением логов? (я в этом вопросе - "ноль")

3. Правильно я понимаю что при использовании вирт. хостинга 503-й код вернуть боту я могу только отправляя header, то есть если вдруг случился такой-то трабл при попытке чтения индексного файла, то я бессилен (если принудительно не объявлено о закрытии сайта на время работ через хтаццесс)?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WGN
WGN
сообщение 17.7.2018, 7:56; Ответить: WGN
Сообщение #2


(ShowPrint @ 17.7.2018, 00:51) *
Если да, то узнать конкретный можно только у Платона? Или запрашивая и анализируя логи у хостинга тоже можно? (вирт, Бегет)
Навряд ли вам платоны ответят, в лучшем случае дадут размытый ответ, а в худшем стандартную отписку по шаблону: Улучшайте сайт и т.п. А так конечно лучше спросить у хостера


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fedornabilkin
fedornabilkin
сообщение 17.7.2018, 11:06; Ответить: fedornabilkin
Сообщение #3


(ShowPrint @ 17.7.2018, 00:51) *
опустить ниже, к доктайпу?

Я бы сделал отдельный класс для работы с заголовками, чтобы управление ими вынести в один файл. В итоге надо будет собрать необходимые заголовки, а потом их отправить.
При этом уже в классе можно проверить факт отправки заголовков и осуществить выход (exit() :), если встретится заголовок Location:

$hd = new Headers();

// собрал нужные
$headers = [
'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT',
'Cache-Control' => 'no-store, no-cache, must-revalidate',
];
// добавил
$hd->set($headers);

// другой код
// может быть еще подбавил заголовков
// другой код

// когда уже подошло дело к браузеру, отправил все сразу
$hd->send(); 

Также, некоторые заголовки (content-type и charset), которые актуальны для каждой страницы можно указать в самом классе или (удобней и практичней) в конфигурации приложения.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 17.7.2018, 11:50; Ответить: ShowPrint
Сообщение #4


fedornabilkin, у меня другое основное занятие, а сайтостроительство - хобби и на досуге. Соответственно работу с классами пока не осваивал, планировал на пенсии, правда с нынешней ситуацией появились сомнения что есть шанс дожить  B)

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

Не может ли это создавать конфликтную ситуацию в мозгах бота, то есть не следует ли блок отдачи 503-го ответа ставить обязательно первым, до вывода каких-либо других заголовков.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 17.7.2018, 12:30; Ответить: miketomlin
Сообщение #5


ShowPrint, там fedornabilkin не ко мне обращался, а меня упоминал. У меня бздынькнуло, я полез на форум и ничего.

Так N/A – это и есть результат 503-ей. Сам переобойдет, чтобы ты не тратил на это время. Хотя ручной тычок конечно может иметь смысл.

(ShowPrint @ 17.7.2018, 00:51) *
Если это всё-таки БД, то не стоит ли header Content-Type опустить ниже, к доктайпу?
Вообще-то пых Content-Type для страниц сам формирует. Этот заголовок нужно использовать, если ты хочешь переопределить тип, например выдать plain-текст вместо страницы.

(ShowPrint @ 17.7.2018, 00:51) *
Правильно понимаю что под N/A может скрываться какой-то конкретный код ответа сервера (например 408, 410 и т.д.)?
См. выше. Вот не надо всяких 410-ых. Это не «временные» варианты. 404-ой достаточно, вдруг страница «возродится из пепла».

(ShowPrint @ 17.7.2018, 00:51) *
3. Правильно я понимаю что при использовании вирт. хостинга 503-й код вернуть боту я могу только отправляя header, то есть если вдруг случился такой-то трабл при попытке чтения индексного файла, то я бессилен (если принудительно не объявлено о закрытии сайта на время работ через хтаццесс)?
Если до твоего кода даже не доходит дело, сервер сам пытается выдавать адекватные статусы. Не парься по этому поводу.
P.S. Несмотря на использование одной и той же ф-ции, Content-Type и HTTP/1.1 503 – это разные вещи, так что все будет расставлено по своим местам, не волнуйся. Но с другой стороны конечно логичнее начинать с HTTP/1.1 503.
P.P.S. Мы повсеместно перешли на использование http_response_code (а для Location статус задается параметром ф-ции header), так что стало меньше путаницы. В требованиях по совместимости – php 5.4+


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 17.7.2018, 12:47; Ответить: miketomlin
Сообщение #6


Проблемы могут быть не только с коннектом к серверу БД, но и по сути с любым запросом, так что лучше во что-то обернуть показанные заголовки. Посмотри к примеру основной фрагмент кода тут – там больше 503-их, чем 404-ых. Если напрягают вложенные ветвления, их можно разворачивать.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WGN
WGN
сообщение 17.7.2018, 12:52; Ответить: WGN
Сообщение #7


(ShowPrint @ 17.7.2018, 14:50) *
то есть сначала страница как бы ответила, а потом говорит о временной недоступности
Скорее так будет правильно


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 17.7.2018, 13:46; Ответить: ShowPrint
Сообщение #8


miketomlin, меня напрягло несколько моментов в комплексе:
  • именно N/A - если бы в сообщении от ЯВМ было 200=>503, то я бы и не запарился;

  • 200-й ответ пишет жа цифрой, а не AVAILABLE;

  • под N/A Я-бот подразумевать любой из кодов ответа кроме 200 и 404 (который обрабатывается);

  • при 503 коде боту говорят "временно, зайди чуть позже" и при этом по идее не должен в ЯВМ меняться статус страницы, а он меняется.


(miketomlin @ 17.7.2018, 15:30) *
конечно логичнее начинать с HTTP/1.1 503

Поправлю, решил что вреда - точно не будет  :unsure:


(miketomlin @ 17.7.2018, 15:30) *
перешли на использование http_response_code

Правильно ли я понимаю этот вариант:

if(!($DBLink=DBConnect())){
// header('HTTP/1.1 503 Service Temporarily Unavailable');
// header('Status: 503 Service Temporarily Unavailable');
http_response_code(503);
header('Retry-After: 3600');
die('Sorry, not available now');
}

(miketomlin @ 17.7.2018, 15:47) *
Посмотри к примеру основной фрагмент кода тут – там больше 503-их, чем 404-ых

Посмотрел.
Насколько понял анализу подвергается каждый запрос к БД, что вполне логично, т.к. сбой может произойти и в конкретном запросе, а не при недоступности БД в целом.
Я правильно понимаю что error() только лишь собирает ошибки, и используется собственно для анализа корректности загрузки, а отдавать код ботам при этом всё равно нужно отдельно?


Сообщение отредактировал ShowPrint - 17.7.2018, 13:48
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 17.7.2018, 15:06; Ответить: miketomlin
Сообщение #9


Под N/A яша подразумевает, что у него еще руки не дошли до этой страницы (адреса). Видимо, получая 503-юю, он выставляет свой статус N/A, чтобы заняться уточнением действительного статуса этой страницы в будущем. И это вполне логично. 503-ие просто так не возникают. Деградация может продолжаться. Естественно, там не одна попытка делается достучаться до страницы при получении 503-ей, чтобы не делать совсем уж поспешных выводов.

(ShowPrint @ 17.7.2018, 16:46) *
Правильно ли я понимаю этот вариант
Да. Содержимое конечно я привык видеть более типичное, но по заголовкам вполне норм.

(ShowPrint @ 17.7.2018, 16:46) *
Я правильно понимаю что error() только лишь собирает ошибки, и используется собственно для анализа корректности загрузки, а отдавать код ботам при этом всё равно нужно отдельно?
Это абстрактная функция. Ее действие (содержимое) можно менять. Что она делает дефолтом в конкретной предполагаемой реализации, я написал там ниже в одном из комментов. Реализация простейшая. По дефолту статус выводится прямо в ф-ции, только вывод контента откладывается.
P.S. Еще проверь, может, при установке 503-го статуса заголовок Retry-After будет автоматом формироваться и выставляемое в нем значение тебя будет устраивать.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 17.7.2018, 15:24; Ответить: miketomlin
Сообщение #10


P.P.S. Реализация действительно простейшая. Там «в коробке» всего две абстрактных ф-ции. Вторая – это как раз функция подключения к БД. Правда, сейчас хотят ввести еще одну ф-цию и походу с предопределенным функционалом.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Proxylist4you.com: 5M+ приватных резидентных http\s\socks4\5 прокси с ротацией ✔️➡️⭐⭐⭐⭐Статичные прокси ✅ Серверные прокси⚡
0 proxylist4you 808 14.9.2022, 14:35
автор: proxylist4you
Горячая тема (нет новых ответов) Proxylist4you.com - 2.000.000 уникальных IP в месяц. Приватные прокси http\https\socks4\socks5. GEO пулы
Чистые и быстрые прокси. Residential Backconnect Rotating Proxies
40 proxylist4you 30052 8.11.2021, 14:34
автор: proxylist4you
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыProxy-Seller.ru - Персональные Прокси IPv4 от 40р. IPv6 от 5р. (socks/http)
Прокси в одни руки
79 VTatarskiy 39419 18.1.2021, 18:09
автор: Scotty
Открытая тема (нет новых ответов) Почистить код на сайте
1 Timka 1107 2.1.2021, 1:13
автор: 0pium
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВы мне код, я вам как - делать не надо.
0 fedornabilkin 958 18.9.2020, 18:59
автор: fedornabilkin


 



RSS Текстовая версия Сейчас: 20.4.2024, 13:05
Дизайн