tracking-dnt-LCWD.txt | tracking-dnt-20141217.txt | |||
---|---|---|---|---|
W3C | W3C | |||
Tracking Preference Expression (DNT) | Tracking Preference Expression (DNT) | |||
W3C Last Call Working Draft 24 April 2014 | W3C Editor's Draft 17 December 2014 | |||
This version: | This version: | |||
http://www.w3.org/TR/2014/WD-tracking-dnt-20140424/ | http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html | |||
Latest published version: | Latest published version: | |||
http://www.w3.org/TR/tracking-dnt/ | http://www.w3.org/TR/tracking-dnt/ | |||
Latest editor's draft: | Latest editor's draft: | |||
http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html | http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html | |||
Previous version: | ||||
http://www.w3.org/TR/2014/WD-tracking-dnt-20140128/ | ||||
Editors: | Editors: | |||
Roy T. Fielding, Adobe | Roy T. Fielding, Adobe | |||
David Singer, Apple | David Singer, Apple | |||
Copyright (c) 2014 W3C(R) (MIT, ERCIM, Keio, Beihang), All Rights | Copyright (c) 2014 W3C(R) (MIT, ERCIM, Keio, Beihang), All Rights | |||
Reserved. W3C liability, trademark and document use rules apply. | Reserved. W3C liability, trademark and document use rules apply. | |||
---------------------------------------------------------------------- | ---------------------------------------------------------------------- | |||
Abstract | Abstract | |||
This specification defines the DNT request header field as an HTTP | This specification defines the DNT request header field as an HTTP | |||
skipping to change at line 45 | skipping to change at line 42 | |||
honor a received preference through use of the Tk response header field | honor a received preference through use of the Tk response header field | |||
and well-known resources that provide a machine-readable tracking status. | and well-known resources that provide a machine-readable tracking status. | |||
Status of This Document | Status of This Document | |||
This section describes the status of this document at the time of its | This section describes the status of this document at the time of its | |||
publication. Other documents may supersede this document. A list of | publication. Other documents may supersede this document. A list of | |||
current W3C publications and the latest revision of this technical report | current W3C publications and the latest revision of this technical report | |||
can be found in the W3C technical reports index at http://www.w3.org/TR/. | can be found in the W3C technical reports index at http://www.w3.org/TR/. | |||
This document was published by the Tracking Protection Working Group as a | This document is an editors' straw man reflecting a snapshot of live | |||
Last Call Working Draft on 24 April 2014. This document is intended to | discussions within the Tracking Protection Working Group. It does not yet | |||
become a W3C Recommendation. If you wish to make comments regarding this | capture all of our work and does not constitute working group consensus. | |||
document, please send them to public-tracking-comments@w3.org (subscribe, | Text in option boxes (highlighted with light blue background color) | |||
archives). All comments are publicly archived; if you have not used W3C | present options that the group is currently considering, particularly | |||
mailing lists in the past, you will need to approve archiving | where consensus is known to be lacking, and should be read as a set of | |||
(instructions are sent via email auto-reply) before your comments will be | proposals rather than as limitations on the potential outcome. An issue | |||
distributed. The Last Call period ends 18 June 2014. All comments are | tracking system is available for recording raised, open, pending review, | |||
welcome. | closed, and postponed issues regarding this document. | |||
The Tracking Protection Working Group invites broad community review, | ||||
especially of technical requirements and dependencies. Reviewers are | ||||
encouraged to comment on the extent to which technical requirements of the | ||||
group's charter have been met and how significant dependencies with groups | ||||
inside and outside W3C have been satisfied. The Working Group will | ||||
evaluate all comments received and determine whether or how the | ||||
specification needs to be modified in light of the comments. Comments will | ||||
be most useful in identifying technical problems with the TPE that might | ||||
inhibit adoption, or where the TPE fails to further goals of user privacy | ||||
and user control, and whether the TPE creates or does not otherwise | ||||
resolve dependencies with other technical standards, practices, or | ||||
processes. The Chairs of the Working Group will issue written responses to | ||||
all comments received. | ||||
Of note, this document does not define site behavior for complying with a | ||||
user's expressed tracking preference, but does provide sites with a | ||||
mechanism for indicating compliance. The Tracking Compliance and Scope | ||||
[TCS] specification which standardizes how sites should respond to Do Not | ||||
Track requests, including what information may be collected for limited | ||||
permitted uses despite a Do Not Track signal, is under discussion. The | ||||
Tracking Protection Working Group expects that specification to proceed to | ||||
Last Call in the summer of 2014. Both specifications are currently | ||||
scheduled to go to Candidate Recommendation in December 2014. | ||||
Readers may review changes from the previous Working Draft; in particular, | This document was published by the Tracking Protection Working Group as an | |||
recent changes include: updated definitions, revised requirements on | Editor's Draft. If you wish to make comments regarding this document, | |||
determining a user preference, and a media type. An issue tracking system | please send them to public-tracking@w3.org (subscribe, archives). All | |||
is available for recording issues regarding this document and their | comments are welcome. | |||
resolutions. | ||||
Publication as a Last Call Working Draft does not imply endorsement by the | Publication as an Editor's Draft does not imply endorsement by the W3C | |||
W3C Membership. This is a draft document and may be updated, replaced or | Membership. This is a draft document and may be updated, replaced or | |||
obsoleted by other documents at any time. It is inappropriate to cite this | obsoleted by other documents at any time. It is inappropriate to cite this | |||
document as other than work in progress. | document as other than work in progress. | |||
This is a Last Call Working Draft and thus the Working Group has | ||||
determined that this document has satisfied the relevant technical | ||||
requirements and is sufficiently stable to advance through the Technical | ||||
Recommendation process. | ||||
This document was produced by a group operating under the 5 February 2004 | This document was produced by a group operating under the 5 February 2004 | |||
W3C Patent Policy. W3C maintains a public list of any patent disclosures | W3C Patent Policy. W3C maintains a public list of any patent disclosures | |||
made in connection with the deliverables of the group; that page also | made in connection with the deliverables of the group; that page also | |||
includes instructions for disclosing a patent. An individual who has | includes instructions for disclosing a patent. An individual who has | |||
actual knowledge of a patent which the individual believes contains | actual knowledge of a patent which the individual believes contains | |||
Essential Claim(s) must disclose the information in accordance with | Essential Claim(s) must disclose the information in accordance with | |||
section 6 of the W3C Patent Policy. | section 6 of the W3C Patent Policy. | |||
This document is governed by the 1 August 2014 W3C Process Document. | ||||
Table of Contents | Table of Contents | |||
* 1. Introduction | * 1. Introduction | |||
* 2. Terminology | * 2. Terminology | |||
* 3. Notational Conventions | * 3. Notational Conventions | |||
* 3.1 Requirements | * 3.1 Requirements | |||
* 3.2 Formal Syntax | * 3.2 Formal Syntax | |||
* 4. Determining User Preference | * 4. Determining User Preference | |||
* 5. Expressing a Tracking Preference | * 5. Expressing a Tracking Preference | |||
* 5.1 Expression Format | * 5.1 Expression Format | |||
* 5.2 DNT Header Field for HTTP Requests | * 5.2 DNT Header Field for HTTP Requests | |||
* 5.3 JavaScript Property to Detect Preference | * 5.3 JavaScript Property to Detect Preference | |||
* 5.4 Tracking Preference Expressed in Other Protocols | * 5.4 Tracking Preference Expressed in Other Protocols | |||
* 6. Communicating a Tracking Status | * 6. Communicating a Tracking Status | |||
* 6.1 Overview | * 6.1 Overview | |||
* 6.2 Tracking Status Value | * 6.2 Tracking Status Value | |||
* 6.2.1 Definition | * 6.2.1 Definition | |||
* 6.2.2 Under Construction (!) | * 6.2.2 Under Construction (!) | |||
* 6.2.3 Dynamic (?) | * 6.2.3 Dynamic (?) | |||
* 6.2.4 Not Tracking (N) | * 6.2.4 Gateway (G) | |||
* 6.2.5 Tracking (T) | * 6.2.5 Not Tracking (N) | |||
* 6.2.6 Consent (C) | * 6.2.6 Tracking (T) | |||
* 6.2.7 Potential Consent (P) | * 6.2.7 Consent (C) | |||
* 6.2.8 Disregarding (D) | * 6.2.8 Potential Consent (P) | |||
* 6.2.9 Updated (U) | * 6.2.9 Disregarding (D) | |||
* 6.2.10 Updated (U) | ||||
* 6.3 Tk Header Field for HTTP Responses | * 6.3 Tk Header Field for HTTP Responses | |||
* 6.3.1 Definition | * 6.3.1 Definition | |||
* 6.3.2 Referring to a Request-specific Tracking Status | * 6.3.2 Referring to a Request-specific Tracking Status | |||
Resource | Resource | |||
* 6.3.3 Indicating an Interactive Status Change | * 6.3.3 Indicating an Interactive Status Change | |||
* 6.4 Tracking Status Resource | * 6.4 Tracking Status Resource | |||
* 6.4.1 Site-wide Tracking Status | * 6.4.1 Site-wide Tracking Status | |||
* 6.4.2 Request-specific Tracking Status | * 6.4.2 Request-specific Tracking Status | |||
* 6.4.3 Status Checks are Not Tracked | * 6.4.3 Status Checks are Not Tracked | |||
* 6.4.4 Caching | * 6.4.4 Caching | |||
skipping to change at line 219 | skipping to change at line 189 | |||
Users need a mechanism to express their own preferences regarding tracking | Users need a mechanism to express their own preferences regarding tracking | |||
that is both simple to configure and efficient when implemented. However, | that is both simple to configure and efficient when implemented. However, | |||
merely expressing a preference does not imply that all recipients will be | merely expressing a preference does not imply that all recipients will be | |||
able to comply. In some cases, a server might be dependent on some forms | able to comply. In some cases, a server might be dependent on some forms | |||
of tracking and is unwilling or unable to turn that off. In other cases, a | of tracking and is unwilling or unable to turn that off. In other cases, a | |||
server might perform only limited forms of tracking that would be | server might perform only limited forms of tracking that would be | |||
acceptable to most users. Servers need mechanisms for communicating their | acceptable to most users. Servers need mechanisms for communicating their | |||
tracking behavior and for storing user-granted exceptions after the user | tracking behavior and for storing user-granted exceptions after the user | |||
has made an informed choice. | has made an informed choice. | |||
This specification defines Hypertext Transfer Protocol [HTTP] elements for | This specification extends Hypertext Transfer Protocol (HTTP) semantics | |||
communicating the user's tracking preference (if any) and communicating | [RFC7231] to communicate a user's tracking preference, if any, and an | |||
the server's tracking behavior (if any). The DNT request header field is | origin server's tracking behavior. The DNT request header field is defined | |||
defined for communicating the user's tracking preference for the request | for communicating the user's tracking preference for the request target. A | |||
target. A well-known URI for a tracking status resource and the Tk | well-known URI for a tracking status resource and the Tk response header | |||
response header field are defined for communicating the server's tracking | field are defined for communicating the server's tracking behavior. In | |||
behavior. In addition, JavaScript APIs are defined for enabling scripts to | addition, JavaScript APIs are defined for enabling scripts to determine | |||
determine DNT status and register a user-granted exception. | DNT status and register a user-granted exception. | |||
This specification does not define requirements on what a recipient needs | This specification does not define requirements on what a recipient needs | |||
to do to comply with a user's expressed tracking preference, except for | to do to comply with a user's expressed tracking preference, except for | |||
the means by which such compliance is communicated. Instead, the tracking | the means by which such compliance is communicated. Instead, the tracking | |||
status provides the ability to identify a set of compliance regimes to | status provides the ability to identify a set of compliance regimes to | |||
which the server claims to comply, with the assumption being that each | which the server claims to comply, with the assumption being that each | |||
regime defines its own requirements on compliant behavior. For example, | regime defines its own requirements on compliant behavior. For example, | |||
[TCS] is a work-in-progress that intends to define such a compliance | [TCS] is a work-in-progress that intends to define such a compliance | |||
regime. | regime. | |||
skipping to change at line 248 | skipping to change at line 218 | |||
Tracking is the collection of data regarding a particular user's activity | Tracking is the collection of data regarding a particular user's activity | |||
across multiple distinct contexts and the retention, use, or sharing of | across multiple distinct contexts and the retention, use, or sharing of | |||
data derived from that activity outside the context in which it occurred. | data derived from that activity outside the context in which it occurred. | |||
A context is a set of resources that are controlled by the same party or | A context is a set of resources that are controlled by the same party or | |||
jointly controlled by a set of parties. | jointly controlled by a set of parties. | |||
A user is a natural person who is making, or has made, use of the Web. | A user is a natural person who is making, or has made, use of the Web. | |||
A user agent is any of the various client programs capable of initiating | A user agent is any of the various client programs capable of initiating | |||
HTTP requests [HTTP], including (but not limited to) browsers, spiders | HTTP requests, including (but not limited to) browsers, spiders (web-based | |||
(web-based robots), command-line tools, custom applications, and mobile | robots), command-line tools, custom applications, and mobile apps | |||
apps. | [RFC7230]. | |||
A network interaction is a single HTTP request and its corresponding | A network interaction is a single HTTP request and its corresponding | |||
response(s): zero or more interim (1xx) responses and a single final | response(s): zero or more interim (1xx) responses and a single final | |||
(2xx-5xx) response. | (2xx-5xx) response. | |||
A user action is a deliberate action by the user, via configuration, | A user action is a deliberate action by the user, via configuration, | |||
invocation, or selection, to initiate a network interaction. Selection of | invocation, or selection, to initiate a network interaction. Selection of | |||
a link, submission of a form, and reloading a page are examples of user | a link, submission of a form, and reloading a page are examples of user | |||
actions. User activity is any set of such user actions. | actions. User activity is any set of such user actions. | |||
skipping to change at line 310 | skipping to change at line 280 | |||
3. Notational Conventions | 3. Notational Conventions | |||
3.1 Requirements | 3.1 Requirements | |||
The key words must, must not, required, should, should not, recommended, | The key words must, must not, required, should, should not, recommended, | |||
may, and optional in this specification are to be interpreted as described | may, and optional in this specification are to be interpreted as described | |||
in [RFC2119]. | in [RFC2119]. | |||
3.2 Formal Syntax | 3.2 Formal Syntax | |||
This specification uses Augmented Backus-Naur Form [ABNF] to define | This specification uses the Augmented Backus-Naur Form (ABNF) notation of | |||
network protocol syntax and WebIDL [WEBIDL] for defining scripting APIs. | [RFC5234] to define network protocol syntax and WebIDL [WEBIDL] to define | |||
scripting APIs. Conformance criteria and considerations regarding error | ||||
handling are defined in Section 2.5 of [RFC7230]. | ||||
4. Determining User Preference | 4. Determining User Preference | |||
The goal of this protocol is to allow a user to express their personal | The goal of this protocol is to allow a user to express their personal | |||
preference regarding tracking to each server and web application that they | preference regarding tracking to each server and web application that they | |||
communicate with via HTTP, thereby allowing recipients of that preference | communicate with via HTTP, thereby allowing recipients of that preference | |||
to adjust tracking behavior accordingly or to reach a separate agreement | to adjust tracking behavior accordingly or to reach a separate agreement | |||
with the user that satisfies all parties. | with the user that satisfies all parties. | |||
Key to that notion of expression is that the signal sent MUST reflect the | Key to that notion of expression is that the signal sent MUST reflect the | |||
skipping to change at line 433 | skipping to change at line 405 | |||
appropriate for the given user, particularly when considered in light of | appropriate for the given user, particularly when considered in light of | |||
the user's privacy expectations and cultural circumstances. Likewise, | the user's privacy expectations and cultural circumstances. Likewise, | |||
servers might make use of other preference information outside the scope | servers might make use of other preference information outside the scope | |||
of this protocol, such as site-specific user preferences or third-party | of this protocol, such as site-specific user preferences or third-party | |||
registration services, to inform or adjust their behavior when no explicit | registration services, to inform or adjust their behavior when no explicit | |||
preference is expressed via this protocol. | preference is expressed via this protocol. | |||
5.2 DNT Header Field for HTTP Requests | 5.2 DNT Header Field for HTTP Requests | |||
The DNT header field is a mechanism for expressing the user's tracking | The DNT header field is a mechanism for expressing the user's tracking | |||
preference in an HTTP request [HTTP]. | preference in an HTTP request ([RFC7230]). | |||
DNT-field-name = "DNT" | DNT-field-name = "DNT" | |||
DNT-field-value = ( "0" / "1" ) *DNT-extension | DNT-field-value = ( "0" / "1" ) *DNT-extension | |||
A user agent MUST NOT generate a DNT header field if the user's tracking | A user agent MUST NOT generate a DNT header field if the user's tracking | |||
preference is not enabled. | preference is not enabled. | |||
A user agent MUST generate a DNT header field with a field-value that | A user agent MUST generate a DNT header field with a field-value that | |||
begins with the numeric character "1" (%x31) if the user's tracking | begins with the numeric character "1" if the user's tracking preference is | |||
preference is enabled, their preference is for DNT:1, and no exception has | enabled, their preference is for DNT:1, and no exception has been granted | |||
been granted for the request target (see section 7. User-Granted | for the request target (see section 7. User-Granted Exceptions). | |||
Exceptions). | ||||
A user agent MUST generate a DNT header field with a field-value that | A user agent MUST generate a DNT header field with a field-value that | |||
begins with the numeric character "0" (%x30) if the user's tracking | begins with the numeric character "0" if the user's tracking preference is | |||
preference is enabled and their preference is for DNT:0, or if an | enabled and their preference is for DNT:0, or if an exception has been | |||
exception has been granted for the request target. | granted for the request target. | |||
A proxy MUST NOT generate a DNT header field unless it has been | A proxy MUST NOT generate a DNT header field unless it has been | |||
specifically installed or configured to do so by the user making the | specifically installed or configured to do so by the user making the | |||
request and adheres to the above requirements as if it were a user agent. | request and adheres to the above requirements as if it were a user agent. | |||
Example 1 | Example 1 | |||
GET /something/here HTTP/1.1 | GET /something/here HTTP/1.1 | |||
Host: example.com | Host: example.com | |||
DNT: 1 | DNT: 1 | |||
skipping to change at line 488 | skipping to change at line 459 | |||
User agents that do not implement DNT extensions MUST NOT send | User agents that do not implement DNT extensions MUST NOT send | |||
DNT-extension characters in the DNT field-value. Servers that do not | DNT-extension characters in the DNT field-value. Servers that do not | |||
implement DNT extensions SHOULD ignore anything beyond the first | implement DNT extensions SHOULD ignore anything beyond the first | |||
character. | character. | |||
Note | Note | |||
The extension syntax is restricted to visible ASCII characters that can be | The extension syntax is restricted to visible ASCII characters that can be | |||
parsed as a single word in HTTP and safely embedded in a JSON string | parsed as a single word in HTTP and safely embedded in a JSON string | |||
without further encoding (section 6.5 Tracking Status Representation). At | without further encoding (section 6.5 Tracking Status Representation). At | |||
most one DNT header field can be present in a valid request [HTTP]. | most one DNT header field can be present in a valid request [RFC7230]. | |||
5.3 JavaScript Property to Detect Preference | 5.3 JavaScript Property to Detect Preference | |||
The doNotTrack property enables a client-side script with read access to | The doNotTrack property enables a client-side script with read access to | |||
the Window object to determine what DNT header field value would be sent | the Navigator object to determine what DNT header field value would be | |||
in requests to the document-origin, taking into account the user's general | sent in requests to the document-origin, taking into account the user's | |||
preference (if any) and any user-granted exceptions applicable to that | general preference (if any) and any user-granted exceptions applicable to | |||
origin server. | that origin server. | |||
partial interface Window { | partial interface Navigator { | |||
readonly attribute DOMString doNotTrack; | readonly attribute DOMString? doNotTrack; | |||
}; | }; | |||
doNotTrack of type DOMString, readonly | doNotTrack of type DOMString, readonly , nullable | |||
Returns the same string value that would be sent in a | Returns the same string value that would be sent in a | |||
DNT-field-value (section 5.2 DNT Header Field for HTTP Requests) | DNT-field-value (section 5.2 DNT Header Field for HTTP Requests) | |||
to a target that is the document-origin of the window, in the | to a target that is the document-origin of the window, in the | |||
browser context of the current top-level origin. The value is null | browser context of the current top-level origin. The value is null | |||
if no DNT header field would be sent (e.g., because a tracking | if no DNT header field would be sent (e.g., because a tracking | |||
preference is not enabled). | preference is not enabled). | |||
Note | ||||
Note that the value includes not only the "0" or "1", but also any | ||||
DNT-extension; if no DNT header is sent, the return value is null, not an | ||||
empty string (which would indicate that a header is sent with no | ||||
DNT-field-value). | ||||
5.4 Tracking Preference Expressed in Other Protocols | 5.4 Tracking Preference Expressed in Other Protocols | |||
A user's tracking preference is intended to apply in general, regardless | A user's tracking preference is intended to apply in general, regardless | |||
of the protocols being used for Internet communication. However, it is | of the protocols being used for Internet communication. However, it is | |||
beyond the scope of this specification to define how a user's tracking | beyond the scope of this specification to define how a user's tracking | |||
preference might be communicated via protocols other than HTTP. | preference might be communicated via protocols other than HTTP. | |||
6. Communicating a Tracking Status | 6. Communicating a Tracking Status | |||
6.1 Overview | 6.1 Overview | |||
skipping to change at line 545 | skipping to change at line 523 | |||
resource is any resource on the same origin server. For a Tk response | resource is any resource on the same origin server. For a Tk response | |||
header field, the target resource of the corresponding request is the | header field, the target resource of the corresponding request is the | |||
designated resource, and remains so for any subsequent request-specific | designated resource, and remains so for any subsequent request-specific | |||
tracking status resource referred to by the Tk field value. | tracking status resource referred to by the Tk field value. | |||
The tracking status value is case sensitive, as defined formally by the | The tracking status value is case sensitive, as defined formally by the | |||
following ABNF. | following ABNF. | |||
TSV = %x21 ; "!" - under construction | TSV = %x21 ; "!" - under construction | |||
/ %x3F ; "?" - dynamic | / %x3F ; "?" - dynamic | |||
/ %x47 ; "G" - gateway to multiple parties | ||||
/ %x4E ; "N" - not tracking | / %x4E ; "N" - not tracking | |||
/ %x54 ; "T" - tracking | / %x54 ; "T" - tracking | |||
/ %x43 ; "C" - tracking with consent | / %x43 ; "C" - tracking with consent | |||
/ %x50 ; "P" - tracking only if consented | / %x50 ; "P" - tracking only if consented | |||
/ %x44 ; "D" - disregarding DNT | / %x44 ; "D" - disregarding DNT | |||
/ %x55 ; "U" - updated | / %x55 ; "U" - updated | |||
6.2.2 Under Construction (!) | 6.2.2 Under Construction (!) | |||
skipping to change at line 576 | skipping to change at line 555 | |||
information to determine tracking status, usually because the designated | information to determine tracking status, usually because the designated | |||
resource dynamically adjusts behavior based on information in a request. | resource dynamically adjusts behavior based on information in a request. | |||
If ? is present in the site-wide tracking status, the origin server MUST | If ? is present in the site-wide tracking status, the origin server MUST | |||
send a Tk header field in all responses to requests on the designated | send a Tk header field in all responses to requests on the designated | |||
resource. If ? is present in the Tk header field, more information will be | resource. If ? is present in the Tk header field, more information will be | |||
provided in a request-specific tracking status resource referred to by the | provided in a request-specific tracking status resource referred to by the | |||
status-id. An origin server MUST NOT send ? as the tracking status value | status-id. An origin server MUST NOT send ? as the tracking status value | |||
in the representation of a request-specific tracking status resource. | in the representation of a request-specific tracking status resource. | |||
6.2.4 Not Tracking (N) | 6.2.4 Gateway (G) | |||
A tracking status value of G means the server is acting as a gateway to an | ||||
exchange involving multiple parties. This might occur if a response to the | ||||
designated resource involves an automated selection process, such as | ||||
dynamic bidding, where the party that is selected determines how the | ||||
request data will be treated with respect to an expressed tracking | ||||
preference. Similar to the ? value, the G TSV indicates that the actual | ||||
tracking status is dynamic and will be provided in the response message's | ||||
Tk header field, presumably using information forwarded from the selected | ||||
party. | ||||
This tracking status value is only valid as a site-wide status. A server | ||||
MUST NOT send G as the tracking status value in a Tk header field or | ||||
within the representation of a request-specific tracking status resource. | ||||
If G is present in the site-wide tracking status: | ||||
* the gateway MUST send a link within its site-wide tracking status | ||||
representation to a privacy policy that explains what limitations are | ||||
placed on parties that might receive data via that gateway; | ||||
* the gateway MUST forward any expressed tracking preference in the | ||||
request to each party that receives data from that request; | ||||
* the gateway MUST have a contract in place with each of the parties to | ||||
whom it provides request data such that only the selected party is | ||||
allowed to retain tracking data from a request with an expressed | ||||
tracking preference of DNT:1; and, | ||||
* the gateway MUST send a Tk header field in responses to requests on | ||||
the designated resource and include within that field's value a | ||||
status-id specific to the selected party, such that information about | ||||
the selected party can be obtained via the request-specific tracking | ||||
status resource (see section 6.4.2 Request-specific Tracking Status). | ||||
With respect to tracking performed by the gateway itself, the G response | ||||
can be considered equivalent to the T (tracking) response defined below. | ||||
The other information within the site-wide tracking status representation | ||||
indicates how the gateway intends to comply with an expressed tracking | ||||
preference, aside from the potential sharing of data implied by the | ||||
gateway process. | ||||
6.2.5 Not Tracking (N) | ||||
A tracking status value of N means the origin server claims that data | A tracking status value of N means the origin server claims that data | |||
collected via the designated resource is not used for tracking and will | collected via the designated resource is not used for tracking and will | |||
not be combined with other data in a form that would enable tracking. | not be combined with other data in a form that would enable tracking. | |||
6.2.5 Tracking (T) | 6.2.6 Tracking (T) | |||
A tracking status value of T means the origin server might perform or | A tracking status value of T means the origin server might perform or | |||
enable tracking using data collected via the designated resource. | enable tracking using data collected via the designated resource. | |||
Information provided in the tracking status representation might indicate | Information provided in the tracking status representation might indicate | |||
whether such tracking is limited to a set of commonly accepted uses or | whether such tracking is limited to a set of commonly accepted uses or | |||
adheres to one or more compliance regimes. | adheres to one or more compliance regimes. | |||
6.2.6 Consent (C) | 6.2.7 Consent (C) | |||
A tracking status value of C means that the origin server believes it has | A tracking status value of C means that the origin server believes it has | |||
received prior consent for tracking this user, user agent, or device, | received prior consent for tracking this user, user agent, or device, | |||
perhaps via some mechanism not defined by this specification, and that | perhaps via some mechanism not defined by this specification, and that | |||
prior consent overrides the tracking preference expressed by this | prior consent overrides the tracking preference expressed by this | |||
protocol. An origin server that sends the C tracking status value for a | protocol. An origin server that sends the C tracking status value for a | |||
designated resource MUST provide a reference for controlling consent | designated resource MUST provide a reference for controlling consent | |||
within the config property of its corresponding tracking status | within the config property of its corresponding tracking status | |||
representation (section 6.5 Tracking Status Representation). | representation (section 6.5 Tracking Status Representation). | |||
6.2.7 Potential Consent (P) | 6.2.8 Potential Consent (P) | |||
A tracking status value of P means that the origin server does not know, | A tracking status value of P means that the origin server does not know, | |||
in real-time, whether it has received prior consent for tracking this | in real-time, whether it has received prior consent for tracking this | |||
user, user agent, or device, but promises not to use or share any DNT:1 | user, user agent, or device, but promises not to use or share any DNT:1 | |||
data until such consent has been determined, and further promises to | data until such consent has been determined, and further promises to | |||
delete or de-identify within forty-eight hours any DNT:1 data received for | delete or de-identify within forty-eight hours any DNT:1 data received for | |||
which such consent has not been received. | which such consent has not been received. | |||
Since this status value does not itself indicate whether a specific | Since this status value does not itself indicate whether a specific | |||
request is tracked, an origin server that sends a P tracking status value | request is tracked, an origin server that sends a P tracking status value | |||
skipping to change at line 623 | skipping to change at line 642 | |||
representation that links to a resource for obtaining consent status. | representation that links to a resource for obtaining consent status. | |||
The P tracking status value is specifically meant to address audience | The P tracking status value is specifically meant to address audience | |||
survey systems for which determining consent at the time of a request is | survey systems for which determining consent at the time of a request is | |||
either impractical, due to legacy systems not being able to keep up with | either impractical, due to legacy systems not being able to keep up with | |||
Web traffic, or potentially "gamed" by first party sites if they can | Web traffic, or potentially "gamed" by first party sites if they can | |||
determine which of their users have consented. The data cannot be used for | determine which of their users have consented. The data cannot be used for | |||
the sake of personalization. If consent can be determined at the time of a | the sake of personalization. If consent can be determined at the time of a | |||
request, the C tracking status is preferred. | request, the C tracking status is preferred. | |||
6.2.8 Disregarding (D) | 6.2.9 Disregarding (D) | |||
A tracking status value of D means that the origin server is unable or | A tracking status value of D means that the origin server is unable or | |||
unwilling to respect a tracking preference received from the requesting | unwilling to respect a tracking preference received from the requesting | |||
user agent. An origin server that sends the D tracking status value MUST | user agent. An origin server that sends the D tracking status value MUST | |||
detail within the server's corresponding privacy policy the conditions | detail within the server's corresponding privacy policy the conditions | |||
under which a tracking preference might be disregarded. | under which a tracking preference might be disregarded. | |||
For example, an origin server might disregard the DNT field received from | For example, an origin server might disregard the DNT field received from | |||
specific user agents (or via specific network intermediaries) that are | specific user agents (or via specific network intermediaries) that are | |||
deemed to be non-conforming, might be collecting additional data from | deemed to be non-conforming, might be collecting additional data from | |||
skipping to change at line 646 | skipping to change at line 665 | |||
local law, regulation, or order. | local law, regulation, or order. | |||
Note | Note | |||
This specification is written with an assumption that the D tracking | This specification is written with an assumption that the D tracking | |||
status value would only be used in situations that can be adequately | status value would only be used in situations that can be adequately | |||
described to users as an exception to normal behavior. If this turns out | described to users as an exception to normal behavior. If this turns out | |||
not to be the case, either the server's decision to send the D signal | not to be the case, either the server's decision to send the D signal | |||
needs re-examination, or this specification, or both. | needs re-examination, or this specification, or both. | |||
6.2.9 Updated (U) | 6.2.10 Updated (U) | |||
A tracking status value of U means that the request resulted in a | A tracking status value of U means that the request resulted in a | |||
potential change to the tracking status applicable to this user, user | potential change to the tracking status applicable to this user, user | |||
agent, or device. A user agent that relies on a cached tracking status | agent, or device. A user agent that relies on a cached tracking status | |||
SHOULD update the cache entry with the current status by making a new | SHOULD update the cache entry with the current status by making a new | |||
request on the applicable tracking status resource. | request on the applicable tracking status resource. | |||
An origin server MUST NOT send U as a tracking status value anywhere other | An origin server MUST NOT send U as a tracking status value anywhere other | |||
than a Tk header field that is in response to a state-changing request. | than a Tk header field that is in response to a state-changing request. | |||
6.3 Tk Header Field for HTTP Responses | 6.3 Tk Header Field for HTTP Responses | |||
6.3.1 Definition | 6.3.1 Definition | |||
The Tk response header field is hereby defined as an OPTIONAL means for | The Tk response header field is a means for indicating the tracking status | |||
indicating the tracking status that applied to the corresponding request | that applied to the corresponding request. An origin server is REQUIRED to | |||
and as a REQUIRED means for indicating that a state-changing request has | send a Tk header field if its site-wide tracking status value is ? | |||
resulted in an interactive change to the tracking status. | (dynamic) or G (gateway), or when an interactive change is made to the | |||
tracking status and indicated by U (updated). | ||||
Tk-field-name = "Tk" | Tk-field-name = "Tk" | |||
Tk-field-value = TSV [ ";" status-id ] | Tk-field-value = TSV [ ";" status-id ] | |||
The Tk field-value begins with a tracking status value (section 6.2 | The Tk field-value begins with a tracking status value (section 6.2 | |||
Tracking Status Value), optionally followed by a semicolon and a status-id | Tracking Status Value), optionally followed by a semicolon and a status-id | |||
that refers to a request-specific tracking status resource (section 6.3.2 | that refers to a request-specific tracking status resource (section 6.3.2 | |||
Referring to a Request-specific Tracking Status Resource). | Referring to a Request-specific Tracking Status Resource). | |||
skipping to change at line 687 | skipping to change at line 707 | |||
Example 2 | Example 2 | |||
Tk: N | Tk: N | |||
6.3.2 Referring to a Request-specific Tracking Status Resource | 6.3.2 Referring to a Request-specific Tracking Status Resource | |||
If an origin server has multiple, request-specific tracking policies, such | If an origin server has multiple, request-specific tracking policies, such | |||
that the tracking status might differ depending on some aspect of the | that the tracking status might differ depending on some aspect of the | |||
request (e.g., method, target URI, header fields, data, etc.), the origin | request (e.g., method, target URI, header fields, data, etc.), the origin | |||
server MAY provide an additional subtree of well-known resources | server can provide an additional subtree of well-known resources | |||
corresponding to each of those distinct tracking statuses. The OPTIONAL | corresponding to each of those distinct tracking statuses. The status-id | |||
status-id portion of the Tk field-value indicates which specific tracking | portion of the Tk field-value indicates which specific tracking status | |||
status resource applies to the current request. | resource applies to the current request. The status-id is case-sensitive. | |||
status-id = 1*id-char | status-id = 1*id-char | |||
id-char = ALPHA / DIGIT / "_" / "-" / "+" / "=" / "/" | id-char = ALPHA / DIGIT / "_" / "-" / "+" / "=" / "/" | |||
For example, a response containing | For example, a response containing | |||
Example 3 | Example 3 | |||
Tk: T;fRx42 | Tk: T;fRx42 | |||
indicates that data collected via the target resource might be used for | indicates that data collected via the target resource might be used for | |||
tracking and that an applicable tracking status representation can be | tracking and that an applicable tracking status representation can be | |||
obtained by performing a retrieval request on | obtained by performing a retrieval request on | |||
/.well-known/dnt/fRx42 | /.well-known/dnt/fRx42 | |||
If a Tk field-value has a tracking status value of ? (dynamic), then the | Note that the status-id is resolved relative to the origin server of the | |||
origin server MUST also send a status-id in the field-value. The status-id | current request. A retrieval request targeting that URI can be redirected, | |||
is case-sensitive. | if desired, to some other server. The status-id has been intentionally | |||
limited to a small set of characters to encourage use of short tokens | ||||
instead of potentially long, human-readable strings. | ||||
If a Tk field-value has a tracking status value of ? (dynamic), the origin | ||||
server MUST send a status-id in the field-value. | ||||
6.3.3 Indicating an Interactive Status Change | 6.3.3 Indicating an Interactive Status Change | |||
Interactive mechanisms might be used, beyond the scope of this | Interactive mechanisms might be used, beyond the scope of this | |||
specification, that have the effect of asking for and obtaining prior | specification, that have the effect of asking for and obtaining prior | |||
consent for tracking, or for modifying prior indications of consent. For | consent for tracking, or for modifying prior indications of consent. For | |||
example, the tracking status resource's status-object defines a config | example, the tracking status resource's status-object defines a config | |||
property that can refer to such a mechanism. Although such out-of-band | property that can refer to such a mechanism. Although such out-of-band | |||
mechanisms are not defined by this specification, their presence might | mechanisms are not defined by this specification, their presence might | |||
influence the tracking status object's response value. | influence the tracking status object's response value. | |||
skipping to change at line 761 | skipping to change at line 786 | |||
representation can be cached, as described in section 6.4.4 Caching. | representation can be cached, as described in section 6.4.4 Caching. | |||
See section 6.7 Using the Tracking Status for examples of how tracking | See section 6.7 Using the Tracking Status for examples of how tracking | |||
status resources can be used to discover support for this protocol. | status resources can be used to discover support for this protocol. | |||
6.4.2 Request-specific Tracking Status | 6.4.2 Request-specific Tracking Status | |||
If an origin server has multiple, request-specific tracking policies, such | If an origin server has multiple, request-specific tracking policies, such | |||
that the tracking status might differ depending on some aspect of the | that the tracking status might differ depending on some aspect of the | |||
request (e.g., method, target URI, header fields, data, etc.), the origin | request (e.g., method, target URI, header fields, data, etc.), the origin | |||
server MAY provide an additional subtree of well-known resources | server can provide an additional subtree of well-known resources | |||
corresponding to each of those distinct tracking statuses. The Tk response | corresponding to each of those distinct tracking statuses. The Tk response | |||
header field (section 6.3 Tk Header Field for HTTP Responses) can include | header field (section 6.3 Tk Header Field for HTTP Responses) can include | |||
a status-id to indicate which specific tracking status resource applies to | a status-id to indicate which specific tracking status resource applies to | |||
the current request. | the current request. | |||
A tracking status resource space is defined by the following URI Template | A tracking status resource space is defined by the following URI Template | |||
[URI-TEMPLATE]: | [RFC6570]: | |||
/.well-known/dnt/{+status-id} | /.well-known/dnt/{+status-id} | |||
where the value of status-id is a string of URI-safe characters provided | where the value of status-id is a string of URI-safe characters provided | |||
by a Tk field-value in response to a prior request. For example, a prior | by a Tk field-value in response to a prior request. For example, a prior | |||
response containing | response containing | |||
Example 5 | Example 5 | |||
Tk: ?;ahoy | Tk: ?;ahoy | |||
skipping to change at line 790 | skipping to change at line 815 | |||
refers to the specific tracking status resource | refers to the specific tracking status resource | |||
/.well-known/dnt/ahoy | /.well-known/dnt/ahoy | |||
Resources within the request-specific tracking status resource space are | Resources within the request-specific tracking status resource space are | |||
represented using the same format as a site-wide tracking status resource. | represented using the same format as a site-wide tracking status resource. | |||
6.4.3 Status Checks are Not Tracked | 6.4.3 Status Checks are Not Tracked | |||
When sending a request for the tracking status, a user agent SHOULD | When sending a request for the tracking status, a user agent SHOULD | |||
include any cookie data [COOKIES] (set prior to the request) that would be | include any cookie data [RFC6265] (set prior to the request) that would be | |||
sent in a normal request to that origin server, since that data might be | sent in a normal request to that origin server, since that data might be | |||
needed by the server to determine the current tracking status. For | needed by the server to determine the current tracking status. For | |||
example, the cookie data might indicate a prior out-of-band decision by | example, the cookie data might indicate a prior out-of-band decision by | |||
the user to opt-out or consent to tracking by that origin server. | the user to opt-out or consent to tracking by that origin server. | |||
An origin server MUST NOT retain tracking data regarding requests on the | An origin server MUST NOT retain tracking data regarding requests on the | |||
site-wide tracking status resource or within the tracking status resource | site-wide tracking status resource or within the tracking status resource | |||
space, regardless of the presence, absence, or value of a DNT header | space, regardless of the presence, absence, or value of a DNT header | |||
field, cookies, or any other information in the request. In addition, an | field, cookies, or any other information in the request. In addition, an | |||
origin server MUST NOT send Set-Cookie or Set-Cookie2 header fields in | origin server MUST NOT send Set-Cookie or Set-Cookie2 header fields in | |||
responses to those requests, including the responses to redirected | responses to those requests, including the responses to redirected | |||
tracking status requests, and MUST NOT send a response having content that | tracking status requests, and MUST NOT send a response having content that | |||
initiates tracking beyond what was already present in the request. A user | initiates tracking beyond what was already present in the request. A user | |||
agent SHOULD ignore, or treat as an error, any Set-Cookie or Set-Cookie2 | agent SHOULD ignore, or treat as an error, any Set-Cookie or Set-Cookie2 | |||
header field received in such a response. | header field received in such a response. | |||
6.4.4 Caching | 6.4.4 Caching | |||
If the tracking status is applicable to all users, regardless of the | If the tracking status is applicable to all users, regardless of the | |||
received DNT-field-value or other data received via the request, then the | received DNT-field-value or other data received via the request, then the | |||
origin server SHOULD mark the response as cacheable [HTTP-cache] and | origin server SHOULD mark the response as cacheable [RFC7234] and assign a | |||
assign a time-to-live (expiration or max-use) that is sufficient to enable | time-to-live (expiration or max-use) that is sufficient to enable shared | |||
shared caching but not greater than the earliest point at which the | caching but not greater than the earliest point at which the service's | |||
service's tracking behavior might increase. | tracking behavior might increase. | |||
For example, if the tracking status response is set to expire in seven | For example, if the tracking status response is set to expire in seven | |||
days, then the earliest point in time that the service's tracking behavior | days, then the earliest point in time that the service's tracking behavior | |||
can be increased is seven days after the tracking status representation | can be increased is seven days after the tracking status representation | |||
has been updated to reflect the new behavior, since old copies might | has been updated to reflect the new behavior, since old copies might | |||
persist in caches until the expiration is triggered. A service's tracking | persist in caches until the expiration is triggered. A service's tracking | |||
behavior can be reduced at any time, with or without a corresponding | behavior can be reduced at any time, with or without a corresponding | |||
change to the tracking status resource. | change to the tracking status resource. | |||
If the tracking status is only applicable to users that have the same | If the tracking status is only applicable to users that have the same | |||
skipping to change at line 1081 | skipping to change at line 1106 | |||
6.6 Status Code for Tracking Required | 6.6 Status Code for Tracking Required | |||
If an origin server receives a request with DNT:1, does not have | If an origin server receives a request with DNT:1, does not have | |||
out-of-band consent for tracking this user, and wishes to deny access to | out-of-band consent for tracking this user, and wishes to deny access to | |||
the requested resource until the user provides some form of user-granted | the requested resource until the user provides some form of user-granted | |||
exception or consent for tracking, then the origin server SHOULD send a | exception or consent for tracking, then the origin server SHOULD send a | |||
409 (Conflict) response with a message payload that describes why the | 409 (Conflict) response with a message payload that describes why the | |||
request has been refused and how one might supply the required consent or | request has been refused and how one might supply the required consent or | |||
exception to avoid this conflict [HTTP-semantics]. | exception to avoid this conflict [RFC7231]. | |||
The 409 response ought to include a user authentication mechanism in the | The 409 response ought to include a user authentication mechanism in the | |||
header fields and/or message body if user login is one of the ways through | header fields and/or message body if user login is one of the ways through | |||
which access is granted. | which access is granted. | |||
6.7 Using the Tracking Status | 6.7 Using the Tracking Status | |||
Note | Note | |||
This section is for collecting use cases that describe questions a user | This section is for collecting use cases that describe questions a user | |||
skipping to change at line 1236 | skipping to change at line 1261 | |||
This section describes the effect of the APIs in terms of a logical | This section describes the effect of the APIs in terms of a logical | |||
processing model; this model describes the behavior, but is not to be read | processing model; this model describes the behavior, but is not to be read | |||
as mandating any specific implementation. | as mandating any specific implementation. | |||
This API considers exceptions which are double-keyed to two domains: the | This API considers exceptions which are double-keyed to two domains: the | |||
site, and the target. A user might - for instance - want AnalytiCo to be | site, and the target. A user might - for instance - want AnalytiCo to be | |||
allowed to track them on Example News, but not on Example Medical. To | allowed to track them on Example News, but not on Example Medical. To | |||
simplify language used in this API specification, we define three terms: | simplify language used in this API specification, we define three terms: | |||
* top-level origin is the domain name of the top-level document origin | * top-level origin is a top-level browsing context as defined in [HTML5] | |||
of this DOM: essentially the fully qualified domain name in the | * A target site is the Host part of an HTTP URL as defined in [RFC3986] | |||
address bar. | * The document origin of a script is the effective script origin as | |||
* A target site is a domain name which is the target of an HTTP request, | defined in [HTML5] | |||
and which may be an origin for embedded resources on the indicated | ||||
top-level origin. | ||||
* The document origin of a script is the domain of origin of the | ||||
document that caused that script to be loaded (not necessarily the | ||||
same as the origin of the script itself). | ||||
For instance, if the document at | For instance, if the document at | |||
http://web.exnews.com/news/story/2098373.html references the resources | http://web.exnews.com/news/story/2098373.html references the resources | |||
http://exnews.analytico.net/1x1.gif and | http://exnews.analytico.net/1x1.gif and | |||
http://widgets.exsocial.org/good-job-button.js, the top-level origin is | http://widgets.exsocial.org/good-job-button.js, the top-level origin is | |||
web.exnews.com; exnews.analytico.net and widgets.exsocial.org are both | web.exnews.com; exnews.analytico.net and widgets.exsocial.org are both | |||
targets. | targets. | |||
The domains that enter into the behavior of the APIs include: | The domains that enter into the behavior of the APIs include: | |||
skipping to change at line 1281 | skipping to change at line 1301 | |||
The calls cause the following steps to occur (subject to user confirmation | The calls cause the following steps to occur (subject to user confirmation | |||
of the exception, if the user agent asks for it): | of the exception, if the user agent asks for it): | |||
* The UA adds to its local database one or more site-pair duplets | * The UA adds to its local database one or more site-pair duplets | |||
[document-origin, target]; one or other of these may be a wild-card | [document-origin, target]; one or other of these may be a wild-card | |||
("*"); | ("*"); | |||
* While the user is browsing a given site (top-level origin), and a DNT | * While the user is browsing a given site (top-level origin), and a DNT | |||
header is to be sent to a target domain, if the duplet [top-level | header is to be sent to a target domain, if the duplet [top-level | |||
origin, target domain] matches any duplet in the database, then a | origin, target domain] matches any duplet in the database, then a | |||
DNT:0 header is sent, otherwise DNT:1 is sent. | DNT:0 preference is sent, otherwise the user's general preference is | |||
sent (if any). | ||||
A pair of duplets [A,B] and [X,Y] match if A matches X and B matches Y. A | A pair of duplets [A,B] and [X,Y] match if A matches X and B matches Y. A | |||
pair of values A and X match if and only if one of the following is true: | pair of values A and X match if and only if one of the following is true: | |||
* either A or X is "*"; | * either A or X is "*"; | |||
* A and X are the same string; | * A and X are the same string; | |||
* A has the form '*.domain' and X is 'domain' or is of the form | * A has the form '*.domain' and X is 'domain' or is of the form | |||
'string.domain', where 'string' is any sequence of characters. | 'string.domain', where 'string' is any sequence of characters. | |||
In addition, responses to the JavaScript API indicated should be | In addition, responses to the JavaScript API indicated should be | |||
skipping to change at line 1337 | skipping to change at line 1358 | |||
Parameter Type Nullable Optional Description | Parameter Type Nullable Optional Description | |||
properties StoreSiteSpecificExceptionPropertyBag * * | properties StoreSiteSpecificExceptionPropertyBag * * | |||
Return type: void | Return type: void | |||
dictionary StoreExceptionPropertyBag { | dictionary StoreExceptionPropertyBag { | |||
DOMString? domain; | DOMString? domain; | |||
DOMString? siteName; | DOMString? siteName; | |||
DOMString? explanationString; | DOMString? explanationString; | |||
DOMString? detailURI; | DOMString? detailURI; | |||
DOMString? expires; | ||||
long? maxAge; | ||||
}; | }; | |||
detailURI of type DOMString, nullable | detailURI of type DOMString, nullable | |||
A location at which further information about this request can be | A location at which further information about this request can be | |||
found. | found. | |||
domain of type DOMString, nullable | domain of type DOMString, nullable | |||
Cookie-like domain string to which the exception applies. | a cookie-domain as defined in [RFC6265], to which the exception | |||
applies. | ||||
expires of type DOMString, nullable | ||||
A date and time, encoded as described for the cookie Expires | ||||
attribute described in [RFC6265], indicating the maximum lifetime | ||||
of the remembered grant. | ||||
explanationString of type DOMString, nullable | explanationString of type DOMString, nullable | |||
A short explanation of the request. | A short explanation of the request. | |||
maxAge of type long, nullable | ||||
A positive number of seconds indicating the maximum lifetime of | ||||
the remembered grant. | ||||
siteName of type DOMString, nullable | siteName of type DOMString, nullable | |||
A user-readable string for the name of the top-level origin. | A user-readable string for the name of the top-level origin. | |||
dictionary StoreSiteSpecificExceptionPropertyBag : StoreExceptionPropertyBag { | dictionary StoreSiteSpecificExceptionPropertyBag : StoreExceptionPropertyBag { | |||
sequence<DOMString> arrayOfDomainStrings; | sequence<DOMString> arrayOfDomainStrings; | |||
}; | }; | |||
arrayOfDomainStrings of type sequence<DOMString> | arrayOfDomainStrings of type sequence<DOMString> | |||
A JavaScript array of strings. | A JavaScript array of strings. | |||
skipping to change at line 1401 | skipping to change at line 1434 | |||
If domain is supplied and not empty then it is treated in the same way as | If domain is supplied and not empty then it is treated in the same way as | |||
the domain parameter to cookies and allows setting for subdomains. The | the domain parameter to cookies and allows setting for subdomains. The | |||
domain argument can be set to fully-qualified right-hand segment of the | domain argument can be set to fully-qualified right-hand segment of the | |||
document host name, up to one level below TLD. | document host name, up to one level below TLD. | |||
For example, www.foo.bar.example.com may set the domain parameter as as | For example, www.foo.bar.example.com may set the domain parameter as as | |||
"bar.example.com" or "example.com", but not to | "bar.example.com" or "example.com", but not to | |||
"something.else.example.com" or "com". | "something.else.example.com" or "com". | |||
If the document-origin would not be able to set a cookie on the domain | If the document-origin would not be able to set a cookie on the domain | |||
following the cookie domain rules [COOKIES] (e.g. domain is not a | following the cookie domain rules [RFC6265] (e.g. domain is not a | |||
right-hand match or is a TLD) then the duplet MUST NOT be entered into the | right-hand match or is a TLD) then the duplet MUST NOT be entered into the | |||
database and a SYNTAX_ERR exception SHOULD be thrown. | database and a SYNTAX_ERR exception SHOULD be thrown. | |||
If permission is stored for an explicit list, then the set of duplets (one | If permission is stored for an explicit list, then the set of duplets (one | |||
per target): | per target): | |||
[*.domain, target] | [*.domain, target] | |||
is added to the database of remembered grants. | is added to the database of remembered grants. | |||
If permission is stored for a site-wide exception, then the duplet: | If permission is stored for a site-wide exception, then the duplet: | |||
[*.domain, * ] | [*.domain, * ] | |||
is added to the database of remembered grants. | is added to the database of remembered grants. | |||
A particular response to the API - like a DNT response header - is only | A particular response to the API - like a DNT response header - is only | |||
valid immediately, and users may choose to edit the list of stored | valid immediately, and users may choose to edit the list of stored | |||
exceptions and revoke some or all of them. | exceptions and revoke some or all of them. | |||
If expires is supplied and not null or empty the remembered grant will be | ||||
cancelled (i.e. processed as if the relevant Cancel API had been called) | ||||
no later than the specified date and time. After this the database of | ||||
remembered grants will no longer contain any duplets for which the first | ||||
part is the current document origin; i.e., no duplets [document-origin, | ||||
target] for any target. | ||||
If maxAge is supplied and not null, empty or negative the remembered grant | ||||
will be cancelled (i.e. processed as if the relevant Cancel API had been | ||||
called) no later than the specified number of seconds following the grant. | ||||
If both maxAge and expires are supplied, maxAge has precedence. If neither | ||||
maxAge or expires are supplied, the user agent MAY retain the remembered | ||||
grant until it is cancelled. | ||||
7.4.2 API to Cancel a Site-specific Exception | 7.4.2 API to Cancel a Site-specific Exception | |||
partial interface Navigator { | partial interface Navigator { | |||
void removeSiteSpecificTrackingException (RemoveExceptionPropertyBag proper ties); | void removeSiteSpecificTrackingException (RemoveExceptionPropertyBag proper ties); | |||
}; | }; | |||
removeSiteSpecificTrackingException | removeSiteSpecificTrackingException | |||
If domain is not supplied or is null or empty then this ensures | If domain is not supplied or is null or empty then this ensures | |||
that the database of remembered grants no longer contains any | that the database of remembered grants no longer contains any | |||
skipping to change at line 1454 | skipping to change at line 1502 | |||
Parameter Type Nullable Optional Description | Parameter Type Nullable Optional Description | |||
properties RemoveExceptionPropertyBag * * | properties RemoveExceptionPropertyBag * * | |||
Return type: void | Return type: void | |||
dictionary RemoveExceptionPropertyBag { | dictionary RemoveExceptionPropertyBag { | |||
DOMString? domain; | DOMString? domain; | |||
}; | }; | |||
domain of type DOMString, nullable | domain of type DOMString, nullable | |||
Cookie-like domain string to which the exception applies. | a cookie-domain as defined in [RFC6265], to which the exception | |||
applies. | ||||
When this method returns the database of grants no longer contains the | When this method returns the database of grants no longer contains the | |||
indicated grant(s); if some kind of processing error occurred then an | indicated grant(s); if some kind of processing error occurred then an | |||
appropriate exception will be thrown. | appropriate exception will be thrown. | |||
If there are no matching duplets in the database of remembered grants when | If there are no matching duplets in the database of remembered grants when | |||
the method is called then this operation does nothing (and does not throw | the method is called then this operation does nothing (and does not throw | |||
an exception). | an exception). | |||
7.4.3 API to Confirm a Site-specific Exception | 7.4.3 API to Confirm a Site-specific Exception | |||
skipping to change at line 1483 | skipping to change at line 1532 | |||
Parameter Type Nullable Optional Description | Parameter Type Nullable Optional Description | |||
properties ConfirmSiteSpecificExceptionPropertyBag * * | properties ConfirmSiteSpecificExceptionPropertyBag * * | |||
Return type: boolean | Return type: boolean | |||
dictionary ConfirmExceptionPropertyBag { | dictionary ConfirmExceptionPropertyBag { | |||
DOMString? domain; | DOMString? domain; | |||
}; | }; | |||
domain of type DOMString, nullable | domain of type DOMString, nullable | |||
Cookie-like domain string to which the exception applies. | a cookie-domain as defined in [RFC6265], to which the exception | |||
applies. | ||||
dictionary ConfirmSiteSpecificExceptionPropertyBag : ConfirmExceptionPropertyBa g { | dictionary ConfirmSiteSpecificExceptionPropertyBag : ConfirmExceptionPropertyBa g { | |||
sequence<DOMString> arrayOfDomainStrings; | sequence<DOMString> arrayOfDomainStrings; | |||
}; | }; | |||
arrayOfDomainStrings of type sequence<DOMString> | arrayOfDomainStrings of type sequence<DOMString> | |||
A JavaScript array of strings. | A JavaScript array of strings. | |||
If the call does not include the arrayOfDomainStrings, then this call is | If the call does not include the arrayOfDomainStrings, then this call is | |||
to confirm a site-wide exception. Otherwise each string in | to confirm a site-wide exception. Otherwise each string in | |||
skipping to change at line 1608 | skipping to change at line 1658 | |||
7.6 Transfer of an exception to another third party | 7.6 Transfer of an exception to another third party | |||
A site may request an exception for one or more third party services used | A site may request an exception for one or more third party services used | |||
in conjunction with its own offer. Those third party services may wish to | in conjunction with its own offer. Those third party services may wish to | |||
use other third parties to complete the request in a chain of | use other third parties to complete the request in a chain of | |||
interactions. The first party will not necessarily know in advance whether | interactions. The first party will not necessarily know in advance whether | |||
a known third party will use some other third parties. | a known third party will use some other third parties. | |||
If a user agent sends a tracking exception to a given combination of | If a user agent sends a tracking exception to a given combination of | |||
origin server and a named third party, the user agent will send DNT:0 to | origin server and a named third party, the user agent will send DNT:0 to | |||
that named third party. By receiving the DNT:0 header, the named third | that named third party. By receiving the DNT:0 preference, the named third | |||
party acquires the permission to track the user agent and collect the data | party acquires the permission to track the user agent and collect the data | |||
and process it in any way allowed by the legal system it is operating in. | and process it in any way allowed by the legal system it is operating in. | |||
Furthermore, the named third party receiving the DNT:0 header acquires at | Furthermore, the named third party receiving the DNT:0 header acquires at | |||
least the right to collect data and process it for the given interaction | least the right to collect data and process it for the given interaction | |||
and any other use unless it receives a DNT:1 header from that particular | and any other use unless it receives a DNT:1 from that particular | |||
identified user agent. | identified user agent. | |||
The named third party is also allowed to transmit the collected data for | The named third party is also allowed to transmit the collected data for | |||
uses related to this interaction to its own sub-services and | uses related to this interaction to its own sub-services and | |||
sub-sub-services (transitive permission). The tracking permission request | sub-sub-services (transitive permission). The tracking permission request | |||
triggered by the origin server is thus granted to the named third party | triggered by the origin server is thus granted to the named third party | |||
and its sub-services. This is even true for sub-services that would | and its sub-services. This is even true for sub-services that would | |||
normally receive a DNT:1 web-wide preference from the user agent if the | normally receive a DNT:1 web-wide preference from the user agent if the | |||
user agent interacted with this service directly. | user agent interacted with this service directly. | |||
For advertisement networks this typically would mean that the collection | For advertisement networks this typically would mean that the collection | |||
and auction system chain can use the data for that interaction and combine | and auction system chain can use the data for that interaction and combine | |||
it with existing profiles and data. The sub-services to the named third | it with existing profiles and data. The sub-services to the named third | |||
party do not acquire an independent right to process the data for | party do not acquire an independent right to process the data for | |||
independent secondary uses unless they, themselves, receive a DNT:0 header | independent secondary uses unless they, themselves, receive a DNT:0 | |||
from the user agent (as a result of their own request or the request of a | preference from the user agent (as a result of their own request or the | |||
first-party). In our example of advertisement networks that means the | request of a first-party). In our example of advertisement networks that | |||
sub-services can use existing profiles in combination with the data | means the sub-services can use existing profiles in combination with the | |||
received, but they can not store the received information into a profile | data received, but they can not store the received information into a | |||
until they have received a DNT:0 of their own. | profile until they have received a DNT:0 of their own. | |||
A named third party acquiring an exception with this mechanism MUST make | A named third party acquiring an exception with this mechanism MUST make | |||
sure that sub-services it uses acknowledge this constraint by requiring | sure that sub-services it uses acknowledge this constraint by requiring | |||
the use of the appropriate tracking status value of 'C' (consent), and the | the use of the appropriate tracking status value of 'C' (consent), and an | |||
qualifier "t", from its sub-sub-services. | appropriate qualifier defined by the compliance regime(s) that they | |||
operate under that indicates this transfer; the qualifier "t" | ||||
(transferred) is suggested. | ||||
The permission acquired by the DNT mechanism does not override retention | The permission acquired by the DNT mechanism does not override retention | |||
limitations found in the legal system the content provider or the named | limitations found in the legal system the content provider or the named | |||
third party are operating in. | third party are operating in. | |||
7.7 User interface guidelines | 7.7 User interface guidelines | |||
This section is non-normative. | This section is non-normative. | |||
As described above, it is the responsibility solely of the site making the | As described above, it is the responsibility solely of the site making the | |||
skipping to change at line 1663 | skipping to change at line 1715 | |||
It is expected that the site will explain, in its online content, the need | It is expected that the site will explain, in its online content, the need | |||
for an exception, and the consequences of granting or denying an | for an exception, and the consequences of granting or denying an | |||
exception, to the user. | exception, to the user. | |||
User agents are free to implement exception management user interfaces as | User agents are free to implement exception management user interfaces as | |||
they see fit. Some agents might provide a notification to the user at the | they see fit. Some agents might provide a notification to the user at the | |||
time of the request, or even not complete the storing of the exception | time of the request, or even not complete the storing of the exception | |||
until the user approves. Some agents might provide a user-interface to see | until the user approves. Some agents might provide a user-interface to see | |||
and edit the database of recorded exception grants. The API parameters | and edit the database of recorded exception grants. The API parameters | |||
siteName, explanationString, and detailURI are provided so that the user | siteName, explanationString, and detailURI are provided so that the user | |||
agent may use them in their user interface. | agent may use them in their user interface. If user-agents present this to | |||
the user, it should be clear that they are claims by the site, and might | ||||
be written to mislead. | ||||
A user agent that chooses to highlight when tracking exceptions have been | A user agent that chooses to highlight when tracking exceptions have been | |||
stored might provide an interface like the following. | stored might provide an interface like the following. | |||
* an icon in the status bar indicating that an exception has been | * an icon in the status bar indicating that an exception has been | |||
stored, which, when clicked on, gives the user more information about | stored, which, when clicked on, gives the user more information about | |||
the exception and an option to revoke such an exception. | the exception and an option to revoke such an exception. | |||
* an infobar stating "Example News (news.example.com) has indicated to | * an infobar stating "Example News (news.example.com) has indicated to | |||
Browser that you have consented to granting it exceptions to your | Browser that you have consented to granting it exceptions to your | |||
general Do Not Track preference. If you believe this is incorrect, | general Do Not Track preference. If you believe this is incorrect, | |||
skipping to change at line 1723 | skipping to change at line 1777 | |||
Sites might wish to request exceptions even when a user arrives without a | Sites might wish to request exceptions even when a user arrives without a | |||
DNT header. Users might wish to grant affirmative permission to tracking | DNT header. Users might wish to grant affirmative permission to tracking | |||
on or by certain sites even without expressing general tracking | on or by certain sites even without expressing general tracking | |||
preferences. | preferences. | |||
User agents MAY instantiate navigator.storeSiteSpecificTrackingException | User agents MAY instantiate navigator.storeSiteSpecificTrackingException | |||
even when window.doNotTrack is null. Scripts SHOULD test for the existence | even when window.doNotTrack is null. Scripts SHOULD test for the existence | |||
of storeSiteSpecificTrackingException before calling the method. If an | of storeSiteSpecificTrackingException before calling the method. If an | |||
exception is granted and the user agent stores that preference, a user | exception is granted and the user agent stores that preference, a user | |||
agent may send a DNT:0 header field even if a tracking preference isn't | agent may send the DNT:0 tracking preference even if it has not enabled | |||
expressed for other requests. Persisted preferences MAY also affect which | preferences to be sent for other requests. Persisted preferences MAY | |||
header is transmitted if a user later chooses to express a tracking | affect which preference is transmitted if a user later chooses to express | |||
preference. | a tracking preference. | |||
Note | Note | |||
Users might not configure their agents to have simple values for DNT, but | Users might not configure their agents to have simple values for DNT, but | |||
use different browsing modes or other contextual information to decide on | use different browsing modes or other contextual information to decide on | |||
a DNT value. What algorithm a user agent employs to determine DNT values | a DNT value. What algorithm a user agent employs to determine DNT values | |||
(or the lack thereof) is out of the scope of this specification. | (or the lack thereof) is out of the scope of this specification. | |||
7.10 Exception use by sites | 7.10 Exception use by sites | |||
skipping to change at line 1753 | skipping to change at line 1807 | |||
The 'Store' calls do not have a return value, and return immediately. If | The 'Store' calls do not have a return value, and return immediately. If | |||
there is a problem with the calling parameters, then a Javascript | there is a problem with the calling parameters, then a Javascript | |||
exception will be raised. In addition, it may be that the user agent does | exception will be raised. In addition, it may be that the user agent does | |||
not immediately store the exception, possibly because it is allowing the | not immediately store the exception, possibly because it is allowing the | |||
user to confirm. Even though the site has acquired the user's informed | user to confirm. Even though the site has acquired the user's informed | |||
consent before calling the 'Store' API, it is possible that the user will | consent before calling the 'Store' API, it is possible that the user will | |||
change their mind, and allow the store to proceed but then later ask it be | change their mind, and allow the store to proceed but then later ask it be | |||
removed, or even by denying the storage in the first place. | removed, or even by denying the storage in the first place. | |||
Sites can call the 'Confirm' APIs to enquire whether a specific exception | Nonetheless, at the time of the call the site has acquired the user's | |||
has been granted and stands in the user agent. This is the call to make to | consent, and can proceed on that basis, whether or not the user-agent has | |||
determine whether the exception exists, and hence to control access to the | stored the exception immediately. It is not necessary to call the confirm | |||
function or operation; if it fails (the exception has been deleted, or not | API at the time of consent. | |||
yet granted), then the user is ideally again offered the information | ||||
needed to give their informed consent, and again offered the opportunity | On other visits, sites can call the 'Confirm' APIs to enquire whether a | |||
to indicate that they grant it. As stated in the normative text, the site | specific exception has been granted and stands in the user agent. This is | |||
needs to explain and acquire consent immediately prior to calling the | the call to make to determine whether the exception exists, and hence to | |||
Store API, and not remember some past consent; this allows the user to | control access to the function or operation; if it fails (the exception | |||
change their mind. | has been deleted, or not yet granted), then the user is ideally again | |||
offered the information needed to give their informed consent, and again | ||||
offered the opportunity to indicate that they grant it. As stated in the | ||||
normative text, the site needs to explain and acquire consent immediately | ||||
prior to calling the Store API, and not remember some past consent; this | ||||
allows the user to change their mind. | ||||
If they do grant it (using some positive interaction such as a button), | If they do grant it (using some positive interaction such as a button), | |||
the site can return to checking the 'Confirm' API. | the site can return to checking the 'Confirm' API. | |||
In this way the site: | In this way the site: | |||
* does not assume that the storage is instantaneous, and mistakenly | * does not assume that the storage is instantaneous, and mistakenly | |||
grant access when the exception does not (yet) stand; | grant access when the exception does not (yet) stand; | |||
* does not call the Confirm API repeatedly without a user-interaction | * does not call the Confirm API repeatedly without a user-interaction | |||
between each call, in a loop; | between each call, in a loop; | |||
skipping to change at line 1861 | skipping to change at line 1920 | |||
Restrictions on usage: | Restrictions on usage: | |||
N/A | N/A | |||
Author(s): | Author(s): | |||
Roy T. Fielding and David Singer | Roy T. Fielding and David Singer | |||
Change controller: | Change controller: | |||
W3C | W3C | |||
ReSpec | ||||
Save SnapshotAbout ReSpecSearch Specref DB | ||||
C. References | C. References | |||
C.1 Normative references | C.1 Normative references | |||
[ABNF] | [HTML5] | |||
D. Crocker; P. Overell. Augmented BNF for Syntax Specifications: | Ian Hickson; Robin Berjon; Steve Faulkner; Travis Leithead; Erika | |||
ABNF. January 2008. STD. URL: http://www.ietf.org/rfc/rfc5234.txt | Doyle Navara; Edward O'Connor; Silvia Pfeiffer. HTML5. 28 October | |||
2014. W3C Recommendation. URL: http://www.w3.org/TR/html5/ | ||||
[COOKIES] | ||||
A. Barth. HTTP State Management Mechanism. April 2011. RFC. URL: | ||||
http://www.ietf.org/rfc/rfc6265.txt | ||||
[HTTP] | [RFC2119] | |||
Roy T. Fielding; Julian Reschke. Hypertext Transfer Protocol | S. Bradner. Key words for use in RFCs to Indicate Requirement | |||
(HTTP/1.1): Message Syntax and Routing. 6 February 2014. | Levels. March 1997. Best Current Practice. URL: | |||
Internet-Draft. URL: | https://tools.ietf.org/html/rfc2119 | |||
http://datatracker.ietf.org/doc/draft-ietf-httpbis-p1-messaging/ | ||||
[HTTP-cache] | [RFC3986] | |||
Roy T. Fielding; Mark Nottingham; Julian Reschke. Hypertext | T. Berners-Lee; R. Fielding; L. Masinter. Uniform Resource | |||
Transfer Protocol (HTTP/1.1): Caching. 6 February 2014. | Identifier (URI): Generic Syntax. January 2005. Internet Standard. | |||
Internet-Draft. URL: | URL: https://tools.ietf.org/html/rfc3986 | |||
http://datatracker.ietf.org/doc/draft-ietf-httpbis-p6-cache/ | ||||
[HTTP-semantics] | [RFC5234] | |||
Roy T. Fielding; Julian Reschke. Hypertext Transfer Protocol | D. Crocker, Ed.; P. Overell. Augmented BNF for Syntax | |||
(HTTP/1.1): Semantics and Content. 6 February 2014. | Specifications: ABNF. January 2008. Internet Standard. URL: | |||
Internet-Draft. URL: | https://tools.ietf.org/html/rfc5234 | |||
http://datatracker.ietf.org/doc/draft-ietf-httpbis-p2-semantics/ | ||||
[RFC2119] | [RFC6265] | |||
S. Bradner. Key words for use in RFCs to Indicate Requirement | A. Barth. HTTP State Management Mechanism. April 2011. Proposed | |||
Levels. March 1997. Internet RFC 2119. URL: | Standard. URL: https://tools.ietf.org/html/rfc6265 | |||
http://www.ietf.org/rfc/rfc2119.txt | ||||
[RFC7159] | [RFC7159] | |||
Tim Bray, Ed.. The JavaScript Object Notation (JSON) Data | T. Bray, Ed.. The JavaScript Object Notation (JSON) Data | |||
Interchange Format. March 2014. Internet RFC 7159. URL: | Interchange Format. March 2014. Proposed Standard. URL: | |||
http://www.rfc-editor.org/rfc/rfc7159.txt | https://tools.ietf.org/html/rfc7159 | |||
[RFC7230] | ||||
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol | ||||
(HTTP/1.1): Message Syntax and Routing. June 2014. Proposed | ||||
Standard. URL: https://tools.ietf.org/html/rfc7230 | ||||
[RFC7231] | ||||
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol | ||||
(HTTP/1.1): Semantics and Content. June 2014. Proposed Standard. | ||||
URL: https://tools.ietf.org/html/rfc7231 | ||||
[RFC7234] | ||||
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. Hypertext | ||||
Transfer Protocol (HTTP/1.1): Caching. June 2014. Proposed | ||||
Standard. URL: https://tools.ietf.org/html/rfc7234 | ||||
[WEBIDL] | [WEBIDL] | |||
Cameron McCormack. Web IDL. 19 April 2012. W3C Candidate | Cameron McCormack. Web IDL. 19 April 2012. W3C Candidate | |||
Recommendation. URL: http://www.w3.org/TR/WebIDL/ | Recommendation. URL: http://www.w3.org/TR/WebIDL/ | |||
C.2 Informative references | C.2 Informative references | |||
[KnowPrivacy] | [KnowPrivacy] | |||
Joshua Gomez; Travis Pinnick; Ashkan Soltani. KnowPrivacy. 1 June | Joshua Gomez; Travis Pinnick; Ashkan Soltani. KnowPrivacy. 1 June | |||
2009. URL: | 2009. URL: | |||
http://www.knowprivacy.org/report/KnowPrivacy_Final_Report.pdf | http://www.knowprivacy.org/report/KnowPrivacy_Final_Report.pdf | |||
[RFC5785] | [RFC5785] | |||
Mark Nottingham; Eran Hammer-Lahav. Defining Well-Known Uniform | M. Nottingham; E. Hammer-Lahav. Defining Well-Known Uniform | |||
Resource Identifiers (URIs) (RFC 5785). April 2010. RFC. URL: | Resource Identifiers (URIs). April 2010. Proposed Standard. URL: | |||
http://www.rfc-editor.org/rfc/rfc5785.txt | https://tools.ietf.org/html/rfc5785 | |||
[RFC6570] | ||||
J. Gregorio; R. Fielding; M. Hadley; M. Nottingham; D. Orchard. | ||||
URI Template. March 2012. Proposed Standard. URL: | ||||
https://tools.ietf.org/html/rfc6570 | ||||
[TCS] | [TCS] | |||
Heather West; Justin Brookman; Sean Harvey; Erica Newland. | Heather West; Justin Brookman; Sean Harvey; Erica Newland. | |||
Tracking Compliance and Scope. 08 April 2014. W3C Editor's Draft. | Tracking Compliance and Scope. 08 May 2014. W3C Editor's Draft. | |||
URL: | URL: | |||
http://www.w3.org/2011/tracking-protection/drafts/tracking-compliance .html | http://www.w3.org/2011/tracking-protection/drafts/tracking-compliance .html | |||
[URI-TEMPLATE] | ||||
Joe Gregorio; Roy T. Fielding; Marc Hadley; Mark Nottingham; David | ||||
Orchard. URI Template. March 2012. RFC 6570. URL: | ||||
http://www.rfc-editor.org/rfc/rfc6570.txt | ||||
End of changes. 62 change blocks. | ||||
183 lines changed or deleted | 258 lines changed or added | |||
This html diff was produced by rfcdiff 1.40. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |