| < draft-ietf-doh-dns-over-https-03.txt | draft-ietf-doh-dns-over-https-04.txt > | |||
|---|---|---|---|---|
| Network Working Group P. Hoffman | Network Working Group P. Hoffman | |||
| Internet-Draft ICANN | Internet-Draft ICANN | |||
| Intended status: Standards Track P. McManus | Intended status: Standards Track P. McManus | |||
| Expires: August 6, 2018 Mozilla | Expires: September 22, 2018 Mozilla | |||
| February 02, 2018 | March 21, 2018 | |||
| DNS Queries over HTTPS | DNS Queries over HTTPS | |||
| draft-ietf-doh-dns-over-https-03 | draft-ietf-doh-dns-over-https-04 | |||
| Abstract | Abstract | |||
| DNS queries sometimes experience problems with end to end | ||||
| connectivity at times and places where HTTPS flows freely. | ||||
| HTTPS provides the most practical mechanism for reliable end to end | ||||
| communication. Its use of TLS provides integrity and confidentiality | ||||
| guarantees and its use of HTTP allows it to interoperate with | ||||
| proxies, firewalls, and authentication systems where required for | ||||
| transit. | ||||
| This document describes how to run DNS service over HTTP using | This document describes how to run DNS service over HTTP using | |||
| https:// URIs. | https:// URIs. | |||
| [[ There is a repository for this draft at https://github.com/dohwg/ | [[ There is a repository for this draft at https://github.com/dohwg/ | |||
| draft-ietf-doh-dns-over-https [1] ]]. | draft-ietf-doh-dns-over-https [1] ]]. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 35 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on August 6, 2018. | This Internet-Draft will expire on September 22, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 4 | 3.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 5 | 4. The HTTP Request . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. The HTTP Request . . . . . . . . . . . . . . . . . . . . . . 5 | 4.1. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.1. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . 6 | 4.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. The HTTP Response . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6. The HTTP Response . . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 6. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 7. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Cache Interaction . . . . . . . . . . . . . . . . . . . . 8 | |||
| 7.1. Cache Interaction . . . . . . . . . . . . . . . . . . . . 9 | 6.2. HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7.2. HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.3. Server Push . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7.3. Server Push . . . . . . . . . . . . . . . . . . . . . . . 10 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 7.1. Registration of application/dns-udpwireformat Media Type 10 | |||
| 8.1. Registration of application/dns-udpwireformat Media Type 10 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 9. Operational Considerations . . . . . . . . . . . . . . . . . 13 | |||
| 10. Operational Considerations . . . . . . . . . . . . . . . . . 13 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 14 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 11.2. Informative References . . . . . . . . . . . . . . . . . 15 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 15 | 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 12.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | Appendix A. Previous Work on DNS over HTTP or in Other Formats . 16 | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats . 15 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 1. Introduction | 1. Introduction | |||
| The Internet does not always provide end to end reachability for | The Internet does not always provide end to end reachability for | |||
| native DNS. On-path network devices may spoof DNS responses, block | native DNS. On-path network devices may spoof DNS responses, block | |||
| DNS requests, or just redirect DNS queries to different DNS servers | DNS requests, or just redirect DNS queries to different DNS servers | |||
| that give less-than-honest answers. | that give less-than-honest answers. These are also sometimes | |||
| delivered with poor performance or reduced feature sets. | ||||
| Over time, there have been many proposals for using HTTP and HTTPS as | Over time, there have been many proposals for using HTTP and HTTPS as | |||
| a substrate for DNS queries and responses. To date, none of those | a substrate for DNS queries and responses. To date, none of those | |||
| proposals have made it beyond early discussion, partially due to | proposals have made it beyond early discussion, partially due to | |||
| disagreement about what the appropriate formatting should be and | disagreement about what the appropriate formatting should be and | |||
| partially because they did not follow HTTP best practices. | partially because they did not follow HTTP best practices. | |||
| This document defines a specific protocol for sending DNS [RFC1035] | This document defines a specific protocol for sending DNS [RFC1035] | |||
| queries and getting DNS responses over HTTP [RFC7540] using https:// | queries and getting DNS responses over HTTP [RFC7540] using https:// | |||
| (and therefore TLS [RFC5246] security for integrity and | (and therefore TLS [RFC5246] security for integrity and | |||
| confidentiality). Each DNS query-response pair is mapped into a HTTP | confidentiality). Each DNS query-response pair is mapped into a HTTP | |||
| request-response pair. | request-response pair. | |||
| The described approach is more than a tunnel over HTTP. It | The described approach is more than a tunnel over HTTP. It | |||
| establishes default media formatting types for requests and responses | establishes default media formatting types for requests and responses | |||
| but uses normal HTTP content negotiation mechanisms for selecting | but uses normal HTTP content negotiation mechanisms for selecting | |||
| alternatives that endpoints may prefer in anticipation of serving new | alternatives that endpoints may prefer in anticipation of serving new | |||
| use cases. In addition to this media type negotiation, it aligns | use cases. In addition to this media type negotiation, it aligns | |||
| itself with HTTP features such as caching, proxying, and compression. | itself with HTTP features such as caching, redirection, proxying, | |||
| authentication, and compression. | ||||
| The integration with HTTP provides a transport suitable for both | The integration with HTTP provides a transport suitable for both | |||
| traditional DNS clients and native web applications seeking access to | traditional DNS clients and native web applications seeking access to | |||
| the DNS. | the DNS. | |||
| Two primary uses cases were considered during this protocol's | ||||
| development. They included preventing on-path devices from | ||||
| interfering with DNS operations and allowing web applications to | ||||
| access DNS information via existing browser APIs in a safe way | ||||
| consistent with Cross Origin Resource Sharing (CORS) [CORS]. There | ||||
| are certainly other uses for this work. | ||||
| 2. Terminology | 2. Terminology | |||
| A server that supports this protocol is called a "DNS API server" to | A server that supports this protocol is called a "DNS API server" to | |||
| differentiate it from a "DNS server" (one that uses the regular DNS | differentiate it from a "DNS server" (one that uses the regular DNS | |||
| protocol). Similarly, a client that supports this protocol is called | protocol). Similarly, a client that supports this protocol is called | |||
| a "DNS API client". | a "DNS API client". | |||
| In this document, the key words "MUST", "MUST NOT", "REQUIRED", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| [RFC2119]. | 14, RFC8174 [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | ||||
| 3. Use Cases | ||||
| There are two initial use cases for this protocol. | ||||
| The primary use case is to prevent on-path network devices from | ||||
| interfering with DNS operations. This interference includes, but is | ||||
| not limited to, spoofing DNS responses, blocking DNS requests, and | ||||
| tracking. | ||||
| In this use, clients - whether operating systems or individual | ||||
| applications - will be explicitly configured to use a DOH server as a | ||||
| recursive resolver by its user (or administrator). They might use | ||||
| the DOH server for all queries, or only for a subset of them. The | ||||
| specific configuration mechanism is out of scope for this document. | ||||
| A secondary use case is allowing web applications to access DNS | ||||
| information, by using existing APIs in browsers to access it over | ||||
| HTTP in a safe way consistent with Cross Origin Resource Sharing | ||||
| (CORS) [CORS]. | ||||
| This is technically already possible (since the server controls both | ||||
| the HTTP resources it exposes and the use of browser APIs by its | ||||
| content), but standardization might make this easier to accomplish. | ||||
| Note that in this second use, the browser does not consult the DOH | ||||
| server or use its responses for any DNS lookups outside the scope of | ||||
| the application using them; i.e., there is (currently) no API that | ||||
| allows a Web site to poison DNS for others. | ||||
| [[ This paragraph is to be removed when this document is published as | ||||
| an RFC ]] Note that these use cases are different than those in a | ||||
| similar protocol described at [I-D.ietf-dnsop-dns-wireformat-http]. | ||||
| The use case for that protocol is proxying DNS queries over HTTP | ||||
| instead of over DNS itself. The use cases in this document all | ||||
| involve query origination instead of proxying. | ||||
| 4. Protocol Requirements | 3. Protocol Requirements | |||
| The protocol described here bases its design on the following | The protocol described here bases its design on the following | |||
| protocol requirements: | protocol requirements: | |||
| o The protocol must use normal HTTP semantics. | o The protocol must use normal HTTP semantics. | |||
| o The queries and responses must be able to be flexible enough to | o The queries and responses must be able to be flexible enough to | |||
| express every normal DNS query. | express every normal DNS query. | |||
| o The protocol must allow implementations to use HTTP's content | o The protocol must allow implementations to use HTTP's content | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 4, line 14 ¶ | |||
| o The protocol must ensure interoperable media formats through a | o The protocol must ensure interoperable media formats through a | |||
| mandatory to implement format wherein a query must be able to | mandatory to implement format wherein a query must be able to | |||
| contain future modifications to the DNS protocol including the | contain future modifications to the DNS protocol including the | |||
| inclusion of one or more EDNS extensions (including those not yet | inclusion of one or more EDNS extensions (including those not yet | |||
| defined). | defined). | |||
| o The protocol must use a secure transport that meets the | o The protocol must use a secure transport that meets the | |||
| requirements for HTTPS. | requirements for HTTPS. | |||
| 4.1. Non-requirements | 3.1. Non-requirements | |||
| o Supporting network-specific DNS64 [RFC6147] | o Supporting network-specific DNS64 [RFC6147] | |||
| o Supporting other network-specific inferences from plaintext DNS | o Supporting other network-specific inferences from plaintext DNS | |||
| queries | queries | |||
| o Supporting insecure HTTP | o Supporting insecure HTTP | |||
| o Supporting legacy HTTP versions | o Supporting legacy HTTP versions | |||
| 5. The HTTP Request | 4. The HTTP Request | |||
| To make a DNS API query a DNS API client encodes a single DNS query | To make a DNS API query a DNS API client encodes a single DNS query | |||
| into an HTTP request using either the HTTP GET or POST method and the | into an HTTP request using either the HTTP GET or POST method and the | |||
| other requirements of this section. The DNS API server defines the | other requirements of this section. The DNS API server defines the | |||
| URI used by the request. Configuration and discovery of the URI is | URI used by the request. Configuration and discovery of the URI is | |||
| done out of band from this protocol. | done out of band from this protocol. | |||
| When using the POST method the DNS query is included as the message | When using the POST method the DNS query is included as the message | |||
| body of the HTTP request and the Content-Type request header | body of the HTTP request and the Content-Type request header | |||
| indicates the media type of the message. POST-ed requests are | indicates the media type of the message. POST-ed requests are | |||
| smaller than their GET equivalents. | smaller than their GET equivalents. | |||
| When using the GET method the URI path MUST contain a query parameter | When using the GET method the URI path MUST contain a query parameter | |||
| with the name of "ct" and a value indicating the media-format used | name-value pair [QUERYPARAMETER] with the name of "ct" and a value | |||
| for the dns parameter. The value may either be an explicit media | indicating the media-format used for the dns parameter. The value | |||
| type (e.g. ct=application/dns-udpwireformat&dns=...) or it may be | may either be an explicit media type (e.g. ct=application/dns- | |||
| empty. An empty value indicates the default application/dns- | udpwireformat&dns=...) or it may be empty. An empty value indicates | |||
| udpwireformat type (e.g. ct&dns=...). | the default application/dns-udpwireformat type (e.g. ct&dns=...). | |||
| When using the GET method the URI path MUST contain a query parameter | When using the GET method the URI path MUST contain a query parameter | |||
| with the name of "dns". The value of the parameter is the content of | with the name of "dns". The value of the parameter is the content of | |||
| the request potentially encoded with base64url [RFC4648]. | the request potentially encoded with base64url [RFC4648]. | |||
| Specifications that define media types for use with DOH, such as DNS | Specifications that define media types for use with DOH, such as DNS | |||
| Wire Format Section 5.1 of this document, MUST indicate if the body | Wire Format Section 4.1 of this document, MUST indicate if the dns | |||
| parameter uses base64url encoding. | parameter uses base64url encoding. | |||
| Using the GET method is friendlier to many HTTP cache | Using the GET method is friendlier to many HTTP cache | |||
| implementations. | implementations. | |||
| The DNS API Client SHOULD include an HTTP "Accept:" request header to | The DNS API client SHOULD include an HTTP "Accept:" request header to | |||
| say what type of content can be understood in response. The client | say what type of content can be understood in response. The client | |||
| MUST be prepared to process "application/dns-udpwireformat" | MUST be prepared to process "application/dns-udpwireformat" | |||
| Section 5.1 responses but MAY process any other type it receives. | Section 4.1 responses but MAY process any other type it receives. | |||
| In order to maximize cache friendliness, DNS API clients using media | In order to maximize cache friendliness, DNS API clients using media | |||
| formats that include DNS ID, such as application/dns-udpwireformat, | formats that include DNS ID, such as application/dns-udpwireformat, | |||
| SHOULD use a DNS ID of 0 in every DNS request. HTTP correlates | SHOULD use a DNS ID of 0 in every DNS request. HTTP correlates | |||
| request and response, thus eliminating the need for the ID in a media | request and response, thus eliminating the need for the ID in a media | |||
| type such as application/dns-udpwireformat and the use of a varying | type such as application/dns-udpwireformat and the use of a varying | |||
| DNS ID can cause semantically equivalent DNS queries to be cached | DNS ID can cause semantically equivalent DNS queries to be cached | |||
| separately. | separately. | |||
| DNS API clients can use HTTP/2 padding and compression in the same | DNS API clients can use HTTP/2 padding and compression in the same | |||
| way that other HTTP/2 clients use (or don't use) them. | way that other HTTP/2 clients use (or don't use) them. | |||
| 5.1. DNS Wire Format | 4.1. DNS Wire Format | |||
| The media type is "application/dns-udpwireformat". | The data payload is the DNS on-the-wire format defined in [RFC1035]. | |||
| The format is for DNS over UDP. (Note that this is different than | ||||
| the wire format used in [RFC7858]. | ||||
| The body is the DNS on-the-wire format defined in [RFC1035]. | When using the GET method, the data payload MUST be encoded with | |||
| base64url [RFC4648] and then placed as a name value pair in the query | ||||
| portion of the URI with name "dns". Padding characters for base64url | ||||
| MUST NOT be included. | ||||
| When using the GET method, the body MUST be encoded with base64url | When using the POST method, the data payload MUST NOT be encoded and | |||
| [RFC4648] and then placed as a name value pair in the query portion | is used directly as the HTTP message body. | |||
| of the URI with name "dns". Padding characters for base64url MUST | ||||
| NOT be included. | ||||
| When using the POST method, the body MUST NOT be encoded. | DNS API clients using the DNS wire format MAY have one or more EDNS | |||
| extensions [RFC6891] in the request. | ||||
| DNS API clients using the DNS wire format MAY have one or more | The media type is "application/dns-udpwireformat". | |||
| EDNS(0) extensions [RFC6891] in the request. | ||||
| 5.2. Examples | 4.2. Examples | |||
| These examples use HTTP/2 style formatting from [RFC7540]. | These examples use HTTP/2 style formatting from [RFC7540]. | |||
| These examples use a DNS API service located at | These examples use a DNS API service located at | |||
| https://dnsserver.example.net/dns-query to resolve the IN A records. | https://dnsserver.example.net/dns-query to resolve the IN A records. | |||
| The requests are represented as application/dns-udpwirefomat typed | The requests are represented as application/dns-udpwirefomat typed | |||
| bodies, but the client indicates it can parse responses in either | bodies. | |||
| that format or as a hypothetical JSON-based content type. The | ||||
| application/simpledns+json type used by this example is currently | ||||
| fictitious. | ||||
| The first example request uses GET to request www.example.com | The first example request uses GET to request www.example.com | |||
| :method = GET | :method = GET | |||
| :scheme = https | :scheme = https | |||
| :authority = dnsserver.example.net | :authority = dnsserver.example.net | |||
| :path = /dns-query?ct& (no space or CR) | :path = /dns-query?ct& (no space or CR) | |||
| dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB | dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB | |||
| accept = application/dns-udpwireformat, application/simpledns+json | accept = application/dns-udpwireformat | |||
| The same DNS query for www.example.com, using the POST method would | The same DNS query for www.example.com, using the POST method would | |||
| be: | be: | |||
| :method = POST | :method = POST | |||
| :scheme = https | :scheme = https | |||
| :authority = dnsserver.example.net | :authority = dnsserver.example.net | |||
| :path = /dns-query | :path = /dns-query | |||
| accept = application/dns-udpwireformat, application/simpledns+json | accept = application/dns-udpwireformat | |||
| content-type = application/dns-udpwireformat | content-type = application/dns-udpwireformat | |||
| content-length = 33 | content-length = 33 | |||
| <33 bytes represented by the following hex encoding> | <33 bytes represented by the following hex encoding> | |||
| 00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77 | 00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77 | |||
| 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 | 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 | |||
| 01 | 01 | |||
| Finally, a GET based query for a.62characterlabel-makes-base64url- | Finally, a GET based query for a.62characterlabel-makes-base64url- | |||
| distinct-from-standard-base64.example.com is shown as an example to | distinct-from-standard-base64.example.com is shown as an example to | |||
| skipping to change at page 7, line 41 ¶ | skipping to change at page 6, line 51 ¶ | |||
| 61 6e 64 61 72 64 2d 62 61 73 65 36 34 07 65 78 | 61 6e 64 61 72 64 2d 62 61 73 65 36 34 07 65 78 | |||
| 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 | 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 | |||
| :method = GET | :method = GET | |||
| :scheme = https | :scheme = https | |||
| :authority = dnsserver.example.net | :authority = dnsserver.example.net | |||
| :path = /dns-query?ct& (no space or CR) | :path = /dns-query?ct& (no space or CR) | |||
| dns=AAABAAABAAAAAAAAAWE-NjJjaGFyYWN0ZXJsYWJl (no space or CR) | dns=AAABAAABAAAAAAAAAWE-NjJjaGFyYWN0ZXJsYWJl (no space or CR) | |||
| bC1tYWtlcy1iYXNlNjR1cmwtZGlzdGluY3QtZnJvbS1z (no space or CR) | bC1tYWtlcy1iYXNlNjR1cmwtZGlzdGluY3QtZnJvbS1z (no space or CR) | |||
| dGFuZGFyZC1iYXNlNjQHZXhhbXBsZQNjb20AAAEAAQ | dGFuZGFyZC1iYXNlNjQHZXhhbXBsZQNjb20AAAEAAQ | |||
| accept = application/dns-udpwireformat, application/simpledns+json | accept = application/dns-udpwireformat | |||
| 6. The HTTP Response | 5. The HTTP Response | |||
| An HTTP response with a 2xx status code ([RFC7231] Section 6.3) | ||||
| indicates a valid DNS response to the query made in the HTTP request. | ||||
| A valid DNS response includes both success and failure responses. | ||||
| For example, a DNS failure response such as SERVFAIL or NXDOMAIN will | ||||
| be the message in a successful 2xx HTTP response even though there | ||||
| was a failure at the DNS layer. Responses with non-successful HTTP | ||||
| status codes do not contain DNS answers to the question in the | ||||
| corresponding request. Some of these non-successful HTTP responses | ||||
| (e.g. redirects or authentication failures) could allow clients to | ||||
| make new requests to satisfy the original question. | ||||
| Different response media types will provide more or less information | Different response media types will provide more or less information | |||
| from a DNS response. For example, one response type might include | from a DNS response. For example, one response type might include | |||
| the information from the DNS header bytes while another might omit | the information from the DNS header bytes while another might omit | |||
| it. The amount and type of information that a media type gives is | it. The amount and type of information that a media type gives is | |||
| solely up to the format, and not defined in this protocol. | solely up to the format, and not defined in this protocol. | |||
| At the time this is published, the response types are works in | At the time this is published, the response types are works in | |||
| progress. The only response type defined in this document is | progress. The only response type defined in this document is | |||
| "application/dns-udpwireformat", but it is possible that at least one | "application/dns-udpwireformat", but it is possible that other | |||
| JSON-based response format will be defined in the future. | response formats will be defined in the future. | |||
| The DNS response for "application/dns-udpwireformat" in Section 5.1 | The DNS response for "application/dns-udpwireformat" in Section 4.1 | |||
| MAY have one or more EDNS(0) extensions, depending on the extension | MAY have one or more EDNS extensions, depending on the extension | |||
| definition of the extensions given in the DNS request. | definition of the extensions given in the DNS request. | |||
| Each DNS request-response pair is matched to one HTTP request- | Each DNS request-response pair is matched to one HTTP request- | |||
| response pair. The responses may be processed and transported in any | response pair. The responses may be processed and transported in any | |||
| order using HTTP's multi-streaming functionality ([RFC7540] | order using HTTP's multi-streaming functionality ([RFC7540] | |||
| Section 5}). | Section 5}). | |||
| The Answer section of a DNS response contains one or more RRsets. | The Answer section of a DNS response can contain zero or more RRsets. | |||
| (RRsets are defined in [RFC7719].) According to [RFC2181], each | (RRsets are defined in [RFC7719].) According to [RFC2181], each | |||
| resource record in an RRset is supposed to have the Time To Live | resource record in an RRset has Time To Live (TTL) freshness | |||
| (TTL) freshness information. Different RRsets in the Answer section | information. Different RRsets in the Answer section can have | |||
| can have different TTLs, though it is only possible for the HTTP | different TTLs, although it is only possible for the HTTP response to | |||
| response to have a single freshness lifetime. The HTTP response | have a single freshness lifetime. The HTTP response freshness | |||
| freshness lifetime ([RFC7234] Section 4.2) should be coordinated with | lifetime ([RFC7234] Section 4.2) should be coordinated with the RRset | |||
| the Resource Record bearing the smallest TTL in the Answer section of | with the smallest TTL in the Answer section of the response. | |||
| the response. Specifically, the HTTP freshness lifetime SHOULD be | Specifically, the HTTP freshness lifetime SHOULD be set to expire at | |||
| set to expire at the same time any of the DNS Records reach a 0 TTL. | the same time any of the DNS resource records in the Answer section | |||
| The response freshness lifetime MUST NOT be greater than that | reach a 0 TTL. The response freshness lifetime MUST NOT be greater | |||
| indicated by the DNS Record with the smallest TTL in the response. | than that indicated by the DNS resoruce record with the smallest TTL | |||
| in the response. | ||||
| A DNS API Client that receives a response without an explicit | If the DNS response has no records in the Answer section, and the DNS | |||
| response has an SOA record in the Authority section, the response | ||||
| freshness lifetime MUST NOT be greater than the MINIMUM field from | ||||
| that SOA record. Otherwise, the HTTP response MUST set a freshness | ||||
| lifetime ([RFC7234] Section 4.2) of 0 by using a mechanism such as | ||||
| "Cache-Control: no-cache" ([RFC7234] Section 5.2.1.4). | ||||
| A DNS API client that receives a response without an explicit | ||||
| freshness lifetime MUST NOT assign that response a heuristic | freshness lifetime MUST NOT assign that response a heuristic | |||
| freshness ([RFC7234] Section 4.2.2.) greater than that indicated by | freshness ([RFC7234] Section 4.2.2.) greater than that indicated by | |||
| the DNS Record with the smallest TTL in the response. | the DNS Record with the smallest TTL in the response. | |||
| A DNS API Server MUST be able to process application/dns- | A DNS API server MUST be able to process application/dns- | |||
| udpwireformat request messages. | udpwireformat request messages. | |||
| A DNS API Server SHOULD respond with HTTP status code 415 | A DNS API server SHOULD respond with HTTP status code 415 | |||
| (Unsupported Media Type) upon receiving a media type it is unable to | (Unsupported Media Type) upon receiving a media type it is unable to | |||
| process. | process. | |||
| This document does not change the definition of any HTTP response | This document does not change the definition of any HTTP response | |||
| codes or otherwise proscribe their use. | codes or otherwise proscribe their use. | |||
| 6.1. Example | 5.1. Example | |||
| This is an example response for a query for the IN A records for | This is an example response for a query for the IN A records for | |||
| "www.example.com" with recursion turned on. The response bears one | "www.example.com" with recursion turned on. The response bears one | |||
| record with an address of 192.0.2.1 and a TTL of 128 seconds. | record with an address of 192.0.2.1 and a TTL of 128 seconds. | |||
| :status = 200 | :status = 200 | |||
| content-type = application/dns-udpwireformat | content-type = application/dns-udpwireformat | |||
| content-length = 64 | content-length = 64 | |||
| cache-control = max-age=128 | cache-control = max-age=128 | |||
| <64 bytes represented by the following hex encoding> | <64 bytes represented by the following hex encoding> | |||
| 00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77 | 00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77 | |||
| 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 | 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 | |||
| 01 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f | 01 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f | |||
| 6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01 | 6d 00 00 01 00 01 00 00 00 80 00 04 C0 00 02 01 | |||
| 7. HTTP Integration | 6. HTTP Integration | |||
| This protocol MUST be used with the https scheme URI [RFC7230]. | This protocol MUST be used with the https scheme URI [RFC7230]. | |||
| 7.1. Cache Interaction | 6.1. Cache Interaction | |||
| A DOH API Client may utilize a hierarchy of caches that include both | A DOH API client may utilize a hierarchy of caches that include both | |||
| HTTP and DNS specific caches. HTTP cache entries may be bypassed | HTTP and DNS specific caches. HTTP cache entries may be bypassed | |||
| with HTTP mechanisms such as the Cache-Control no-cache directive | with HTTP mechanisms such as the "Cache-Control no-cache" directive; | |||
| however DNS caches do not have a similar mechanism. | however DNS caches do not have a similar mechanism. | |||
| A DOH response that was previously stored in an HTTP cache will | A DOH response that was previously stored in an HTTP cache will | |||
| contain the [RFC7234] Age response header indicating the elapsed time | contain the [RFC7234] Age response header indicating the elapsed time | |||
| between when the entry was placed in the HTTP cache and the current | between when the entry was placed in the HTTP cache and the current | |||
| DOH response. DNS API clients should subtract this time from the DNS | DOH response. DNS API clients should subtract this time from the DNS | |||
| TTL if they are re-sharing the information in a non HTTP context | TTL if they are re-sharing the information in a non HTTP context | |||
| (e.g. their own DNS cache) to determine the remaining time to live of | (e.g. their own DNS cache) to determine the remaining time to live of | |||
| the DNS record. | the DNS record. | |||
| skipping to change at page 10, line 13 ¶ | skipping to change at page 9, line 41 ¶ | |||
| extenuating circumstances defined in [RFC5861]. | extenuating circumstances defined in [RFC5861]. | |||
| All HTTP servers, including DNS API servers, need to consider cache | All HTTP servers, including DNS API servers, need to consider cache | |||
| interaction when they generate responses that are not globally valid. | interaction when they generate responses that are not globally valid. | |||
| For instance, if a DNS API server customized a response based on the | For instance, if a DNS API server customized a response based on the | |||
| client's identity then it would not want to globally allow reuse of | client's identity then it would not want to globally allow reuse of | |||
| that response. This could be accomplished through a variety of HTTP | that response. This could be accomplished through a variety of HTTP | |||
| techniques such as a Cache-Control max-age of 0, or perhaps by the | techniques such as a Cache-Control max-age of 0, or perhaps by the | |||
| Vary response header. | Vary response header. | |||
| 7.2. HTTP/2 | 6.2. HTTP/2 | |||
| The minimum version of HTTP used by DOH SHOULD be HTTP/2 [RFC7540]. | The minimum version of HTTP used by DOH SHOULD be HTTP/2 [RFC7540]. | |||
| The messages in classic UDP based DNS [RFC1035] are inherently | The messages in classic UDP based DNS [RFC1035] are inherently | |||
| unordered and have low overhead. A competitive HTTP transport needs | unordered and have low overhead. A competitive HTTP transport needs | |||
| to support reordering, parallelism, priority, and header compression | to support reordering, parallelism, priority, and header compression | |||
| to achieve similar performance. Those features were introduced to | to achieve similar performance. Those features were introduced to | |||
| HTTP in HTTP/2 [RFC7540]. Earlier versions of HTTP are capable of | HTTP in HTTP/2 [RFC7540]. Earlier versions of HTTP are capable of | |||
| conveying the semantic requirements of DOH but may result in very | conveying the semantic requirements of DOH but may result in very | |||
| poor performance for many uses cases. | poor performance for many uses cases. | |||
| 7.3. Server Push | 6.3. Server Push | |||
| Before using DOH response data for DNS resolution, the client MUST | Before using DOH response data for DNS resolution, the client MUST | |||
| establish that the HTTP request URI is a trusted service for the DOH | establish that the HTTP request URI is a trusted service for the DOH | |||
| query. For HTTP requests initiated by the DNS API client this trust | query. For HTTP requests initiated by the DNS API client this trust | |||
| is implicit in the selection of URI. For HTTP server push ([RFC7540] | is implicit in the selection of URI. For HTTP server push ([RFC7540] | |||
| Section 8.2) extra care must be taken to ensure that the pushed URI | Section 8.2) extra care must be taken to ensure that the pushed URI | |||
| is one that the client would have directed the same query to if the | is one that the client would have directed the same query to if the | |||
| client had initiated the request. This specification does not extend | client had initiated the request. This specification does not extend | |||
| DNS resolution privileges to URIs that are not recognized by the | DNS resolution privileges to URIs that are not recognized by the | |||
| client as trusted DNS API servers. | client as trusted DNS API servers. | |||
| 8. IANA Considerations | 7. IANA Considerations | |||
| 8.1. Registration of application/dns-udpwireformat Media Type | 7.1. Registration of application/dns-udpwireformat Media Type | |||
| To: ietf-types@iana.org | To: ietf-types@iana.org | |||
| Subject: Registration of MIME media type | Subject: Registration of MIME media type | |||
| application/dns-udpwireformat | application/dns-udpwireformat | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: dns-udpwireformat | MIME subtype name: dns-udpwireformat | |||
| Required parameters: n/a | Required parameters: n/a | |||
| skipping to change at page 12, line 5 ¶ | skipping to change at page 12, line 5 ¶ | |||
| Paul Hoffman, paul.hoffman@icann.org | Paul Hoffman, paul.hoffman@icann.org | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: n/a | Restrictions on usage: n/a | |||
| Author: Paul Hoffman, paul.hoffman@icann.org | Author: Paul Hoffman, paul.hoffman@icann.org | |||
| Change controller: IESG | Change controller: IESG | |||
| 9. Security Considerations | 8. Security Considerations | |||
| Running DNS over HTTPS relies on the security of the underlying HTTP | Running DNS over HTTPS relies on the security of the underlying HTTP | |||
| transport. Implementations utilizing HTTP/2 benefit from the TLS | transport. This mitigates classic amplication attacks for UDP-based | |||
| profile defined in [RFC7540] Section 9.2. | DNS. Implementations utilizing HTTP/2 benefit from the TLS profile | |||
| defined in [RFC7540] Section 9.2. | ||||
| Session level encryption has well known weaknesses with respect to | Session level encryption has well known weaknesses with respect to | |||
| traffic analysis which might be particularly acute when dealing with | traffic analysis which might be particularly acute when dealing with | |||
| DNS queries. Sections 10.6 (Compression) and 10.7 (Padding) of | DNS queries. HTTP/2 provides further advice about the use of | |||
| [RFC7540] provide some further advice on mitigations within an HTTP/2 | compression (Section 10.6 of [RFC7540]) and padding (Section 10.7 of | |||
| context. | [RFC7540]). | |||
| The HTTPS connection provides transport security for the interaction | The HTTPS connection provides transport security for the interaction | |||
| between the DNS API server and client, but does not inherently ensure | between the DNS API server and client, but does not inherently ensure | |||
| the authenticity of DNS data. A DNS API client may also perform full | the authenticity of DNS data. A DNS API client may also perform full | |||
| DNSSEC validation of answers received from a DNS API server or it may | DNSSEC validation of answers received from a DNS API server or it may | |||
| choose to trust answers from a particular DNS API server, much as a | choose to trust answers from a particular DNS API server, much as a | |||
| DNS client might choose to trust answers from its recursive DNS | DNS client might choose to trust answers from its recursive DNS | |||
| resolver. | resolver. This capability might be affected by the response media | |||
| type. | ||||
| [[ From the WG charter: | ||||
| The working group will analyze the security and privacy issues that | ||||
| could arise from accessing DNS over HTTPS. In particular, the | ||||
| working group will consider the interaction of DNS and HTTP caching. | ||||
| ]] | Section 6.1 describes the interaction of this protocol with HTTP | |||
| caching. An adversary that can control the cache used by the client | ||||
| can affect that client's view of the DNS. This is no different than | ||||
| the security implications of HTTP caching for other protocols that | ||||
| use HTTP. | ||||
| A server that is acting both as a normal web server and a DNS API | A server that is acting both as a normal web server and a DNS API | |||
| server is in a position to choose which DNS names it forces a client | server is in a position to choose which DNS names it forces a client | |||
| to resolve (through its web service) and also be the one to answer | to resolve (through its web service) and also be the one to answer | |||
| those queries (through its DNS API service). An untrusted DNS API | those queries (through its DNS API service). An untrusted DNS API | |||
| server can thus easily cause damage by poisoning a client's cache | server can thus easily cause damage by poisoning a client's cache | |||
| with names that the DNS API server chooses to poison. A client MUST | with names that the DNS API server chooses to poison. A client MUST | |||
| NOT trust a DNS API server simply because it was discovered, or | NOT trust a DNS API server simply because it was discovered, or | |||
| because the client was told to trust the DNS API server by an | because the client was told to trust the DNS API server by an | |||
| untrusted party. Instead, a client MUST only trust DNS API server | untrusted party. Instead, a client MUST only trust DNS API server | |||
| that is configured as trustworthy. | that is configured as trustworthy. | |||
| [[ From the WG charter: | A client can use DNS over HTTPS as one of multiple mechanisms to | |||
| obtain DNS data. If a client of this protocol encounters an HTTP | ||||
| The working group may define mechanisms for discovery of DOH servers | error after sending a DNS query, and then falls back to a different | |||
| similar to existing mechanisms for discovering other DNS servers if | DNS retrieval mechanism, doing so can weaken the privacy expected by | |||
| the chairs determine that there is both sufficient interest and | the user of the client. | |||
| working group consensus. | ||||
| ]] | ||||
| 10. Operational Considerations | 9. Operational Considerations | |||
| Local policy considerations and similar factors mean different DNS | Local policy considerations and similar factors mean different DNS | |||
| servers may provide different results to the same query: for instance | servers may provide different results to the same query: for instance | |||
| in split DNS configurations [RFC6950]. It logically follows that the | in split DNS configurations [RFC6950]. It logically follows that the | |||
| server which is queried can influence the end result. Therefore a | server which is queried can influence the end result. Therefore a | |||
| client's choice of DNS server may affect the responses it gets to its | client's choice of DNS server may affect the responses it gets to its | |||
| queries. | queries. For example, in the case of DNS64 [RFC6147], the choice | |||
| could affect whether IPv6/IPv4 translation will work at all. | ||||
| The HTTPS channel used by this specification establishes secure two | The HTTPS channel used by this specification establishes secure two | |||
| party communication between the DNS API Client and the DNS API | party communication between the DNS API client and the DNS API | |||
| Server. Filtering or inspection systems that rely on unsecured | server. Filtering or inspection systems that rely on unsecured | |||
| transport of DNS will not function in a DNS over HTTPS environment. | transport of DNS will not function in a DNS over HTTPS environment. | |||
| Many HTTPS implementations perform real time third party checks of | Many HTTPS implementations perform real time third party checks of | |||
| the revocation status of the certificates being used by TLS. If this | the revocation status of the certificates being used by TLS. If this | |||
| check is done as part of the DNS API server connection procedure and | check is done as part of the DNS API server connection procedure and | |||
| the check itself requires DNS resolution to connect to the third | the check itself requires DNS resolution to connect to the third | |||
| party a deadlock can occur. The use of an OCSP [RFC6960] server is | party a deadlock can occur. The use of an OCSP [RFC6960] server is | |||
| one example of how this can happen. DNS API servers SHOULD utilize | one example of how this can happen. DNS API servers SHOULD utilize | |||
| OCSP Stapling [RFC6961] to provide the client with certificate | OCSP Stapling [RFC6961] to provide the client with certificate | |||
| revocation information that does not require contacting a third | revocation information that does not require contacting a third | |||
| party. | party. | |||
| A DNS API client may face a similar bootstrapping problem when the | A DNS API client may face a similar bootstrapping problem when the | |||
| HTTP request needs to resolve the hostname portion of the DNS URI. | HTTP request needs to resolve the hostname portion of the DNS URI. | |||
| Just as the address of a traditional DNS nameserver cannot be | Just as the address of a traditional DNS nameserver cannot be | |||
| originally determined from that same server, a DOH client cannot use | originally determined from that same server, a DOH client cannot use | |||
| its DOH server to initially resolve the server's host name into an | its DOH server to initially resolve the server's host name into an | |||
| address. Alternative strategies a client might employ include making | address. Alternative strategies a client might employ include making | |||
| the initial resolution part of the configuration, IP based URIs and | the initial resolution part of the configuration, IP based URIs and | |||
| corresponding IP based certificates for HTTPS, or resolving the DNS | corresponding IP based certificates for HTTPS, or resolving the DNS | |||
| API Server's hostname via traditional DNS or another DOH server while | API server's hostname via traditional DNS or another DOH server while | |||
| still authenticating the resulting connection via HTTPS. | still authenticating the resulting connection via HTTPS. | |||
| 11. Acknowledgments | HTTP [RFC7230] is a stateless application level protocol and | |||
| therefore DOH implementations do not provide stateful ordering | ||||
| guarantees between different requests. DOH cannot be used as a | ||||
| transport for other protocols that require strict ordering. | ||||
| 10. Acknowledgments | ||||
| Joe Hildebrand contributed lots of material for a different iteration | Joe Hildebrand contributed lots of material for a different iteration | |||
| of this document. Helpful early comments were given by Ben Schwartz | of this document. Helpful early comments were given by Ben Schwartz | |||
| and Mark Nottingham. | and Mark Nottingham. | |||
| 12. References | 11. References | |||
| 12.1. Normative References | 11.1. Normative References | |||
| [RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
| specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
| November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
| Requirement Levels", BCP 14, RFC 2119, | ||||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
| Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
| <https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
| DOI 10.17487/RFC5246, August 2008, | DOI 10.17487/RFC5246, August 2008, | |||
| <https://www.rfc-editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
| [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | |||
| skipping to change at page 14, line 35 ¶ | skipping to change at page 14, line 38 ¶ | |||
| [RFC6961] Pettersen, Y., "The Transport Layer Security (TLS) | [RFC6961] Pettersen, Y., "The Transport Layer Security (TLS) | |||
| Multiple Certificate Status Request Extension", RFC 6961, | Multiple Certificate Status Request Extension", RFC 6961, | |||
| DOI 10.17487/RFC6961, June 2013, | DOI 10.17487/RFC6961, June 2013, | |||
| <https://www.rfc-editor.org/info/rfc6961>. | <https://www.rfc-editor.org/info/rfc6961>. | |||
| [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
| RFC 7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7230>. | <https://www.rfc-editor.org/info/rfc7230>. | |||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | ||||
| DOI 10.17487/RFC7231, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7231>. | ||||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
| RFC 7234, DOI 10.17487/RFC7234, June 2014, | RFC 7234, DOI 10.17487/RFC7234, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7234>. | <https://www.rfc-editor.org/info/rfc7234>. | |||
| [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7540>. | <https://www.rfc-editor.org/info/rfc7540>. | |||
| [RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for | [RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for | |||
| HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7541>. | <https://www.rfc-editor.org/info/rfc7541>. | |||
| 12.2. Informative References | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| 11.2. Informative References | ||||
| [CORS] "Cross-Origin Resource Sharing", n.d., | [CORS] "Cross-Origin Resource Sharing", n.d., | |||
| <https://fetch.spec.whatwg.org/#http-cors-protocol>. | <https://fetch.spec.whatwg.org/#http-cors-protocol>. | |||
| [I-D.ietf-dnsop-dns-wireformat-http] | [QUERYPARAMETER] | |||
| Song, L., Vixie, P., Kerr, S., and R. Wan, "DNS wire- | "application/x-www-form-urlencoded Parsing", n.d., | |||
| format over HTTP", draft-ietf-dnsop-dns-wireformat-http-01 | <https://url.spec.whatwg.org/#application/ | |||
| (work in progress), March 2017. | x-www-form-urlencoded>. | |||
| [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | |||
| Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997, | Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997, | |||
| <https://www.rfc-editor.org/info/rfc2181>. | <https://www.rfc-editor.org/info/rfc2181>. | |||
| [RFC5861] Nottingham, M., "HTTP Cache-Control Extensions for Stale | [RFC5861] Nottingham, M., "HTTP Cache-Control Extensions for Stale | |||
| Content", RFC 5861, DOI 10.17487/RFC5861, May 2010, | Content", RFC 5861, DOI 10.17487/RFC5861, May 2010, | |||
| <https://www.rfc-editor.org/info/rfc5861>. | <https://www.rfc-editor.org/info/rfc5861>. | |||
| [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | |||
| skipping to change at page 15, line 43 ¶ | skipping to change at page 16, line 5 ¶ | |||
| [RFC6950] Peterson, J., Kolkman, O., Tschofenig, H., and B. Aboba, | [RFC6950] Peterson, J., Kolkman, O., Tschofenig, H., and B. Aboba, | |||
| "Architectural Considerations on Application Features in | "Architectural Considerations on Application Features in | |||
| the DNS", RFC 6950, DOI 10.17487/RFC6950, October 2013, | the DNS", RFC 6950, DOI 10.17487/RFC6950, October 2013, | |||
| <https://www.rfc-editor.org/info/rfc6950>. | <https://www.rfc-editor.org/info/rfc6950>. | |||
| [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
| Terminology", RFC 7719, DOI 10.17487/RFC7719, December | Terminology", RFC 7719, DOI 10.17487/RFC7719, December | |||
| 2015, <https://www.rfc-editor.org/info/rfc7719>. | 2015, <https://www.rfc-editor.org/info/rfc7719>. | |||
| 12.3. URIs | [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | |||
| and P. Hoffman, "Specification for DNS over Transport | ||||
| Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | ||||
| 2016, <https://www.rfc-editor.org/info/rfc7858>. | ||||
| 11.3. URIs | ||||
| [1] https://github.com/dohwg/draft-ietf-doh-dns-over-https | [1] https://github.com/dohwg/draft-ietf-doh-dns-over-https | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats | Appendix A. Previous Work on DNS over HTTP or in Other Formats | |||
| The following is an incomplete list of earlier work that related to | The following is an incomplete list of earlier work that related to | |||
| DNS over HTTP/1 or representing DNS data in other formats. | DNS over HTTP/1 or representing DNS data in other formats. | |||
| The list includes links to the tools.ietf.org site (because these | The list includes links to the tools.ietf.org site (because these | |||
| documents are all expired) and web sites of software. | documents are all expired) and web sites of software. | |||
| End of changes. 62 change blocks. | ||||
| 175 lines changed or deleted | 171 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||