# std/httpcore

Dark Mode

- Manual
- Standard library
- Index
- Compiler docs
- Fusion docs
- devel, stable

Search:
Source Edit

Contains functionality shared between the `httpclient` and `asynchttpserver` modules.

Unstable API.

# Imports

since, tables, strutils, parseutils

# Types

    HttpCode = distinct range[0 .. 599]

  Source Edit

    HttpHeaders = ref object
      table*: TableRef[string, seq[string]]
      isTitleCase: bool

  Source Edit

    HttpHeaderValues = distinct seq[string]

  Source Edit

    HttpMethod = enum
      HttpHead = "HEAD",        ## Asks for the response identical to the one that
                                 ## would correspond to a GET request, but without
                                 ## the response body.
      HttpGet = "GET",          ## Retrieves the specified resource.
      HttpPost = "POST",        ## Submits data to be processed to the identified
                                 ## resource. The data is included in the body of
                                 ## the request.
      HttpPut = "PUT",          ## Uploads a representation of the specified
                                 ## resource.
      HttpDelete = "DELETE",    ## Deletes the specified resource.
      HttpTrace = "TRACE",      ## Echoes back the received request, so that a
                                 ## client
                                 ## can see what intermediate servers are adding or
                                 ## changing in the request.
      HttpOptions = "OPTIONS",  ## Returns the HTTP methods that the server
                                 ## supports for specified address.
      HttpConnect = "CONNECT",  ## Converts the request connection to a transparent
                                 ## TCP/IP tunnel, usually used for proxies.
      HttpPatch = "PATCH"        ## Applies partial modifications to a resource.

  the requested HttpMethod Source Edit

    HttpVersion = enum
      HttpVer11, HttpVer10

  Source Edit

# Consts

    headerLimit = 10000

  Source Edit

    Http100 = 100

  Source Edit

    Http101 = 101

  Source Edit

    Http102 = 102

  https://tools.ietf.org/html/rfc2518.html WebDAV Source Edit

    Http103 = 103

  https://tools.ietf.org/html/rfc8297.html Early hints Source Edit

    Http200 = 200

  Source Edit

    Http201 = 201

  Source Edit

    Http202 = 202

  Source Edit

    Http203 = 203

  Source Edit

    Http204 = 204

  Source Edit

    Http205 = 205

  Source Edit

    Http206 = 206

  Source Edit

    Http207 = 207

  https://tools.ietf.org/html/rfc4918.html WebDAV Source Edit

    Http208 = 208

  https://tools.ietf.org/html/rfc5842.html WebDAV, Section 7.1 Source Edit

    Http226 = 226

  https://tools.ietf.org/html/rfc3229.html Delta encoding, Section 10.4.1 Source Edit

    Http300 = 300

  Source Edit

    Http301 = 301

  Source Edit

    Http302 = 302

  Source Edit

    Http303 = 303

  Source Edit

    Http304 = 304

  Source Edit

    Http305 = 305

  Source Edit

    Http307 = 307

  Source Edit

    Http308 = 308

  Source Edit

    Http400 = 400

  Source Edit

    Http401 = 401

  Source Edit

    Http402 = 402

  https://tools.ietf.org/html/rfc7231.html Payment required, Section 6.5.2 Source Edit

    Http403 = 403

  Source Edit

    Http404 = 404

  Source Edit

    Http405 = 405

  Source Edit

    Http406 = 406

  Source Edit

    Http407 = 407

  Source Edit

    Http408 = 408

  Source Edit

    Http409 = 409

  Source Edit

    Http410 = 410

  Source Edit

    Http411 = 411

  Source Edit

    Http412 = 412

  Source Edit

    Http413 = 413

  Source Edit

    Http414 = 414

  Source Edit

    Http415 = 415

  Source Edit

    Http416 = 416

  Source Edit

    Http417 = 417

  Source Edit

    Http418 = 418

  Source Edit

    Http421 = 421

  Source Edit

    Http422 = 422

  Source Edit

    Http423 = 423

  https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.3 Source Edit

    Http424 = 424

  https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.3 Source Edit

    Http425 = 425

  https://tools.ietf.org/html/rfc8470.html Early data Source Edit

    Http426 = 426

  Source Edit

    Http428 = 428

  Source Edit

    Http429 = 429

  Source Edit

    Http431 = 431

  Source Edit

    Http451 = 451

  Source Edit

    Http500 = 500

  Source Edit

    Http501 = 501

  Source Edit

    Http502 = 502

  Source Edit

    Http503 = 503

  Source Edit

    Http504 = 504

  Source Edit

    Http505 = 505

  Source Edit

    Http506 = 506

  https://tools.ietf.org/html/rfc2295.html Content negotiation, Section 8.1 Source Edit

    Http507 = 507

  https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.5 Source Edit

    Http508 = 508

  https://tools.ietf.org/html/rfc5842.html WebDAV, Section 7.2 Source Edit

    Http510 = 510

  https://tools.ietf.org/html/rfc2774.html Extension framework, Section 7 Source Edit

    Http511 = 511

  https://tools.ietf.org/html/rfc6585.html Additional status code, Section 6 Source Edit

    httpNewLine = "\r\n"

  Source Edit

