- Как получить HTTP код ответа удаленного веб-сервера из PHP?
- Домен не существует
- Доменные имена с использованием национальных наборов символов.
- Как вернуть коды состояния HTTP в приложении Spring Boot
- Вступление
- Что такое Коды Состояния HTTP?
- Возвращайте коды состояния HTTP при весенней загрузке
- Возврат кодов состояния ответа с помощью @ResponseStatus
- Git Essentials
- Возврат кодов состояния ответа с помощью ResponseEntity
- Возврат кодов состояния ответа с исключением ResponseStatusException
- Пользовательские классы исключений и Возвращающие коды состояния HTTP
- Вывод
- http_response_code
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes 18 notes
Как получить HTTP код ответа удаленного веб-сервера из PHP?
Когда требуется получить HTTP код для заданной URL, то вы наверняка воспользуетесь PHP функцией get_headers($url). Дальше я расскажу о разных подводных камнях и возникающих попутных проблемах.
В первом приближении задача решается элементарно. У вас есть URL, вы запрашиваете только заголовки, т.к. вам не нужен сам документ. В заголовках можно найти и пропарсить стандартный ответ сервера, чтобы извлечь код ответа.
Скорее всего, вы действительно получите желаемое, но не всегда. Потому перейдем к рассмотрению наиболее частых коллизий.
Домен не существует
Да такое бывает, когда введенный адрес не существует. Вернее не адрес, а доменное имя сайта. Запрос посылать некуда, а вы увидите (если не отключили вывод php warnings) что то вроде следующего:
PHP вернет пустые заголовки, из которых ничего не извлечь. Как можно обработать эту ситуацию?
Тут вы уже не увидите сообщений от PHP, а в случае невозможности определить адрес сервера — будет установлено какое то кастомное значение вместо HTTP кода, чтобы иметь возможность его обработать дальше.
Доменные имена с использованием национальных наборов символов.
Функция get_headers не настолько умна, чтобы переводить ваш http://россия.рф в http://xn--h1alffa9f.xn--p1ai200.
Если вы попытаетесь запросить заголовки без перевода в нужный вид, то прошлый пример выдаст вам загадочное ‘no response’. В то время как браузер без проблем откроет сайт, т.к. умеет переводить доменные имена, в которых используются местные национальные наборы символов, отличные от латиницы.
Для конвертации используем свободно распространяемую библиотеку idna_convert. Качайте архив, распаковывайте и подключайте в ваш код.
Источник
Как вернуть коды состояния HTTP в приложении Spring Boot
В этом руководстве мы рассмотрим, как возвращать коды состояния HTTP в приложениях Spring Boot с помощью @ResponseStatus, ResponseEntity и ResponseStatusException.
Автор: Guest Contributor
Дата записи
Вступление
Все инженеры-программисты, которые полагаются на внешние/сторонние сервисы или инструменты по протоколу HTTP, хотели бы знать, были ли приняты их запросы, и если нет, то что происходит.
Ваша роль как разработчика API состоит в том, чтобы обеспечить хороший опыт для ваших пользователей и, среди прочего, удовлетворить этот спрос. Чтобы другим разработчикам было легко определить, возвращает ли ваш API ошибку или нет, вы пройдете долгий путь, а в первом случае – сообщите другим разработчикам почему , чтобы вы продвинулись еще дальше.
Является ли ошибка вызвана внутренней службой API? Прислали ли они непоправимую ценность? Произошел ли полный сбой сервера, обрабатывающего эти запросы?
Сужение возможностей сбоя позволяет разработчикам, использующим ваш сервис, выполнять свою работу более эффективно. Именно здесь в игру вступают коды состояния HTTP с коротким сообщением в теле ответа, описывающим, что происходит.
В этом руководстве мы рассмотрим , как возвращать различные коды состояния HTTP в Spring Boot при разработке REST API.
Что такое Коды Состояния HTTP?
Проще говоря, код состояния HTTP относится к 3-значному коду, который является частью HTTP-ответа сервера. Первая цифра кода описывает категорию, в которую попадает ответ. Это уже дает подсказку для определения того, был ли запрос успешным или нет. Управление по присвоению номеров Интернету (IANA) ведет официальный реестр кодов состояния HTTP. Ниже приведены различные категории:
- Информация (1xx) : Указывает, что запрос был получен и процесс продолжается. Он предупреждает отправителя о необходимости дождаться окончательного ответа.
- Успешно (2xx) : Указывает, что запрос был успешно получен, понят и принят.
- Перенаправление (3xx) : Указывает, что для завершения запроса необходимо предпринять дальнейшие действия.
- Ошибки клиента (4xx) : Указывает, что во время обработки запроса произошла ошибка, и именно клиент вызвал ошибку.
- Ошибки сервера (5xx) : Указывает, что во время обработки запроса произошла ошибка, но она была вызвана сервером.
Хотя список вряд ли является исчерпывающим, вот некоторые из наиболее распространенных HTTP-кодов, с которыми вы столкнетесь:
Код | Статус | Описание |
200 | ОК | Запрос был успешно выполнен. |
201 | Созданный | Новый ресурс был успешно создан. |
400 | Плохой Запрос | Запрос был недействителен. |
401 | Неавторизованный | Запрос не включал маркер аутентификации или срок действия маркера аутентификации истек. |
403 | Запрещенный | У клиента не было разрешения на доступ к запрошенному ресурсу. |
404 | не найдено | Запрошенный ресурс не был найден. |
405 | Метод Не Допускается | Метод HTTP в запросе не поддерживался ресурсом. Например, метод УДАЛЕНИЯ нельзя использовать с API агента. |
500 | внутренняя ошибка сервера | Запрос не был выполнен из-за внутренней ошибки на стороне сервера. |
503 | Услуга недоступна | Сервер был недоступен. |
Возвращайте коды состояния HTTP при весенней загрузке
Spring Boot делает разработку приложений на основе Spring намного проще, чем когда-либо прежде, и автоматически возвращает соответствующие коды состояния. Если запрос прошел нормально, возвращается 200 OK , в то время как 404 Не найден возвращается, если ресурс не найден на сервере.
Тем не менее, есть много ситуаций, в которых мы хотели бы сами принять решение о коде состояния HTTP, который будет возвращен в ответе, и Spring Boot предоставляет нам несколько способов для этого.
Давайте запустим скелетный проект с помощью Spring Initializr:
Или с помощью пружинного зажима:
У нас будет простой контроллер, Тестовый контроллер :
Здесь мы создадим несколько обработчиков запросов, которые возвращают различные коды состояния с помощью нескольких различных подходов.
Возврат кодов состояния ответа с помощью @ResponseStatus
Эта аннотация принимает в качестве аргумента код состояния HTTP, который должен быть возвращен в ответе. Spring упрощает нашу работу, предоставляя перечисление, содержащее все коды состояния HTTP. Это очень универсальная аннотация, и ее можно использовать в контроллерах на уровне класса или метода, в пользовательских классах исключений и в классах, аннотированных @ControllerAdvice (на уровне класса или метода).
Он работает одинаково как в классах с аннотациями @ControllerAdvice , так и в классах с аннотациями @Controller . В обоих случаях он обычно сопровождается аннотацией @ResponseBody . При использовании на уровне класса все методы класса приведут к ответу с указанным кодом состояния HTTP. Все аннотации уровня метода @ResponseStatus переопределяют код уровня класса, и если @ResponseStatus не связан с методом, который не создает исключение- a 200 возвращается по умолчанию:
Уровень класса @ResponseStatus становится кодом по умолчанию, возвращаемым для всех методов, если только метод не переопределяет его. Обработчик /уровня класса запроса не связан со статусом на уровне метода, поэтому включается статус на уровне класса, возвращающий 503 Недоступную службу , если кто-то попадает в конечную точку. С другой стороны, /уровень метода конечная точка возвращает 200 OK :
@ResponseStatus работает по-другому при использовании в пользовательских классах исключений. Здесь указанный код состояния HTTP будет возвращен в ответе, когда исключение такого типа генерируется, но не перехватывается. Мы подробнее рассмотрим все это в коде в более позднем разделе.
Кроме того, вы можете указать причину , которая автоматически запускает метод HttpServletResponse.sendError () , что означает, что все, что вы вернете, не будет выполнено:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Хотя, чтобы на самом деле получить причину для отправки с помощью метода sendError () , вам нужно будет установить свойство include-message в application.properties :
Теперь, если мы отправим запрос на /уровень метода :
Это, вероятно, самый простой способ вернуть статус HTTP, но также и жесткий . Мы действительно не можем изменить коды состояния вручную, с помощью кода здесь. Именно здесь вступает в действие класс ResponseEntity .
Возврат кодов состояния ответа с помощью ResponseEntity
Класс ResponseEntity используется, когда мы хотим программно указать все аспекты HTTP-ответа. Это включает в себя заголовки, текст и, конечно же, код состояния. Этот способ является наиболее подробным способом возврата HTTP-ответа при весенней загрузке, но также и наиболее настраиваемым. Многие предпочитают использовать аннотацию @ResponseBody в сочетании с @ResponseStatus , поскольку они проще. Объект ResponseEntity может быть создан с помощью одного из нескольких конструкторов или с помощью метода статического конструктора:
Основное преимущество использования ResponseEntity заключается в том, что вы можете связать его с другой логикой, такой как:
Здесь мы сгенерировали случайное целое число в диапазоне от 1 до 10 и вернули код состояния в зависимости от случайного целого числа. Проверив, является ли случайное значение Int больше, чем 9 , мы дали клиенту 10% вероятность увидеть “Я чайник” Код статуса первоапрельского дурака, добавленный в RFC2324 .
Отправка нескольких запросов на эту конечную точку в конечном итоге вернет:
Возврат кодов состояния ответа с исключением ResponseStatusException
Класс, используемый для возврата кодов состояния в исключительных случаях, – это класс ResponseStatusException . Он используется для возврата определенного сообщения и кода состояния HTTP, который будет возвращен при возникновении ошибки. Это альтернатива использованию @ExceptionHandler и @ControllerAdvice . Обработка исключений с использованием ResponseStatusException считается более детальной. Это позволяет избежать создания ненужных дополнительных классов исключений и уменьшает тесную связь между кодами состояния и самими классами исключений:
Он ведет себя так же, как когда мы задаем причину через @ResponseStatus , поскольку основной механизм тот же – метод sendError() :
Пользовательские классы исключений и Возвращающие коды состояния HTTP
Наконец, еще один способ обработки исключений-через @ResponseStatus и @ControllerAdvice аннотации и пользовательские классы исключений. Хотя ResponseStatusException предпочтительнее, если по какой-либо причине его нет на картинке, вы всегда можете использовать их.
Давайте добавим два обработчика запросов, которые создают новые пользовательские исключения:
Теперь давайте определим эти исключения и их собственные коды по умолчанию @ResponseStatus (которые переопределяют статус на уровне класса):
Наконец, мы создадим @ControllerAdvice контроллер, который используется для настройки того, как Spring Boot управляет исключениями:
Наконец, когда мы запускаем несколько HTTP-запросов, конечная точка , возвращающая Пойманное пользовательское исключение , будет отформатирована в соответствии с @ControllerAdvice , в то время как исключение UnCaughtCustomException не будет:
Вывод
В этом руководстве мы рассмотрели, как возвращать коды состояния HTTP при весенней загрузке с помощью @ResponseStatus , ResponseEntity и ResponseStatusException , а также как определять пользовательские исключения и обрабатывать их как через @ControllerAdvice , так и без него.
Источник
http_response_code
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
http_response_code — Получает или устанавливает код ответа HTTP
Описание
Получает или задаёт коды ответов HTTP.
Список параметров
Код ответа устанавливается с помощью опционального параметра response_code .
Возвращаемые значения
Если response_code задан, то будет возвращён предыдущий код статуса. Если response_code не задан, то будет возвращён текущий код статуса. Оба этих значения будут по умолчанию иметь код состояния 200 , если они используются в окружении веб-сервера.
Если response_code не задан и используется не в окружении веб-сервера (например, в CLI), то будет возвращено false . Если response_code задан и используется не в окружении веб-сервера, то будет возвращено true (но только если не был установлен предыдущий код статуса).
Примеры
Пример #1 Использование http_response_code() в окружении веб-сервера
// Берём текущий код и устанавливаем новый
var_dump ( http_response_code ( 404 ));
// Берём новый код
var_dump ( http_response_code ());
?>
Результат выполнения данного примера:
Пример #2 Использование http_response_code() в CLI
// Берём текущий код по умолчанию
var_dump ( http_response_code ());
// Устанавливаем код
var_dump ( http_response_code ( 201 ));
// Берём новый код
var_dump ( http_response_code ());
?>
Результат выполнения данного примера:
Смотрите также
- header() — Отправка HTTP-заголовка
- headers_list() — Возвращает список переданных заголовков (или готовых к отправке)
User Contributed Notes 18 notes
If your version of PHP does not include this function:
if (! function_exists ( ‘http_response_code’ )) <
function http_response_code ( $code = NULL ) <
switch ( $code ) <
case 100 : $text = ‘Continue’ ; break;
case 101 : $text = ‘Switching Protocols’ ; break;
case 200 : $text = ‘OK’ ; break;
case 201 : $text = ‘Created’ ; break;
case 202 : $text = ‘Accepted’ ; break;
case 203 : $text = ‘Non-Authoritative Information’ ; break;
case 204 : $text = ‘No Content’ ; break;
case 205 : $text = ‘Reset Content’ ; break;
case 206 : $text = ‘Partial Content’ ; break;
case 300 : $text = ‘Multiple Choices’ ; break;
case 301 : $text = ‘Moved Permanently’ ; break;
case 302 : $text = ‘Moved Temporarily’ ; break;
case 303 : $text = ‘See Other’ ; break;
case 304 : $text = ‘Not Modified’ ; break;
case 305 : $text = ‘Use Proxy’ ; break;
case 400 : $text = ‘Bad Request’ ; break;
case 401 : $text = ‘Unauthorized’ ; break;
case 402 : $text = ‘Payment Required’ ; break;
case 403 : $text = ‘Forbidden’ ; break;
case 404 : $text = ‘Not Found’ ; break;
case 405 : $text = ‘Method Not Allowed’ ; break;
case 406 : $text = ‘Not Acceptable’ ; break;
case 407 : $text = ‘Proxy Authentication Required’ ; break;
case 408 : $text = ‘Request Time-out’ ; break;
case 409 : $text = ‘Conflict’ ; break;
case 410 : $text = ‘Gone’ ; break;
case 411 : $text = ‘Length Required’ ; break;
case 412 : $text = ‘Precondition Failed’ ; break;
case 413 : $text = ‘Request Entity Too Large’ ; break;
case 414 : $text = ‘Request-URI Too Large’ ; break;
case 415 : $text = ‘Unsupported Media Type’ ; break;
case 500 : $text = ‘Internal Server Error’ ; break;
case 501 : $text = ‘Not Implemented’ ; break;
case 502 : $text = ‘Bad Gateway’ ; break;
case 503 : $text = ‘Service Unavailable’ ; break;
case 504 : $text = ‘Gateway Time-out’ ; break;
case 505 : $text = ‘HTTP Version not supported’ ; break;
default:
exit( ‘Unknown http status code «‘ . htmlentities ( $code ) . ‘»‘ );
break;
>
$protocol = (isset( $_SERVER [ ‘SERVER_PROTOCOL’ ]) ? $_SERVER [ ‘SERVER_PROTOCOL’ ] : ‘HTTP/1.0’ );
header ( $protocol . ‘ ‘ . $code . ‘ ‘ . $text );
$GLOBALS [ ‘http_response_code’ ] = $code ;
$code = (isset( $GLOBALS [ ‘http_response_code’ ]) ? $GLOBALS [ ‘http_response_code’ ] : 200 );
?>
In this example I am using $GLOBALS, but you can use whatever storage mechanism you like. I don’t think there is a way to return the current status code:
For reference the error codes I got from PHP’s source code:
And how the current http header is sent, with the variables it uses:
Note that you can NOT set arbitrary response codes with this function, only those that are known to PHP (or the SAPI PHP is running on).
The following codes currently work as expected (with PHP running as Apache module):
200 – 208, 226
300 – 305, 307, 308
400 – 417, 422 – 424, 426, 428 – 429, 431
500 – 508, 510 – 511
Codes 0, 100, 101, and 102 will be sent as «200 OK».
Everything else will result in «500 Internal Server Error».
If you want to send responses with a freestyle status line, you need to use the `header()` function:
( «HTTP/1.0 418 I’m A Teapot» ); ?>
When setting the response code to non-standard ones like 420, Apache outputs 500 Internal Server Error.
This happens when using header(0,0,420) and http_response_code(420).
Use header(‘HTTP/1.1 420 Enhance Your Calm’) instead.
Note that the response code in the string IS interpreted and used in the access log and output via http_response_code().
Status codes as an array:
= array( 100 => «Continue» , 101 => «Switching Protocols» , 102 => «Processing» , 200 => «OK» , 201 => «Created» , 202 => «Accepted» , 203 => «Non-Authoritative Information» , 204 => «No Content» , 205 => «Reset Content» , 206 => «Partial Content» , 207 => «Multi-Status» , 300 => «Multiple Choices» , 301 => «Moved Permanently» , 302 => «Found» , 303 => «See Other» , 304 => «Not Modified» , 305 => «Use Proxy» , 306 => «(Unused)» , 307 => «Temporary Redirect» , 308 => «Permanent Redirect» , 400 => «Bad Request» , 401 => «Unauthorized» , 402 => «Payment Required» , 403 => «Forbidden» , 404 => «Not Found» , 405 => «Method Not Allowed» , 406 => «Not Acceptable» , 407 => «Proxy Authentication Required» , 408 => «Request Timeout» , 409 => «Conflict» , 410 => «Gone» , 411 => «Length Required» , 412 => «Precondition Failed» , 413 => «Request Entity Too Large» , 414 => «Request-URI Too Long» , 415 => «Unsupported Media Type» , 416 => «Requested Range Not Satisfiable» , 417 => «Expectation Failed» , 418 => «I’m a teapot» , 419 => «Authentication Timeout» , 420 => «Enhance Your Calm» , 422 => «Unprocessable Entity» , 423 => «Locked» , 424 => «Failed Dependency» , 424 => «Method Failure» , 425 => «Unordered Collection» , 426 => «Upgrade Required» , 428 => «Precondition Required» , 429 => «Too Many Requests» , 431 => «Request Header Fields Too Large» , 444 => «No Response» , 449 => «Retry With» , 450 => «Blocked by Windows Parental Controls» , 451 => «Unavailable For Legal Reasons» , 494 => «Request Header Too Large» , 495 => «Cert Error» , 496 => «No Cert» , 497 => «HTTP to HTTPS» , 499 => «Client Closed Request» , 500 => «Internal Server Error» , 501 => «Not Implemented» , 502 => «Bad Gateway» , 503 => «Service Unavailable» , 504 => «Gateway Timeout» , 505 => «HTTP Version Not Supported» , 506 => «Variant Also Negotiates» , 507 => «Insufficient Storage» , 508 => «Loop Detected» , 509 => «Bandwidth Limit Exceeded» , 510 => «Not Extended» , 511 => «Network Authentication Required» , 598 => «Network read timeout error» , 599 => «Network connect timeout error» );
?>
Source: Wikipedia «List_of_HTTP_status_codes»
You can also create a enum by extending the SplEnum class.
/** HTTP status codes */
class HttpStatusCode extends SplEnum <
const __default = self :: OK ;
const SWITCHING_PROTOCOLS = 101 ;
const OK = 200 ;
const CREATED = 201 ;
const ACCEPTED = 202 ;
const NONAUTHORITATIVE_INFORMATION = 203 ;
const NO_CONTENT = 204 ;
const RESET_CONTENT = 205 ;
const PARTIAL_CONTENT = 206 ;
const MULTIPLE_CHOICES = 300 ;
const MOVED_PERMANENTLY = 301 ;
const MOVED_TEMPORARILY = 302 ;
const SEE_OTHER = 303 ;
const NOT_MODIFIED = 304 ;
const USE_PROXY = 305 ;
const BAD_REQUEST = 400 ;
const UNAUTHORIZED = 401 ;
const PAYMENT_REQUIRED = 402 ;
const FORBIDDEN = 403 ;
const NOT_FOUND = 404 ;
const METHOD_NOT_ALLOWED = 405 ;
const NOT_ACCEPTABLE = 406 ;
const PROXY_AUTHENTICATION_REQUIRED = 407 ;
const REQUEST_TIMEOUT = 408 ;
const CONFLICT = 408 ;
const GONE = 410 ;
const LENGTH_REQUIRED = 411 ;
const PRECONDITION_FAILED = 412 ;
const REQUEST_ENTITY_TOO_LARGE = 413 ;
const REQUESTURI_TOO_LARGE = 414 ;
const UNSUPPORTED_MEDIA_TYPE = 415 ;
const REQUESTED_RANGE_NOT_SATISFIABLE = 416 ;
const EXPECTATION_FAILED = 417 ;
const IM_A_TEAPOT = 418 ;
const INTERNAL_SERVER_ERROR = 500 ;
const NOT_IMPLEMENTED = 501 ;
const BAD_GATEWAY = 502 ;
const SERVICE_UNAVAILABLE = 503 ;
const GATEWAY_TIMEOUT = 504 ;
const HTTP_VERSION_NOT_SUPPORTED = 505 ;
>
Do not mix the use of http_response_code() and manually setting the response code header because the actual HTTP status code being returned by the web server may not end up as expected. http_response_code() does not work if the response code has previously been set using the header() function. Example:
( ‘HTTP/1.1 401 Unauthorized’ );
http_response_code ( 403 );
print( http_response_code ());
?>
The raw HTTP response will be (notice the actual status code on the first line does not match the printed http_response_code in the body):
HTTP/1.1 401 Unauthorized
Date: Tue, 24 Nov 2020 13:49:08 GMT
Server: Apache
Connection: Upgrade, Keep-Alive
Keep-Alive: timeout=5, max=100
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
I only tested it on Apache. I am not sure if this behavior is specific to Apache or common to all PHP distributions.
The note above from «Anonymous» is wrong. I’m running this behind the AWS Elastic Loadbalancer and trying the header(‘:’.$error_code. ) method mentioned above is treated as invalid HTTP.
The documentation for the header() function has the right way to implement this if you’re still on ( «HTTP/1.0 404 Not Found» );
?>
At least on my side with php-fpm and nginx this method does not change the text in the response, only the code.
// HTTP/1.1 404 Not Found
http_response_code ( 404 );
?>
The resulting response is HTTP/1.1 404 OK
http_response_code() does not actually send HTTP headers, it only prepares the header list to be sent later on.
So you can call http_reponse_code() to set, get and reset the HTTP response code before it gets sent.
http_response_code(500); // set the code
var_dump(headers_sent()); // check if headers are sent
http_response_code(200); // avoid a default browser page
http_response_code is basically a shorthand way of writing a http status header, with the added bonus that PHP will work out a suitable Reason Phrase to provide by matching your response code to one of the values in an enumeration it maintains within php-src/main/http_status_codes.h. Note that this means your response code must match a response code that PHP knows about. You can’t create your own response codes using this method, however you can using the header method.
In summary — The differences between «http_response_code» and «header» for setting response codes:
1. Using http_response_code will cause PHP to match and apply a Reason Phrase from a list of Reason Phrases that are hard-coded into the PHP source code.
2. Because of point 1 above, if you use http_response_code you must set a code that PHP knows about. You can’t set your own custom code, however you can set a custom code (and Reason Phrase) if you use the header method.
It’s not mentioned explicitly, but the return value when SETTING, is the OLD status code.
e.g.
= http_response_code ();
$b = http_response_code ( 202 );
$c = http_response_code ();
var_dump ( $a , $b , $c );
@craig at craigfrancis dot co dot uk@ wrote the function that replaces the original. It is very usefull, but has a bug. The original http_response_code always returns the previous or current code, not the code you are setting now. Here is my fixed version. I also use $GLOBALS to store the current code, but trigger_error() instead of exit. So now, how the function will behave in the case of error lies on the error handler. Or you can change it back to exit().
if (!function_exists(‘http_response_code’)) <
function http_response_code($code = NULL) <
$prev_code = (isset($GLOBALS[‘http_response_code’]) ? $GLOBALS[‘http_response_code’] : 200);
if ($code === NULL) <
return $prev_code;
>
switch ($code) <
case 100: $text = ‘Continue’; break;
case 101: $text = ‘Switching Protocols’; break;
case 200: $text = ‘OK’; break;
case 201: $text = ‘Created’; break;
case 202: $text = ‘Accepted’; break;
case 203: $text = ‘Non-Authoritative Information’; break;
case 204: $text = ‘No Content’; break;
case 205: $text = ‘Reset Content’; break;
case 206: $text = ‘Partial Content’; break;
case 300: $text = ‘Multiple Choices’; break;
case 301: $text = ‘Moved Permanently’; break;
case 302: $text = ‘Moved Temporarily’; break;
case 303: $text = ‘See Other’; break;
case 304: $text = ‘Not Modified’; break;
case 305: $text = ‘Use Proxy’; break;
case 400: $text = ‘Bad Request’; break;
case 401: $text = ‘Unauthorized’; break;
case 402: $text = ‘Payment Required’; break;
case 403: $text = ‘Forbidden’; break;
case 404: $text = ‘Not Found’; break;
case 405: $text = ‘Method Not Allowed’; break;
case 406: $text = ‘Not Acceptable’; break;
case 407: $text = ‘Proxy Authentication Required’; break;
case 408: $text = ‘Request Time-out’; break;
case 409: $text = ‘Conflict’; break;
case 410: $text = ‘Gone’; break;
case 411: $text = ‘Length Required’; break;
case 412: $text = ‘Precondition Failed’; break;
case 413: $text = ‘Request Entity Too Large’; break;
case 414: $text = ‘Request-URI Too Large’; break;
case 415: $text = ‘Unsupported Media Type’; break;
case 500: $text = ‘Internal Server Error’; break;
case 501: $text = ‘Not Implemented’; break;
case 502: $text = ‘Bad Gateway’; break;
case 503: $text = ‘Service Unavailable’; break;
case 504: $text = ‘Gateway Time-out’; break;
case 505: $text = ‘HTTP Version not supported’; break;
default:
trigger_error(‘Unknown http status code ‘ . $code, E_USER_ERROR); // exit(‘Unknown http status code «‘ . htmlentities($code) . ‘»‘);
return $prev_code;
>
$protocol = (isset($_SERVER[‘SERVER_PROTOCOL’]) ? $_SERVER[‘SERVER_PROTOCOL’] : ‘HTTP/1.0’);
header($protocol . ‘ ‘ . $code . ‘ ‘ . $text);
$GLOBALS[‘http_response_code’] = $code;
// original function always returns the previous or current code
return $prev_code;
>
>
Источник