# Module Ocsigen_http_frame

    module Ocsigen_http_frame: sig .. end

This table is to store cookie values for each path. The key has type url_path option: it is for the path (default: root of the site),

    type etag = string

    type url_path = string list

    module Cookies: Map.S
      with type key = url_path

This table is to store cookie values for each path.

    module Cookievalues: Map.S
      with type key = string

This table is to store one cookie value for each cookie name.
`type ``cookie =`

`|` | `OSet of `float option * string * bool``
`|` | `OUnset`

Type used for cookies to set. The float option is the timestamp for the expiration date. The string is the value. If the bool is true and the protocol is https, the cookie will be secure (will ask the browser to send it only through secure connections).

    type cookieset = cookie Cookievalues.t
           Cookies.t

    val add_cookie : url_path ->
           string ->
           cookie ->
           cookieset -> cookieset

`add_cookie c cookie_table` adds the cookie `c` to the table `cookie_table`. If the cookie is already bound, the previous binding disappear.

    val add_cookies : cookie Cookievalues.t
           Cookies.t ->
           cookie Cookievalues.t
           Cookies.t ->
           cookie Cookievalues.t
           Cookies.t

`add_cookies newcookies oldcookies` adds the cookies from `newcookies` to `oldcookies`. If cookies are already bound in oldcookies, the previous binding disappear.

    val compute_new_ri_cookies : float ->
           string list ->
           string Cookievalues.t ->
           cookie Cookievalues.t
           Cookies.t -> string Cookievalues.t

`compute_new_ri_cookies now path ri_cookies cookies_to_set` adds the cookies from `cookies_to_set` to `ri_cookies`, as if the cookies add been send to the browser and the browser was doing a new request to the url `path`. Only the cookies that match `path` (current path) are added.
`type ``result = {`

`` | `res_cookies : `cookieset`;` | `(*` | cookies to set | `*)`
`` | `res_lastmodified : `float option`;` | `(*` | Default: `None` | `*)`
`` | `res_etag : `etag option`;`
`` | `res_code : `int`;` | `(*` | HTTP code, if not 200 | `*)`
`` | `res_stream : `string Ocsigen_stream.t`;` | `(*` | Default: empty stream | `*)`
`` | `res_stop_stream : `unit -> unit Lwt.t`;` | `(*` | A function that will be called if sending the stream fails. It is called before the stream finalizer, only in case of error. Use it if you want a different behaviour if sending succeeds or not. Default is do nothing (Lwt.return). | `*)`
`` | `res_content_length : `int64 option`;` | `(*` | `None` means Transfer-encoding: chunked | `*)`
`` | `res_content_type : `string option`;`
`` | `res_headers : `Http_headers.t`;` | `(*` | The headers you want to add | `*)`
`` | `res_charset : `string option`;` | `(*` | Default: None | `*)`
`` | `res_location : `string option`;` | `(*` | Default: None | `*)`

}
The type of answers to send

    val default_result : unit -> result

Default `result` to use as a base for constructing others.

    val empty_result : unit -> result

`result` for an empty page.

    module type HTTP_CONTENT = sig .. end

    module Http_header: sig .. end

    module Http_error: sig .. end

`type ``t = {`

`` | `header : `Http_header.http_header`;`
`` | `content : `string Ocsigen_stream.t option`;`
`` | `abort : `unit -> unit Lwt.t`;`

}
The type of HTTP frames. The content may be void (no body) or a stream. While sending, a stream will be sent with chunked encoding if no content-length is supplied. abort is the function to be called if you want to cancel the stream reading (closes the connection).