# Procs

    func `$`(code: HttpCode): string {....raises: [], tags: [].}

  Converts the specified `HttpCode` into a HTTP status.

  Example:

      doAssert($Http404 == "404 Not Found")

  Source Edit

    func `$`(headers: HttpHeaders): string {.inline, ...raises: [], tags: [].}

  Source Edit

    func `==`(a, b: HttpCode): bool {.borrow, ...raises: [], tags: [].}

  Source Edit

    func `==`(protocol: tuple[orig: string, major, minor: int]; ver: HttpVersion): bool {.
        ...raises: [], tags: [].}

  Source Edit

    proc `==`(rawCode: string; code: HttpCode): bool {.
        ...deprecated: "Deprecated since v1.2; use rawCode == $code instead",
        raises: [], tags: [].}

  Deprecated: Deprecated since v1.2; use rawCode == $code instead
  Compare the string form of the status code with a HttpCode
  Note: According to HTTP/1.1 specification, the reason phrase is
    optional and should be ignored by the client, making this proc only suitable for comparing the `HttpCode` against the string form of itself.
  Source Edit

    proc `[]=`(headers: HttpHeaders; key, value: string) {....raises: [], tags: [].}

  Sets the header entries associated with `key` to the specified value. Replaces any existing values. Source Edit

    proc `[]=`(headers: HttpHeaders; key: string; value: seq[string]) {....raises: [],
        tags: [].}

  Sets the header entries associated with `key` to the specified list of values. Replaces any existing values. If `value` is empty, deletes the header entries associated with `key`. Source Edit

    func `[]`(headers: HttpHeaders; key: string): HttpHeaderValues {.
        ...raises: [KeyError], tags: [].}

  Returns the values associated with the given `key`. If the returned values are passed to a procedure expecting a `string`, the first value is automatically picked. If there are no values associated with the key, an exception is raised.

  To access multiple values of a key, use the overloaded `[]` below or to get all of them access the `table` field directly.

  Source Edit

    func `[]`(headers: HttpHeaders; key: string; i: int): string {.
        ...raises: [KeyError], tags: [].}

  Returns the `i`'th value associated with the given key. If there are no values associated with the key or the `i`'th value doesn't exist, an exception is raised. Source Edit

    proc add(headers: HttpHeaders; key, value: string) {....raises: [KeyError],
        tags: [].}

  Adds the specified value to the specified key. Appends to any existing values associated with the key. Source Edit

    proc clear(headers: HttpHeaders) {.inline, ...raises: [], tags: [].}

  Source Edit

    func contains(methods: set[HttpMethod]; x: string): bool {....raises: [ValueError],
        tags: [].}

  Source Edit

    func contains(values: HttpHeaderValues; value: string): bool {....raises: [],
        tags: [].}

  Determines if `value` is one of the values inside `values`. Comparison is performed without case sensitivity. Source Edit

    proc del(headers: HttpHeaders; key: string) {....raises: [], tags: [].}

  Deletes the header entries associated with `key` Source Edit

    func getOrDefault(headers: HttpHeaders; key: string;
                      default = @[""].HttpHeaderValues): HttpHeaderValues {.
        ...raises: [KeyError], tags: [].}

  Returns the values associated with the given `key`. If there are no values associated with the key, then `default` is returned. Source Edit

    func hasKey(headers: HttpHeaders; key: string): bool {....raises: [], tags: [].}

  Source Edit

    func is1xx(code: HttpCode): bool {.inline, ...raises: [], tags: [].}

  Determines whether `code` is a 1xx HTTP status code.

  Example:

      doAssert is1xx(HttpCode(103))

  Source Edit

    func is2xx(code: HttpCode): bool {.inline, ...raises: [], tags: [].}

  Determines whether `code` is a 2xx HTTP status code. Source Edit

    func is3xx(code: HttpCode): bool {.inline, ...raises: [], tags: [].}

  Determines whether `code` is a 3xx HTTP status code. Source Edit

    func is4xx(code: HttpCode): bool {.inline, ...raises: [], tags: [].}

  Determines whether `code` is a 4xx HTTP status code. Source Edit

    func is5xx(code: HttpCode): bool {.inline, ...raises: [], tags: [].}

  Determines whether `code` is a 5xx HTTP status code. Source Edit

    func len(headers: HttpHeaders): int {.inline, ...raises: [], tags: [].}

  Source Edit

    func newHttpHeaders(keyValuePairs: openArray[tuple[key: string, val: string]];
                        titleCase = false): HttpHeaders {....raises: [KeyError],
        tags: [].}

  Returns a new `HttpHeaders` object from an array. if `titleCase` is set to true, headers are passed to the server in title case (e.g. "Content-Length") Source Edit

    func newHttpHeaders(titleCase = false): HttpHeaders {....raises: [], tags: [].}

  Returns a new `HttpHeaders` object. if `titleCase` is set to true, headers are passed to the server in title case (e.g. "Content-Length") Source Edit

    func parseHeader(line: string): tuple[key: string, value: seq[string]] {.
        ...raises: [], tags: [].}

  Parses a single raw header HTTP line into key value pairs.

  Used by `asynchttpserver` and `httpclient` internally and should not be used by you.

  Source Edit

# Iterators

    iterator pairs(headers: HttpHeaders): tuple[key, value: string] {....raises: [],
        tags: [].}

  Yields each key, value pair. Source Edit

# Converters

    converter toString(values: HttpHeaderValues): string {....raises: [], tags: [].}

  Source Edit