Annotation of embedaddon/curl/docs/HTTP-COOKIES.md, revision 1.1
1.1 ! misho 1: # HTTP Cookies
! 2:
! 3: ## Cookie overview
! 4:
! 5: Cookies are `name=contents` pairs that a HTTP server tells the client to
! 6: hold and then the client sends back those to the server on subsequent
! 7: requests to the same domains and paths for which the cookies were set.
! 8:
! 9: Cookies are either "session cookies" which typically are forgotten when the
! 10: session is over which is often translated to equal when browser quits, or
! 11: the cookies aren't session cookies they have expiration dates after which
! 12: the client will throw them away.
! 13:
! 14: Cookies are set to the client with the Set-Cookie: header and are sent to
! 15: servers with the Cookie: header.
! 16:
! 17: For a very long time, the only spec explaining how to use cookies was the
! 18: original [Netscape spec from 1994](https://curl.haxx.se/rfc/cookie_spec.html).
! 19:
! 20: In 2011, [RFC6265](https://www.ietf.org/rfc/rfc6265.txt) was finally
! 21: published and details how cookies work within HTTP. In 2016, an update which
! 22: added support for prefixes was
! 23: [proposed](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00),
! 24: and in 2017, another update was
! 25: [drafted](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01)
! 26: to deprecate modification of 'secure' cookies from non-secure origins. Both
! 27: of these drafts have been incorporated into a proposal to
! 28: [replace](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-02)
! 29: RFC6265. Cookie prefixes and secure cookie modification protection has been
! 30: implemented by curl.
! 31:
! 32: ## Cookies saved to disk
! 33:
! 34: Netscape once created a file format for storing cookies on disk so that they
! 35: would survive browser restarts. curl adopted that file format to allow
! 36: sharing the cookies with browsers, only to see browsers move away from that
! 37: format. Modern browsers no longer use it, while curl still does.
! 38:
! 39: The netscape cookie file format stores one cookie per physical line in the
! 40: file with a bunch of associated meta data, each field separated with
! 41: TAB. That file is called the cookiejar in curl terminology.
! 42:
! 43: When libcurl saves a cookiejar, it creates a file header of its own in which
! 44: there is a URL mention that will link to the web version of this document.
! 45:
! 46: ## Cookie file format
! 47:
! 48: The cookie file format is text based and stores one cookie per line. Lines
! 49: that start with `#` are treated as comments.
! 50:
! 51: Each line that each specifies a single cookie consists of seven text fields
! 52: separated with TAB characters. A valid line must end with a newline
! 53: character.
! 54:
! 55: ### Fields in the file
! 56:
! 57: Field number, what type and example data and the meaning of it:
! 58:
! 59: 0. string `example.com` - the domain name
! 60: 1. boolean `FALSE` - include subdomains
! 61: 2. string `/foobar/` - path
! 62: 3. boolean `TRUE` - send/receive over HTTPS only
! 63: 4. number `1462299217` - expires at - seconds since Jan 1st 1970, or 0
! 64: 5. string `person` - name of the cookie
! 65: 6. string `daniel` - value of the cookie
! 66:
! 67: ## Cookies with curl the command line tool
! 68:
! 69: curl has a full cookie "engine" built in. If you just activate it, you can
! 70: have curl receive and send cookies exactly as mandated in the specs.
! 71:
! 72: Command line options:
! 73:
! 74: `-b, --cookie`
! 75:
! 76: tell curl a file to read cookies from and start the cookie engine, or if it
! 77: isn't a file it will pass on the given string. -b name=var works and so does
! 78: -b cookiefile.
! 79:
! 80: `-j, --junk-session-cookies`
! 81:
! 82: when used in combination with -b, it will skip all "session cookies" on load
! 83: so as to appear to start a new cookie session.
! 84:
! 85: `-c, --cookie-jar`
! 86:
! 87: tell curl to start the cookie engine and write cookies to the given file
! 88: after the request(s)
! 89:
! 90: ## Cookies with libcurl
! 91:
! 92: libcurl offers several ways to enable and interface the cookie engine. These
! 93: options are the ones provided by the native API. libcurl bindings may offer
! 94: access to them using other means.
! 95:
! 96: `CURLOPT_COOKIE`
! 97:
! 98: Is used when you want to specify the exact contents of a cookie header to
! 99: send to the server.
! 100:
! 101: `CURLOPT_COOKIEFILE`
! 102:
! 103: Tell libcurl to activate the cookie engine, and to read the initial set of
! 104: cookies from the given file. Read-only.
! 105:
! 106: `CURLOPT_COOKIEJAR`
! 107:
! 108: Tell libcurl to activate the cookie engine, and when the easy handle is
! 109: closed save all known cookies to the given cookiejar file. Write-only.
! 110:
! 111: `CURLOPT_COOKIELIST`
! 112:
! 113: Provide detailed information about a single cookie to add to the internal
! 114: storage of cookies. Pass in the cookie as a HTTP header with all the details
! 115: set, or pass in a line from a netscape cookie file. This option can also be
! 116: used to flush the cookies etc.
! 117:
! 118: `CURLINFO_COOKIELIST`
! 119:
! 120: Extract cookie information from the internal cookie storage as a linked
! 121: list.
! 122:
! 123: ## Cookies with javascript
! 124:
! 125: These days a lot of the web is built up by javascript. The webbrowser loads
! 126: complete programs that render the page you see. These javascript programs
! 127: can also set and access cookies.
! 128:
! 129: Since curl and libcurl are plain HTTP clients without any knowledge of or
! 130: capability to handle javascript, such cookies will not be detected or used.
! 131:
! 132: Often, if you want to mimic what a browser does on such web sites, you can
! 133: record web browser HTTP traffic when using such a site and then repeat the
! 134: cookie operations using curl or libcurl.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>