brookhttpconsts.pas 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. (*
  2. Brook for Free Pascal
  3. Copyright (C) 2014-2019 Silvio Clecio
  4. See the file LICENSE.txt, included in this distribution,
  5. for details about the copyright.
  6. This library is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. *)
  10. { HTTP consts unit. }
  11. unit BrookHttpConsts;
  12. {$i brook.inc}
  13. interface
  14. uses
  15. BrookConsts;
  16. const
  17. { - 1xx: Informational - Request received, continuing process }
  18. { }
  19. BROOK_HTTP_STATUS_CODE_CONTINUE = 100;
  20. BROOK_HTTP_STATUS_CODE_SWITCHING_PROTOCOLS = 101;
  21. { - 2xx: Success - The action was successfully received, understood, and accepted }
  22. { }
  23. BROOK_HTTP_STATUS_CODE_OK = 200;
  24. BROOK_HTTP_STATUS_CODE_CREATED = 201;
  25. BROOK_HTTP_STATUS_CODE_ACCEPTED = 202;
  26. BROOK_HTTP_STATUS_CODE_NON_AUTHORITATIVE_INFORMATION = 203;
  27. BROOK_HTTP_STATUS_CODE_NO_CONTENT = 204;
  28. BROOK_HTTP_STATUS_CODE_RESET_CONTENT = 205;
  29. BROOK_HTTP_STATUS_CODE_PARTIAL_CONTENT = 206;
  30. { - 3xx: Redirection - Further action must be taken in order to complete the request }
  31. { }
  32. BROOK_HTTP_STATUS_CODE_MULTIPLE_CHOICES = 300;
  33. BROOK_HTTP_STATUS_CODE_MOVED_PERMANENTLY = 301;
  34. BROOK_HTTP_STATUS_CODE_FOUND = 302;
  35. BROOK_HTTP_STATUS_CODE_SEE_OTHER = 303;
  36. BROOK_HTTP_STATUS_CODE_NOT_MODIFIED = 304;
  37. BROOK_HTTP_STATUS_CODE_USE_PROXY = 305;
  38. BROOK_HTTP_STATUS_CODE_TEMPORARY_REDIRECT = 307;
  39. { - 4xx: Client Error - The request contains bad syntax or cannot be fulfilled }
  40. { }
  41. BROOK_HTTP_STATUS_CODE_BAD_REQUEST = 400;
  42. BROOK_HTTP_STATUS_CODE_UNAUTHORIZED = 401;
  43. BROOK_HTTP_STATUS_CODE_PAYMENT_REQUIRED = 402;
  44. BROOK_HTTP_STATUS_CODE_FORBIDDEN = 403;
  45. BROOK_HTTP_STATUS_CODE_NOT_FOUND = 404;
  46. BROOK_HTTP_STATUS_CODE_METHOD_NOT_ALLOWED = 405;
  47. BROOK_HTTP_STATUS_CODE_NOT_ACCEPTABLE = 406;
  48. BROOK_HTTP_STATUS_CODE_PROXY_AUTHENTICATION_REQUIRED = 407;
  49. BROOK_HTTP_STATUS_CODE_REQUEST_TIMEOUT = 408;
  50. BROOK_HTTP_STATUS_CODE_CONFLICT = 409;
  51. BROOK_HTTP_STATUS_CODE_GONE = 410;
  52. BROOK_HTTP_STATUS_CODE_LENGTH_REQUIRED = 411;
  53. BROOK_HTTP_STATUS_CODE_PRECONDITION_FAILED = 412;
  54. BROOK_HTTP_STATUS_CODE_REQUEST_ENTITY_TOO_LARGE = 413;
  55. BROOK_HTTP_STATUS_CODE_REQUEST_URI_TOO_LONG = 414;
  56. BROOK_HTTP_STATUS_CODE_UNSUPPORTED_MEDIA_TYPE = 415;
  57. BROOK_HTTP_STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
  58. BROOK_HTTP_STATUS_CODE_EXPECTATION_FAILED = 417;
  59. { - 5xx: Server Error - The server failed to fulfill an apparently valid request }
  60. { }
  61. BROOK_HTTP_STATUS_CODE_INTERNAL_SERVER_ERROR = 500;
  62. BROOK_HTTP_STATUS_CODE_NOT_IMPLEMENTED = 501;
  63. BROOK_HTTP_STATUS_CODE_BAD_GATEWAY = 502;
  64. BROOK_HTTP_STATUS_CODE_SERVICE_UNAVAILABLE = 503;
  65. BROOK_HTTP_STATUS_CODE_GATEWAY_TIMEOUT = 504;
  66. BROOK_HTTP_STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED = 505;
  67. { - 1xx: Informational - Request received, continuing process }
  68. { }
  69. BROOK_HTTP_REASON_PHRASE_CONTINUE = 'Continue';
  70. BROOK_HTTP_REASON_PHRASE_SWITCHING_PROTOCOLS = 'Switching Protocols';
  71. { - 2xx: Success - The action was successfully received, understood, and accepted }
  72. { }
  73. BROOK_HTTP_REASON_PHRASE_OK = 'OK';
  74. BROOK_HTTP_REASON_PHRASE_CREATED = 'Created';
  75. BROOK_HTTP_REASON_PHRASE_ACCEPTED = 'Accepted';
  76. BROOK_HTTP_REASON_PHRASE_NON_AUTHORITATIVE_INFORMATION = 'Non-Authoritative Information';
  77. BROOK_HTTP_REASON_PHRASE_NO_CONTENT = 'No Content';
  78. BROOK_HTTP_REASON_PHRASE_RESET_CONTENT = 'Reset Content';
  79. BROOK_HTTP_REASON_PHRASE_PARTIAL_CONTENT = 'Partial Content';
  80. { - 3xx: Redirection - Further action must be taken in order to complete the request }
  81. { }
  82. BROOK_HTTP_REASON_PHRASE_MULTIPLE_CHOICES = 'Multiple Choices';
  83. BROOK_HTTP_REASON_PHRASE_MOVED_PERMANENTLY = 'Moved Permanently';
  84. BROOK_HTTP_REASON_PHRASE_FOUND = 'Found';
  85. BROOK_HTTP_REASON_PHRASE_SEE_OTHER = 'See Other';
  86. BROOK_HTTP_REASON_PHRASE_NOT_MODIFIED = 'Not Modified';
  87. BROOK_HTTP_REASON_PHRASE_USE_PROXY = 'Use Proxy';
  88. // 10.3.7 306 (Unused)
  89. // The 306 status code was used in a previous version of the specification,
  90. // is no longer used, and the code is reserved.
  91. { }
  92. BROOK_HTTP_REASON_PHRASE_TEMPORARY_REDIRECT = 'Temporary Redirect';
  93. { - 4xx: Client Error - The request contains bad syntax or cannot be fulfilled }
  94. { }
  95. BROOK_HTTP_REASON_PHRASE_BAD_REQUEST = 'Bad Request';
  96. BROOK_HTTP_REASON_PHRASE_UNAUTHORIZED = 'Unauthorized';
  97. BROOK_HTTP_REASON_PHRASE_PAYMENT_REQUIRED = 'Payment Required';
  98. BROOK_HTTP_REASON_PHRASE_FORBIDDEN = 'Forbidden';
  99. BROOK_HTTP_REASON_PHRASE_NOT_FOUND = 'Not Found';
  100. BROOK_HTTP_REASON_PHRASE_METHOD_NOT_ALLOWED = 'Method Not Allowed';
  101. BROOK_HTTP_REASON_PHRASE_NOT_ACCEPTABLE = 'Not Acceptable';
  102. BROOK_HTTP_REASON_PHRASE_PROXY_AUTHENTICATION_REQUIRED = 'Proxy Authentication Required';
  103. BROOK_HTTP_REASON_PHRASE_REQUEST_TIMEOUT = 'Request Timeout';
  104. BROOK_HTTP_REASON_PHRASE_CONFLICT = 'Conflict';
  105. BROOK_HTTP_REASON_PHRASE_GONE = 'Gone';
  106. BROOK_HTTP_REASON_PHRASE_LENGTH_REQUIRED = 'Length Required';
  107. BROOK_HTTP_REASON_PHRASE_PRECONDITION_FAILED = 'Precondition Failed';
  108. BROOK_HTTP_REASON_PHRASE_REQUEST_ENTITY_TOO_LARGE = 'Request Entity Too Large';
  109. BROOK_HTTP_REASON_PHRASE_REQUEST_URI_TOO_LONG = 'Request-URI Too Long';
  110. BROOK_HTTP_REASON_PHRASE_UNSUPPORTED_MEDIA_TYPE = 'Unsupported Media Type';
  111. BROOK_HTTP_REASON_PHRASE_REQUESTED_RANGE_NOT_SATISFIABLE = 'Requested Range Not Satisfiable';
  112. BROOK_HTTP_REASON_PHRASE_EXPECTATION_FAILED = 'Expectation Failed';
  113. { - 5xx: Server Error - The server failed to fulfill an apparently valid request }
  114. { }
  115. BROOK_HTTP_REASON_PHRASE_INTERNAL_SERVER_ERROR = 'Internal Server Error';
  116. BROOK_HTTP_REASON_PHRASE_NOT_IMPLEMENTED = 'Not Implemented';
  117. BROOK_HTTP_REASON_PHRASE_BAD_GATEWAY = 'Bad Gateway';
  118. BROOK_HTTP_REASON_PHRASE_SERVICE_UNAVAILABLE = 'Service Unavailable';
  119. BROOK_HTTP_REASON_PHRASE_GATEWAY_TIMEOUT = 'Gateway Timeout';
  120. BROOK_HTTP_REASON_PHRASE_HTTP_VERSION_NOT_SUPPORTED = 'HTTP Version Not Supported';
  121. { All HTTP methods }
  122. { }
  123. BROOK_HTTP_REQUEST_METHOD_GET = 'GET';
  124. BROOK_HTTP_REQUEST_METHOD_POST = 'POST';
  125. BROOK_HTTP_REQUEST_METHOD_PUT = 'PUT';
  126. BROOK_HTTP_REQUEST_METHOD_DELETE = 'DELETE';
  127. BROOK_HTTP_REQUEST_METHOD_HEAD = 'HEAD';
  128. BROOK_HTTP_REQUEST_METHOD_OPTIONS = 'OPTIONS';
  129. BROOK_HTTP_REQUEST_METHOD_PATCH = 'PATCH';
  130. BROOK_HTTP_REQUEST_METHOD_PROPFIND = 'PROPFIND';
  131. BROOK_HTTP_REQUEST_METHOD_PROPPATCH = 'PROPPATCH';
  132. BROOK_HTTP_REQUEST_METHOD_COPY = 'COPY';
  133. BROOK_HTTP_REQUEST_METHOD_MOVE = 'MOVE';
  134. BROOK_HTTP_REQUEST_METHOD_MKCOL = 'MKCOL';
  135. BROOK_HTTP_REQUEST_METHOD_TRACE = 'TRACE';
  136. BROOK_HTTP_REQUEST_METHOD_LOCK = 'LOCK';
  137. BROOK_HTTP_REQUEST_METHOD_UNLOCK = 'UNLOCK';
  138. { Some header fields }
  139. { }
  140. BROOK_HTTP_HEADER_CACHE_CONTROL = 'Cache-Control';
  141. BROOK_HTTP_HEADER_CONTENT_DESCRIPTION = 'Content-Description';
  142. BROOK_HTTP_HEADER_CONTENT_DISPOSITION = 'Content-Disposition';
  143. BROOK_HTTP_HEADER_ETAG = 'ETag';
  144. BROOK_HTTP_HEADER_STATUS = 'Status';
  145. BROOK_HTTP_HEADER_TRANSFER_ENCODING = 'Transfer-Encoding';
  146. BROOK_HTTP_HEADER_X_POWERED_BY = 'X-Powered-By';
  147. BROOK_HTTP_HEADER_CHARSET = '; charset=';
  148. { Some content-types }
  149. { }
  150. BROOK_HTTP_CONTENT_TYPE_TEXT_PLAIN = 'text/plain';
  151. BROOK_HTTP_CONTENT_TYPE_TEXT_HTML = 'text/html';
  152. BROOK_HTTP_CONTENT_TYPE_TEXT_CSS = 'text/css';
  153. BROOK_HTTP_CONTENT_TYPE_TEXT_XML = 'text/xml';
  154. BROOK_HTTP_CONTENT_TYPE_TEXT_CVS = 'text/cvs';
  155. BROOK_HTTP_CONTENT_TYPE_TEXT_RICHTEXT = 'text/richtext';
  156. BROOK_HTTP_CONTENT_TYPE_TEXT_RTF = 'text/rtf';
  157. BROOK_HTTP_CONTENT_TYPE_MULTIPART_FORM_DATA = 'multipart/form-data';
  158. BROOK_HTTP_CONTENT_TYPE_MULTIPART_FORM_DATA_BOUNDARY = BROOK_HTTP_CONTENT_TYPE_MULTIPART_FORM_DATA + '; boundary=';
  159. BROOK_HTTP_CONTENT_TYPE_APP_JSON = 'application/json';
  160. BROOK_HTTP_CONTENT_TYPE_APP_XML = 'application/xml';
  161. BROOK_HTTP_CONTENT_TYPE_APP_RDF_XML = 'application/rdf+xml';
  162. BROOK_HTTP_CONTENT_TYPE_APP_X_WWW_FORM_URLENCODED = 'application/x-www-form-urlencoded';
  163. BROOK_HTTP_CONTENT_TYPE_APP_JAVASCRIPT = 'application/javascript';
  164. BROOK_HTTP_CONTENT_TYPE_APP_OCTET_STREAM = 'application/octet-stream';
  165. BROOK_HTTP_CONTENT_TYPE_APP_PDF = 'application/pdf';
  166. BROOK_HTTP_CONTENT_TYPE_APP_ZIP = 'application/zip';
  167. BROOK_HTTP_CONTENT_TYPE_APP_MSWORD = 'application/msword';
  168. BROOK_HTTP_CONTENT_TYPE_APP_MS_EXCEL = 'application/vnd.ms-excel';
  169. BROOK_HTTP_CONTENT_TYPE_APP_MS_POWERPOINT = 'application/vnd.ms-powerpoint';
  170. BROOK_HTTP_CONTENT_TYPE_APP_MP4 = 'application/mp4';
  171. BROOK_HTTP_CONTENT_TYPE_APP_MPEG4_GENERIC = 'application/mpeg4-generic';
  172. BROOK_HTTP_CONTENT_TYPE_IMAGE_PNG = 'image/png';
  173. BROOK_HTTP_CONTENT_TYPE_IMAGE_JPEG = 'image/jpeg';
  174. BROOK_HTTP_CONTENT_TYPE_IMAGE_GIF = 'image/gif';
  175. BROOK_HTTP_CONTENT_TYPE_IMAGE_TIFF = 'image/tiff';
  176. BROOK_HTTP_CONTENT_TYPE_AUDIO_MPEG = 'audio/mpeg';
  177. BROOK_HTTP_CONTENT_TYPE_VIDEO_MPEG = 'video/mpeg';
  178. BROOK_HTTP_CONTENT_TYPE_VIDEO_QUICKTIME = 'video/quicktime';
  179. { Cache-Control directives }
  180. { }
  181. BROOK_HTTP_CACHE_CONTROL_NO_CACHE = 'no-cache';
  182. BROOK_HTTP_CACHE_CONTROL_NO_STORE = 'no-store';
  183. BROOK_HTTP_CACHE_CONTROL_MAX_AGE = 'max-age=';
  184. BROOK_HTTP_CACHE_CONTROL_MAX_STALE = 'max-stale';
  185. BROOK_HTTP_CACHE_CONTROL_MIN_FRESH = 'min-fresh';
  186. BROOK_HTTP_CACHE_CONTROL_NO_TRANSFORM = 'no-transform';
  187. BROOK_HTTP_CACHE_CONTROL_ONLY_IF_CACHED = 'only-if-cached';
  188. BROOK_HTTP_CACHE_CONTROL_CACHE_EXTENSION = 'cache-extension';
  189. BROOK_HTTP_CACHE_CONTROL_PUBLIC = 'public';
  190. BROOK_HTTP_CACHE_CONTROL_PRIVATE = 'private';
  191. BROOK_HTTP_CACHE_CONTROL_MUST_REVALIDATE = 'must-revalidate';
  192. BROOK_HTTP_CACHE_CONTROL_PROXY_REVALIDATE = 'proxy-revalidate';
  193. BROOK_HTTP_CACHE_CONTROL_S_MAXAGE = 's-maxage';
  194. { Disposition types }
  195. { }
  196. BROOK_HTTP_CONTENT_DISPOSITION_INLINE = 'inline';
  197. BROOK_HTTP_CONTENT_DISPOSITION_ATTACHMENT = 'attachment';
  198. { Content encoding }
  199. { }
  200. BROOK_HTTP_CONTENT_ENCODING_DEFLATE = 'deflate';
  201. BROOK_HTTP_CONTENT_ENCODING_GZIP = 'gzip';
  202. BROOK_HTTP_CONTENT_ENCODING_SDCH = 'sdch';
  203. BROOK_HTTP_CONTENT_ENCODING_X_GZIP = 'x-gzip';
  204. { Transfer encoding }
  205. { }
  206. BROOK_HTTP_TRANSFER_ENCODING_CHUNKED = 'chunked';
  207. { Some charsets }
  208. { }
  209. BROOK_HTTP_CHARSET_ISO_8859_1 = 'iso-8859-1';
  210. BROOK_HTTP_CHARSET_UTF_8 = 'utf-8';
  211. { Server environment variables. }
  212. { }
  213. BROOK_SRV_ENV_DOCUMENT_ROOT = 'DOCUMENT_ROOT';
  214. BROOK_SRV_ENV_SERVER_ADDR = 'SERVER_ADDR';
  215. BROOK_SRV_ENV_SERVER_ADMIN = 'SERVER_ADMIN';
  216. BROOK_SRV_ENV_SERVER_SOFTWARE = 'SERVER_SOFTWARE';
  217. BROOK_SRV_ENV_SERVER_NAME = 'SERVER_NAME';
  218. BROOK_SRV_ENV_GATEWAY_INTERFACE = 'GATEWAY_INTERFACE';
  219. BROOK_SRV_ENV_SERVER_PROTOCOL = 'SERVER_PROTOCOL';
  220. BROOK_SRV_ENV_SERVER_PORT = 'SERVER_PORT';
  221. BROOK_SRV_ENV_REQUEST_METHOD = 'REQUEST_METHOD';
  222. BROOK_SRV_ENV_REQUEST_URI = 'REQUEST_URI';
  223. BROOK_SRV_ENV_PATH_INFO = 'PATH_INFO';
  224. BROOK_SRV_ENV_PATH_TRANSLATED = 'PATH_TRANSLATED';
  225. BROOK_SRV_ENV_SCRIPT_FILENAME = 'SCRIPT_FILENAME';
  226. BROOK_SRV_ENV_SCRIPT_NAME = 'SCRIPT_NAME';
  227. BROOK_SRV_ENV_QUERY_STRING = 'QUERY_STRING';
  228. BROOK_SRV_ENV_REMOTE_HOST = 'REMOTE_HOST';
  229. BROOK_SRV_ENV_REMOTE_ADDR = 'REMOTE_ADDR';
  230. BROOK_SRV_ENV_REMOTE_PORT = 'REMOTE_PORT';
  231. BROOK_SRV_ENV_AUTH_TYPE = 'AUTH_TYPE';
  232. BROOK_SRV_ENV_REMOTE_USER = 'REMOTE_USER';
  233. BROOK_SRV_ENV_REMOTE_IDENT = 'REMOTE_IDENT';
  234. BROOK_SRV_ENV_CONTENT_TYPE = 'CONTENT_TYPE';
  235. BROOK_SRV_ENV_CONTENT_LENGTH = 'CONTENT_LENGTH';
  236. BROOK_SRV_ENV_X_FORWARDED_FOR = 'X_FORWARDED_FOR';
  237. { Client environment variables. }
  238. { }
  239. BROOK_CLT_ENV_HTTP_COOKIE = 'HTTP_COOKIE';
  240. BROOK_CLT_ENV_HTTP_REFERER = 'HTTP_REFERER';
  241. BROOK_CLT_ENV_HTTP_USER_AGENT = 'HTTP_USER_AGENT';
  242. BROOK_CLT_ENV_HTTP_IF_MODIFIED_SINCE = 'HTTP_IF_MODIFIED_SINCE';
  243. BROOK_CLT_ENV_HTTP_HOST = 'HTTP_HOST';
  244. BROOK_CLT_ENV_HTTP_CONNECTION = 'HTTP_CONNECTION';
  245. BROOK_CLT_ENV_HTTP_CACHE_CONTROL = 'HTTP_CACHE_CONTROL';
  246. BROOK_CLT_ENV_HTTP_ACCEPT = 'HTTP_ACCEPT';
  247. BROOK_CLT_ENV_HTTP_ACCEPT_ENCODING = 'HTTP_ACCEPT_ENCODING';
  248. BROOK_CLT_ENV_HTTP_ACCEPT_LANGUAGE = 'HTTP_ACCEPT_LANGUAGE';
  249. BROOK_CLT_ENV_HTTP_ACCEPT_CHARSET = 'HTTP_ACCEPT_CHARSET';
  250. BROOK_CLT_ENV_HTTP_IF_NONE_MATCH = 'HTTP_IF_NONE_MATCH';
  251. BROOK_CLT_ENV_HTTP_X_REQUESTED_WITH = 'HTTP_X_REQUESTED_WITH';
  252. { Default response templates. }
  253. { }
  254. BROOK_HTTP_RESPONSE_TEMPLATE_NOT_FOUND =
  255. '<html><head><title>Page not found</title></head><body>' +
  256. '<h1>404 - Page not found</h1></body></html>';
  257. BROOK_HTTP_RESPONSE_TEMPLATE_INTERNAL_SERVER_ERROR =
  258. '<html><head><title>Internal server error</title></head><body>' +
  259. '<h1>500 - Internal server error</h1>' +
  260. '<p style="color: red;" >@error</p>' +
  261. '</body></html>';
  262. var
  263. BROOK_HTTP_CLIENT_DEFAULT_LIBRARY: string = ES;
  264. implementation
  265. end.