Module Nethttp


module Nethttp: sig .. end

Basic definitions for the HTTP protocol




These definitions can be used by both HTTP clients and servers, and by protocols in the middle, e.g. CGI.
type protocol_version = int * int 

A pair of a major and minor version number
type protocol_attribute = [ `Secure_https ] 
type protocol = [ `Http of protocol_version * protocol_attribute list
| `Other ]
The base protocol. RFC 2145 defines how to interpret major and minor numbers. In particular, we have:
val string_of_protocol : protocol -> string
Returns the string representation, e.g. "HTTP/1.0". Fails for `Other
val protocol_of_string : string -> protocol
Parses the protocol string, e.g. "HTTP/1.0". Returns `Other for unrecognized strings
type http_status = [ `Accepted
| `Bad_gateway
| `Bad_request
| `Conflict
| `Continue
| `Created
| `Expectation_failed
| `Forbidden
| `Found
| `Gateway_timeout
| `Gone
| `Http_version_not_supported
| `Internal_server_error
| `Length_required
| `Method_not_allowed
| `Moved_permanently
| `Multiple_choices
| `No_content
| `Non_authoritative
| `Not_acceptable
| `Not_found
| `Not_implemented
| `Not_modified
| `Ok
| `Partial_content
| `Payment_required
| `Precondition_failed
| `Proxy_auth_required
| `Request_entity_too_large
| `Request_timeout
| `Request_uri_too_long
| `Requested_range_not_satisfiable
| `Reset_content
| `See_other
| `Service_unavailable
| `Switching_protocols
| `Temporary_redirect
| `Unauthorized
| `Unsupported_media_type
| `Use_proxy ]
HTTP response status:

Informational (1xx):

Successful (2xx): Redirection (3xx): Client error (4xx): Server Error (5xx):
val int_of_http_status : http_status -> int
Returns the integer code for a status value
val http_status_of_int : int -> http_status
Returns the status value for an integer code, or raises Not_found
val string_of_http_status : http_status -> string
Returns the informational text for a status value
type http_method = string * string 
Method name, URI
type cache_control_token = [ `Extension of string * string option
| `Max_age of int
| `Max_stale of int option
| `Min_fresh of int
| `Must_revalidate
| `No_cache of string list
| `No_store
| `No_transform
| `Only_if_cached
| `Private of string list
| `Proxy_revalidate
| `Public
| `S_maxage of int ]
The cache control token for the Cache-control header
type etag = [ `Strong of string | `Weak of string ] 
Entity tags can be weak or strong
val weak_validator_match : etag -> etag -> bool
Whether the tags match weakly (see RFC 2616 for definition)
val strong_validator_match : etag -> etag -> bool
Whether the tags match strongly (see RFC 2616 for definition)
exception Bad_header_field of string
Raised when a header field cannot be parsed. The string argument is the name of the failing function
class type http_header = Netmime.mime_header
The HTTP header is represented as MIME header
class type http_trailer = Netmime.mime_header
The HTTP trailer is represented as MIME header
val status_of_cgi_header : http_header -> int * string
Returns the status code and the status text corresponding to the Status header

type cookie = {
   cookie_name : string; (*The name of the cookie*)
   cookie_value : string; (*The value of the cookie. There are no restrictions on the value of the cookie*)
   cookie_expires : float option; (*Expiration:
  • None: the cookie expires when the browser session ends.
  • Some t: the cookie expires at the time t (seconds since the epoch)
*)
   cookie_domain : string option; (*Cookies are bound to a certain domain, i.e. the browser sends them only when web pages of the domain are requested:

  • None: the domain is the hostname of the server
  • Some domain: the domain is domain
*)
   cookie_path : string option; (*Cookies are also bound to certain path prefixes, i.e. the browser sends them only when web pages at the path or below are requested.

  • None: the path is script name + path_info
  • Some p: the path is p. With Some "/" you can disable the path restriction completely.
*)
   cookie_secure : bool; (*Cookies are also bound to the type of the web server: false means servers without SSL, true means servers with activated SSL ("https").*)
}
val decode_query : string -> string * string
Splits the URI into a "script name" and a "query string"
val split_host_port : string -> string * int option
Splits the Host header in hostname and optional port number. Fails on syntax error
val uripath_encode : string -> string
Encodes unsafe characters in URI paths. The slash character is not encoded. This function should only be applied to the part before '?'.
val uripath_decode : string -> string
Decodes %XX sequences in URI paths. %2F is forbidden (failure). This function should only be applied to the part before '?'.

Parsing and Printing of Headers


module Header: sig .. end