nas_docker_compose/kodbox/site/app/kod/HttpHeader.class.php
2024-08-31 01:03:37 +08:00

151 lines
5.0 KiB
PHP
Executable File

<?php
class HttpHeader{
public static $_headers = array(
'Host' => 'HTTP_HOST',
'User-Agent' => 'HTTP_USER_AGENT',
'Content-Type' => 'HTTP_CONTENT_TYPE',
'Content-Length' => 'HTTP_CONTENT_LENGTH',
'Depth' => 'HTTP_DEPTH',
'Expect' => 'HTTP_EXPECT',
'If-None-Match' => 'HTTP_IF_NONE_MATCH',
'If-Match' => 'HTTP_IF_MATCH',
'If-Range' => 'HTTP_IF_RANGE',
'Last-Modified' => 'HTTP_LAST_MODIFIED',
'If-Modified-Since' => 'HTTP_IF_MODIFIED_SINCE',
'If-Unmodified-Since' => 'HTTP_IF_UNMODIFIED_SINCE',
'Range' => 'HTTP_RANGE',
'Timeout' => 'HTTP_TIMEOUT',
'If' => 'HTTP_IF',
'Lock-Token' => 'HTTP_LOCK_TOKEN',
'Overwrite' => 'HTTP_OVERWRITE',
'Destination' => 'HTTP_DESTINATION',
'Request-Id' => 'REQUEST_ID',
'Request-Body-File' => 'REQUEST_BODY_FILE',
'Redirect-Status' => 'REDIRECT_STATUS',
);
public static function init(){
static $init = false;
if($init) return;
foreach ($_SERVER as $key=>$val){
$key = strtoupper($key);
if(!array_key_exists($key,$_SERVER)) continue;
$_SERVER[$key]= $val;
}
foreach (self::$_headers as $key=>$keyRequest){
if(!array_key_exists($key,$_SERVER)) continue;
$_SERVER[$key]= $_SERVER[$keyRequest];
$_SERVER[strtoupper($key)]= $_SERVER[$keyRequest];
}
}
public static function get($key){
self::init();
return $_SERVER[$key] ? $_SERVER[$key] : $_SERVER['HTTP_'.strtoupper($key)];
}
public static function method(){
return strtoupper(self::get('REQUEST_METHOD'));
}
public static function length(){
$result = self::get('X-Expected-Entity-Length');
if (!$result) {
$result = self::get('Content-Length');
}
return $result;
}
public static function range(){
$range = self::get('Range');
if (!$range) return false;
if (!preg_match('/^bytes=([0-9]*)-([0-9]*)$/i', $range, $matches)) return false;
if ($matches[1] === '' && $matches[2] === '') return false;
return array(
$matches[1] !== '' ? $matches[1] : null,
$matches[2] !== '' ? $matches[2] : null,
);
}
public static $statusCode = array(
/**
https://www.cnblogs.com/chengkanghua/p/11314230.html
1xx 临时响应;用于指定客户端应相应的某些动作
2xx 成功;用于表示请求成功
3xx 重定向;表示要完成请求,需要进一步操作
4xx 请求错误; 表示请求可能出错,妨碍了服务器的处理
5xx 服务器错误;服务器处理请求时内部错误
*/
'100' => 'Continue',
'101' => 'Switching Protocol',
'102' => 'Processing',
'103' => 'Early Hints',
'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',
'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 Large',
'415' => 'Unsupported Media Type',
'416' => 'Requested Range Not Satisfiable',
'417' => 'Expectation Failed',
'422' => 'Unprocessable Entity',
'423' => 'Locked',
'424' => 'Failed Dependency',
'425' => 'Unordered Collection',
'426' => 'Upgrade Required',
'428' => 'Precondition Required',
'429' => 'Too Many Requests',
'431' => 'Request Header Fields Too Large',
'444' => 'No Response',
'450' => 'Blocked by Windows Parental Controls',
'451' => 'Unavailable For Legal Reasons',
'494' => 'Request Header Too Large',
'500' => 'Internal Server Error',
'501' => 'Not Implemented',
'502' => 'Bad Gateway',
'503' => 'Service Unavailable',
'504' => 'Gateway Timeout',
'505' => 'HTTP Version not supported',
'507' => 'Insufficient Storage',
);
public static function code($code){
$code = $code.'';
$result = self::$statusCode[$code];
$result = $result ? "HTTP/1.1 $code ".$result : '';
return $result;
}
}