как правильно отдавать код ошибки на сайте? если страница не найдена тогда код 404 а в остальных случаях? показать страницу с ошибкой и отдать код 200?
Чисто логически 200 это когда контент отдаётся без проблем вообще. Если есть ошибки, то статус 200 не логичен - там из 5хх серии должно быть, если ошибки сервера. А что значит правильно отдавать? Есть функция, которая устанавливает статус ответа - http_response_code - её вполне достаточно.
Есть множество остальных случаев, смотри что тебе подходит: Список кодов состояния HTTP Например, если ты закрыл сайт на обслуживание, выставь код 503 Service Unavailable чтобы поисковики не торопились испортить твои проиндексированные странички. 204 No Content можно вернуть на запрос обновления данных, если всё прошло успешно и ты не хочешь выдавать какой-то контент, просто сигналишь "всё прошло нормуль". и т.д.
Для обычных страниц без HTTP-авторизации достаточно кодов ошибок 404 и 503. 503 – это любой сбой, связанный с «неготовностью» данных, т.е. когда есть шанс через нек. время нажать «Обновить» (или выполнить аналогичный запрос) и получить ответ 200. Естественно, не беру в расчет ошибки, возвращаемые сервером, минуя скрипт (500, 501 и т.п.). P.S. Сеошники иногда любят поиграться с 410, как альтернативой 404. --- Добавлено --- P.P.S. Типичным источником 503 является работа с БД. Это рабочая альтернатива всяких die'ев. Некоторые еще умудряются врем. редирект при ошибках БД делать, но по-моему это от безысходности
например если ввели неправильный пароль, то разве надо показывать ошибку 503? а если урл принимает только post или ajax, а его открыли через гет, тоже 503?
??? Ответ на любой ввод, не считая AJAX, – редирект. Точно не 503 именно из-за этого. Это некорректный запрос. 404 или даже 200 при попытки отдать ответ независимо от типа поступившего запроса. 503 может возникать походу по причине, о кот. я выше писал, например не получилось сохранить данные в БД в ответ на POST, можно где-то не «пользовательскую» ошибку формировать (с редиректом и т.п.), а выдать 503-юю (и даже на ней приписать «Нажмите Обновить» – есть шанс не потерять данные, т.к. браузер их обычно сохраняет, пока не получит успешный ответ). Вообще же у нас в конторе принято POST, AJAX GET/POST совмещать с GET, т.е. POST-обработчика без GET-обработчика не бывает, при отсутствии спец. POST-обработчика отрабатывает GET-обработчик (POST считается GETом).
503-яя была бы только в случае, если бы сбой произошел при попытке достать данные из БД для сверки, например когда база заблокирована из-за чрезмерной нагрузки.