Почему серваки возвращают не «HTTP 408 (Request Timed Out)», а 200 и текст «Maximum execution time of xxx seconds exceeded», или еще какую чушь?
Задача:
имеется REST API на PHP. В нем возможен баг (или просто тупизм сервака), хотелось бы, чтобы при запросах через jQuery, срабатывал "error" callback (для логирования и др.) а success callback не срабатывал.
А это будет происходить в таком случае только если ограничить timeout в самих AJAX Settings (т.е. на клиенте - а не на серваке), или если сервак вернет какую-то ошибку, например, 408.
Для тестов создал скрипт с бесконечным циклом.
На локалхосте (XAMPP) видимо execution limit стоит в 30 сек.
Сервак возвращает ответ с текстом "Maximum execution time of 30 seconds exceeded", что само по себе не кстати (ответ должен быть в формате JSON, не надо его засорять), а главное - возвращает 200, как будто все ок. И как прикажете такое
На хостинге видимо execution limit нету.
Сервак возвращает ошибку 500 и текст про "Internal Server Error".
Это лучше, но опять не совсем то.
Почему везде так?
Это так и должно быть, или это сугубо проблема Apache/nginx?
Что делать? Только задавать timeout на клиенте?
P.S.
И вообще, что-то я не вижу, чтоб хоть какую из этих ошибок (ну кроме 404) какой-то сервак возвращал бы "из коробки".
Скажем, 500 тоже не используется при ошибках в PHP.
Ну такие ошибки можно самому отловить, и вернуть их самому, либо как HTTP, либо в JSON как-то. А с этой что делать?
P.P.S.
Не стесняйтесь писать, что "пых уныл, вот у нас в Python\Ruby\ASP.NET\... такого нет")))))
Но в первую очередь хотел бы ответа на вопрос в заголовке
Это проблема сугубо PHP.
Когда 200-статус генерится раньше ошибки (execution limit).
Потому что PHP имеет свойство не буферизовать вывод, и разрабы должны отправить сначала шапку ответа, а потом сам ответ. Очевидно Maximum execution time of 30 seconds exceeded генерится самим PHP.