| < draft-ietf-doh-dns-over-https-07.txt | draft-ietf-doh-dns-over-https-08.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: October 13, 2018 Mozilla | Expires: November 17, 2018 Mozilla | |||
| April 11, 2018 | May 16, 2018 | |||
| DNS Queries over HTTPS | DNS Queries over HTTPS (DOH) | |||
| draft-ietf-doh-dns-over-https-07 | draft-ietf-doh-dns-over-https-08 | |||
| Abstract | Abstract | |||
| This document describes how to run DNS service over HTTP (DOH) using | This document describes how to make DNS queries over HTTPS. | |||
| https:// URIs. | ||||
| 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. | |||
| 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 October 13, 2018. | This Internet-Draft will expire on November 17, 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 | |||
| skipping to change at page 2, line 11 ¶ | skipping to change at page 2, line 11 ¶ | |||
| 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. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 3 | 3. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 4 | 3.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. The HTTP Exchange . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Selection of DNS API Server . . . . . . . . . . . . . . . . . 4 | |||
| 4.1. The HTTP Request . . . . . . . . . . . . . . . . . . . . 4 | 5. The HTTP Exchange . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4.1.1. HTTP Request Examples . . . . . . . . . . . . . . . . 5 | 5.1. The HTTP Request . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4.2. The HTTP Response . . . . . . . . . . . . . . . . . . . . 6 | 5.1.1. HTTP Request Examples . . . . . . . . . . . . . . . . 5 | |||
| 4.2.1. HTTP Response Example . . . . . . . . . . . . . . . . 7 | 5.2. The HTTP Response . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2.1. HTTP Response Example . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Cache Interaction . . . . . . . . . . . . . . . . . . . . 7 | 6. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.2. HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Cache Interaction . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.3. Server Push . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.2. HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 9 | 6.3. Server Push . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 7. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7.1. Registration of application/dns-message Media Type . . . 10 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 8.1. Registration of application/dns-message Media Type . . . 11 | |||
| 9. Operational Considerations . . . . . . . . . . . . . . . . . 13 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 14 | 10. Operational Considerations . . . . . . . . . . . . . . . . . 14 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 14 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 15 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 15 | 11.2. Informative References . . . . . . . . . . . . . . . . . 16 | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats . 16 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | Previous Work on DNS over HTTP or in Other Formats . . . . . . . 18 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 1. Introduction | 1. Introduction | |||
| 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 | URIs (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 | |||
| exchange. | exchange. | |||
| 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, redirection, proxying, | itself with HTTP features such as caching, redirection, proxying, | |||
| authentication, and compression. | 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 | existing DNS clients and native web applications seeking access to | |||
| the DNS. | the DNS. | |||
| Two primary uses cases were considered during this protocol's | Two primary uses cases were considered during this protocol's | |||
| development. They included preventing on-path devices from | development. They included preventing on-path devices from | |||
| interfering with DNS operations and allowing web applications to | interfering with DNS operations and allowing web applications to | |||
| access DNS information via existing browser APIs in a safe way | access DNS information via existing browser APIs in a safe way | |||
| consistent with Cross Origin Resource Sharing (CORS) [CORS]. There | consistent with Cross Origin Resource Sharing (CORS) [CORS]. No | |||
| are certainly other uses for this work. | special effort has been taken to enable or prevent application to | |||
| other use cases. This document focuses on communication between DNS | ||||
| clients (such as operating system stub resolvers) and recursive | ||||
| resolvers. | ||||
| 2. Terminology | 2. Terminology | |||
| A server that supports this protocol on one or more URIs is called a | A server that supports this protocol is called a "DNS API server" to | |||
| "DNS API server" to differentiate it from a "DNS server" (one that | differentiate it from a "DNS server" (one that only provides DNS | |||
| uses the regular DNS protocol). Similarly, a client that supports | service over one or more of the other transport protocols | |||
| this protocol is called a "DNS API client". | standardized for DNS). Similarly, a client that supports this | |||
| protocol is called a "DNS API client". | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14, RFC8174 [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. Protocol Requirements | 3. Protocol Requirements | |||
| [[ RFC Editor: Please remove this entire section before publication. | ||||
| ]] | ||||
| 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 DNS query that would normally be sent in DNS over | express every DNS query that would normally be sent in DNS over | |||
| UDP (including queries and responses that use DNS extensions, but | UDP (including queries and responses that use DNS extensions, but | |||
| not those that require multiple responses). | not those that require multiple responses). | |||
| skipping to change at page 4, line 14 ¶ | skipping to change at page 4, line 17 ¶ | |||
| 3.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 | |||
| 4. The HTTP Exchange | 4. Selection of DNS API Server | |||
| 4.1. The HTTP Request | Before using a DNS API server for DNS resolution, the client MUST | |||
| establish that the HTTP request URI is a trusted service for the DOH | ||||
| query, in other words, a DNS API client MUST only use a DNS API | ||||
| server that is configured as trustworthy. | ||||
| A client MUST NOT use a DNS API server simply because it was | ||||
| discovered, or because the client was told to use the DNS API server | ||||
| by an untrusted party. | ||||
| This specification does not extend DNS resolution privileges to URIs | ||||
| that are not recognized by the DNS API client as trusted DNS API | ||||
| servers. As such, use of untrusted servers is out of scope of this | ||||
| document. | ||||
| 5. The HTTP Exchange | ||||
| 5.1. The HTTP Request | ||||
| A DNS API client encodes a single DNS query into an HTTP request | A DNS API client encodes a single DNS query into an HTTP request | |||
| using either the HTTP GET or POST method and the other requirements | using either the HTTP GET or POST method and the other requirements | |||
| of this section. The DNS API server defines the URI used by the | of this section. The DNS API server defines the URI used by the | |||
| request through the use of a URI Template [RFC6570]. Configuration | request through the use of a URI Template [RFC6570]. | |||
| and discovery of the URI Template is done out of band from this | ||||
| protocol. | Configuration and discovery of the URI Template is done out of band | |||
| from this protocol. DNS API Servers MAY support more than one URI. | ||||
| This allows the different endpoints to have different properties such | ||||
| as different authentication requirements or service level guarantees. | ||||
| The URI Template defined in this document is processed without any | The URI Template defined in this document is processed without any | |||
| variables when the HTTP method is POST. When the HTTP method is GET | variables when the HTTP method is POST. When the HTTP method is GET | |||
| the single variable "dns" is defined as the content of the DNS | the single variable "dns" is defined as the content of the DNS | |||
| request (as described in Section 6), encoded with base64url | request (as described in Section 7), encoded with base64url | |||
| [RFC4648]. | [RFC4648]. | |||
| Future specifications for new media types MUST define the variables | Future specifications for new media types MUST define the variables | |||
| used for URI Template processing with this protocol. | used for URI Template processing with this protocol. | |||
| DNS API servers MUST implement both the POST and GET methods. | DNS API servers MUST implement both the POST and GET methods. | |||
| 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. | |||
| 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 | |||
| indicate what type of content can be understood in response. | indicate what type of content can be understood in response. | |||
| Irrespective of the value of the Accept request header, the client | Irrespective of the value of the Accept request header, the client | |||
| MUST be prepared to process "application/dns-message" (as described | MUST be prepared to process "application/dns-message" (as described | |||
| in Section 6) responses but MAY also process any other type it | in Section 7) responses but MAY also process any other type it | |||
| receives. | 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-message, SHOULD | formats that include DNS ID, such as application/dns-message, SHOULD | |||
| use a DNS ID of 0 in every DNS request. HTTP correlates the request | use a DNS ID of 0 in every DNS request. HTTP correlates the request | |||
| and response, thus eliminating the need for the ID in a media type | and response, thus eliminating the need for the ID in a media type | |||
| such as application/dns-message. The use of a varying DNS ID can | such as application/dns-message. The use of a varying DNS ID can | |||
| cause semantically equivalent DNS queries to be cached separately. | cause semantically equivalent DNS queries to be cached 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. | |||
| 4.1.1. HTTP Request Examples | 5.1.1. HTTP Request 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 with a URI Template of | These examples use a DNS API service with a URI Template of | |||
| "https://dnsserver.example.net/dns-query{?dns}" to resolve IN A | "https://dnsserver.example.net/dns-query{?dns}" to resolve IN A | |||
| records. | records. | |||
| The requests are represented as application/dns-message typed bodies. | The requests are represented as application/dns-message typed bodies. | |||
| The first example request uses GET to request www.example.com | The first example request uses GET to request www.example.com | |||
| skipping to change at page 6, line 4 ¶ | skipping to change at page 6, line 26 ¶ | |||
| 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 | |||
| emphasize that the encoding alphabet of base64url is different than | emphasize that the encoding alphabet of base64url is different than | |||
| regular base64 and that padding is omitted. | regular base64 and that padding is omitted. | |||
| The DNS query is 94 bytes represented by the following hex encoding | The DNS query is 94 bytes represented by the following hex encoding | |||
| 00 00 01 00 00 01 00 00 00 00 00 00 01 61 3e 36 | 00 00 01 00 00 01 00 00 00 00 00 00 01 61 3e 36 | |||
| 32 63 68 61 72 61 63 74 65 72 6c 61 62 65 6c 2d | 32 63 68 61 72 61 63 74 65 72 6c 61 62 65 6c 2d | |||
| 6d 61 6b 65 73 2d 62 61 73 65 36 34 75 72 6c 2d | 6d 61 6b 65 73 2d 62 61 73 65 36 34 75 72 6c 2d | |||
| 64 69 73 74 69 6e 63 74 2d 66 72 6f 6d 2d 73 74 | 64 69 73 74 69 6e 63 74 2d 66 72 6f 6d 2d 73 74 | |||
| 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? (no space or CR) | :path = /dns-query? (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-message | accept = application/dns-message | |||
| 4.2. The HTTP Response | 5.2. The HTTP Response | |||
| An HTTP response with a 2xx status code ([RFC7231] Section 6.3) | 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. | indicates a valid DNS response to the query made in the HTTP request. | |||
| A valid DNS response includes both success and failure responses. | A valid DNS response includes both success and failure responses. | |||
| For example, a DNS failure response such as SERVFAIL or NXDOMAIN will | For example, a DNS failure response such as SERVFAIL or NXDOMAIN will | |||
| be the message in a successful 2xx HTTP response even though there | be the message in a successful 2xx HTTP response even though there | |||
| was a failure at the DNS layer. Responses with non-successful HTTP | was a failure at the DNS layer. Responses with non-successful HTTP | |||
| status codes do not contain DNS answers to the question in the | status codes do not contain DNS answers to the question in the | |||
| corresponding request. Some of these non-successful HTTP responses | corresponding request. Some of these non-successful HTTP responses | |||
| (e.g., redirects or authentication failures) could allow clients to | (e.g., redirects or authentication failures) could mean that clients | |||
| make new requests to satisfy the original question. | need 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 | The only response type defined in this document is "application/dns- | |||
| progress. The only response type defined in this document is | message", but it is possible that other response formats will be | |||
| "application/dns-message", but it is possible that other response | defined in the future. | |||
| formats will be defined in the future. | ||||
| The DNS response for "application/dns-message" in Section 6 MAY have | The DNS response for "application/dns-message" in Section 7 MAY have | |||
| one or more EDNS options, depending on the extension definition of | one or more EDNS options [RFC6891], depending on the extension | |||
| 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 exchange. The | Each DNS request-response pair is matched to one HTTP exchange. The | |||
| responses may be processed and transported in any order using HTTP's | responses may be processed and transported in any order using HTTP's | |||
| multi-streaming functionality ([RFC7540] Section 5). | multi-streaming functionality ([RFC7540] Section 5). | |||
| Section 5.1 discusses the relationship between DNS and HTTP response | Section 6.1 discusses the relationship between DNS and HTTP response | |||
| caching. | caching. | |||
| A DNS API server MUST be able to process application/dns-message | A DNS API server MUST be able to process application/dns-message | |||
| request messages. | 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. | |||
| 4.2.1. HTTP Response Example | 5.2.1. HTTP Response 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-message | content-type = application/dns-message | |||
| 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 | |||
| 5. 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]. | |||
| 5.1. Cache Interaction | 6.1. Cache Interaction | |||
| A DNS API client may utilize a hierarchy of caches that include both | A DOH exchange can pass through a hierarchy of caches that include | |||
| HTTP and DNS specific caches. HTTP cache entries may be bypassed | both HTTP and DNS specific caches. These caches may exist beteen the | |||
| with HTTP mechanisms such as the "Cache-Control no-cache" directive; | DNS API server and client, or on the DNS API client itself. HTTP | |||
| however DNS caches do not have a similar mechanism. | caches are by design generic; that is, they do not understand this | |||
| protocol. Even if a DNS API client has modified its cache | ||||
| implementation to be aware of DOH semantics, it does not follow that | ||||
| all upstream caches (for example, inline proxies, server-side | ||||
| gateways and Content Delivery Networks) will be. | ||||
| The Answer section of a DNS response can contain zero or more RRsets. | As a result, DNS API servers need to carefully consider the HTTP | |||
| (RRsets are defined in [RFC7719].) According to [RFC2181], each | caching metadata they send in response to GET requests (POST requests | |||
| resource record in an RRset has Time To Live (TTL) freshness | are not cacheable unless specific response headers are sent; this is | |||
| information. Different RRsets in the Answer section can have | not widely implemented, and not advised for DOH). | |||
| different TTLs, although it is only possible for the HTTP response to | ||||
| have a single freshness lifetime. The HTTP response freshness | In particular, DNS API servers SHOULD assign an explicit freshness | |||
| lifetime ([RFC7234] Section 4.2) should be coordinated with the RRset | lifetime ([RFC7234] Section 4.2) so that the DNS API client is more | |||
| with the smallest TTL in the Answer section of the response. | likely to use fresh DNS data. This requirement is due to HTTP caches | |||
| Specifically, the HTTP freshness lifetime SHOULD be set to expire at | being able to assign their own heuristic freshness (such as that | |||
| the same time any of the DNS resource records in the Answer section | described in [RFC7234] Section 4.2.2), which would take control of | |||
| reach a 0 TTL. The response freshness lifetime MUST NOT be greater | the cache contents out of the hands of the DNS API server. | |||
| than that indicated by the DNS resoruce record with the smallest TTL | ||||
| in the response. | The assigned freshness lifetime of a DOH HTTP response SHOULD be the | |||
| smallest TTL in the Answer section of the DNS response. For example, | ||||
| if a HTTP response carries three RRsets with TTLs of 30, 600, and | ||||
| 300, the HTTP freshness lifetime should be 30 seconds (which could be | ||||
| specified as "Cache-Control: max-age=30"). The assigned freshness | ||||
| lifetime MUST NOT be greater than the smallest TTL in the Answer | ||||
| section of the DNS response. This requirement helps assure that none | ||||
| of the RRsets contained in a DNS response are served stale from an | ||||
| HTTP cache. | ||||
| If the DNS response has no records in the Answer section, and the DNS | 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 | response has an SOA record in the Authority section, the response | |||
| freshness lifetime MUST NOT be greater than the MINIMUM field from | freshness lifetime MUST NOT be greater than the MINIMUM field from | |||
| that SOA record. (See [RFC2308].) Otherwise, the HTTP response MUST | that SOA record (see [RFC2308]). | |||
| 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 | The stale-while-revalidate and stale-if-error Cache-Control | |||
| freshness lifetime MUST NOT assign that response a heuristic | directives ([RFC5861]) could be well suited to a DOH implementation | |||
| freshness ([RFC7234] Section 4.2.2.) greater than that indicated by | when allowed by server policy. Those mechanisms allow a client, at | |||
| the DNS Record with the smallest TTL in the response. | the server's discretion, to reuse a cache entry that is no longer | |||
| fresh. In such a case, the client reuses all of a cached entry, or | ||||
| none of it. | ||||
| A DOH response that was previously stored in an HTTP cache will | DNS API servers also need to consider caching when generating | |||
| contain the [RFC7234] Age response header indicating the elapsed time | responses that are not globally valid. For instance, if a DNS API | |||
| between when the entry was placed in the HTTP cache and the current | server customizes a response based on the client's identity, it would | |||
| DOH response. DNS API clients should subtract this time from the DNS | not want to allow global reuse of that response. This could be | |||
| TTL if they are re-sharing the information in a non HTTP context | accomplished through a variety of HTTP techniques such as a Cache- | |||
| (e.g., their own DNS cache) to determine the remaining time to live | Control max-age of 0, or by using the Vary response header ([RFC7231] | |||
| of the DNS record. | Section 7.1.4) to establish a secondary cache key ([RFC7234] | |||
| Section 4.1). | ||||
| HTTP revalidation (e.g., via If-None-Match request headers) of cached | DNS API clients MUST account for the Age response header's value | |||
| DNS information may be of limited value to DOH as revalidation | ([RFC7234]) when calculating the DNS TTL of a response. For example, | |||
| provides only a bandwidth benefit and DNS transactions are normally | if a RRset is received with a DNS TTL of 600, but the Age header | |||
| latency bound. Furthermore, the HTTP response headers that enable | indicates that the response has been cached for 250 seconds, the | |||
| revalidation (such as "Last-Modified" and "Etag") are often fairly | remaining lifetime of the RRset is 350 seconds. | |||
| large when compared to the overall DNS response size, and have a | ||||
| variable nature that creates constant pressure on the HTTP/2 | ||||
| compression dictionary [RFC7541]. Other types of DNS data, such as | ||||
| zone transfers, may be larger and benefit more from revalidation. | ||||
| DNS API servers may wish to consider whether providing these | ||||
| validation enabling response headers is worthwhile. | ||||
| The stale-while-revalidate and stale-if-error cache control | DNS API clients can request an uncached copy of a response by using | |||
| directives may be well suited to a DOH implementation when allowed by | the "no-cache" request cache control directive ([RFC7234], | |||
| server policy. Those mechanisms allow a client, at the server's | Section 5.2.1.4) and similar controls. Note that some caches might | |||
| discretion, to reuse a cache entry that is no longer fresh under some | not honor these directives, either due to configuration or | |||
| extenuating circumstances defined in [RFC5861]. | interaction with traditional DNS caches that do not have such a | |||
| mechanism. | ||||
| All HTTP servers, including DNS API servers, need to consider cache | HTTP conditional requests ([RFC7232]) may be of limited value to DOH, | |||
| interaction when they generate responses that are not globally valid. | as revalidation provides only a bandwidth benefit and DNS | |||
| For instance, if a DNS API server customized a response based on the | transactions are normally latency bound. Furthermore, the HTTP | |||
| client's identity then it would not want to globally allow reuse of | response headers that enable revalidation (such as "Last-Modified" | |||
| that response. This could be accomplished through a variety of HTTP | and "Etag") are often fairly large when compared to the overall DNS | |||
| techniques such as a Cache-Control max-age of 0, or perhaps by the | response size, and have a variable nature that creates constant | |||
| Vary response header. | pressure on the HTTP/2 compression dictionary [RFC7541]. Other types | |||
| of DNS data, such as zone transfers, may be larger and benefit more | ||||
| from revalidation. | ||||
| 5.2. HTTP/2 | 6.2. HTTP/2 | |||
| The minimum version of HTTP used by DOH SHOULD be HTTP/2 [RFC7540]. | HTTP/2 [RFC7540] is the minimum RECOMMENDED version of HTTP for use | |||
| with DOH. | ||||
| 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. | poor performance. | |||
| 5.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 may be used for the DOH query. | |||
| query. For HTTP requests initiated by the DNS API client this trust | For HTTP requests initiated by the DNS API client this is implicit in | |||
| is implicit in the selection of URI. For HTTP server push ([RFC7540] | the selection of URI. For HTTP server push ([RFC7540] Section 8.2) | |||
| Section 8.2) extra care must be taken to ensure that the pushed URI | extra care must be taken to ensure that the pushed URI is one that | |||
| is one that the client would have directed the same query to if the | the client would have directed the same query to if the client had | |||
| client had initiated the request. This specification does not extend | initiated the request. | |||
| DNS resolution privileges to URIs that are not recognized by the | ||||
| client as trusted DNS API servers. | ||||
| 5.4. Content Negotiation | 6.4. Content Negotiation | |||
| In order to maximize interoperability, DNS API clients and DNS API | In order to maximize interoperability, DNS API clients and DNS API | |||
| servers MUST support the "application/dns-message" media type. Other | servers MUST support the "application/dns-message" media type. Other | |||
| media types MAY be used as defined by HTTP Content Negotiation | media types MAY be used as defined by HTTP Content Negotiation | |||
| ([RFC7231] Section 3.4). | ([RFC7231] Section 3.4). Those media types MUST be flexible enough | |||
| to express every DNS query that would normally be sent in DNS over | ||||
| UDP (including queries and responses that use DNS extensions, but not | ||||
| those that require multiple responses). | ||||
| 6. DNS Wire Format | 7. DNS Wire Format | |||
| The data payload is the DNS on-the-wire format defined in [RFC1035]. | 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 | The format is for DNS over UDP. Note that this is different than the | |||
| wire format used in [RFC7858]. Also note that while [RFC1035] says | wire format used in [RFC7858]. Also note that while [RFC1035] says | |||
| "Messages carried by UDP are restricted to 512 bytes", that was later | "Messages carried by UDP are restricted to 512 bytes", that was later | |||
| updated by [RFC6891], and this protocol allows DNS on-the-wire format | updated by [RFC6891]. This protocol allows DNS on-the-wire format | |||
| payloads of any size. | payloads of any size. | |||
| When using the GET method, the data payload MUST be encoded with | When using the GET method, the data payload MUST be encoded with | |||
| base64url [RFC4648] and then provided as a variable named "dns" to | base64url [RFC4648] and then provided as a variable named "dns" to | |||
| the URI Template expansion. Padding characters for base64url MUST | the URI Template expansion. Padding characters for base64url MUST | |||
| NOT be included. | NOT be included. | |||
| When using the POST method, the data payload MUST NOT be encoded and | When using the POST method, the data payload MUST NOT be encoded and | |||
| is used directly as the HTTP message body. | is used directly as the HTTP message body. | |||
| DNS API clients using the DNS wire format MAY have one or more EDNS | DNS API clients using the DNS wire format MAY have one or more EDNS | |||
| options [RFC6891] in the request. | options [RFC6891] in the request. | |||
| The media type is "application/dns-message". | The media type is "application/dns-message". | |||
| 7. IANA Considerations | 8. IANA Considerations | |||
| 7.1. Registration of application/dns-message Media Type | 8.1. Registration of application/dns-message 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-message | application/dns-message | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: dns-message | MIME subtype name: dns-message | |||
| Required parameters: n/a | Required parameters: n/a | |||
| skipping to change at page 12, line 5 ¶ | skipping to change at page 13, 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 | |||
| 8. Security Considerations | 9. 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. This mitigates classic amplification attacks for UDP- | transport. This mitigates classic amplification attacks for UDP- | |||
| based DNS. Implementations utilizing HTTP/2 benefit from the TLS | based DNS. Implementations utilizing HTTP/2 benefit from the TLS | |||
| profile defined in [RFC7540] Section 9.2. | 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. HTTP/2 provides further advice about the use of | DNS queries. HTTP/2 provides further advice about the use of | |||
| compression (Section 10.6 of [RFC7540]) and padding (Section 10.7 of | compression ([RFC7540] Section 10.6) and padding ([RFC7540] | |||
| [RFC7540]). | Section 10.7 ). DNS API Servers can also add DNS padding [RFC7830] | |||
| if the DNS API requests it in the DNS query. | ||||
| 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 provide the | |||
| the authenticity of DNS data. A DNS API client may also perform full | response integrity of DNS data provided by DNSSEC. DNSSEC and DOH | |||
| DNSSEC validation of answers received from a DNS API server or it may | are independent and fully compatible protocols, each solving | |||
| choose to trust answers from a particular DNS API server, much as a | different problems. The use of one does not diminish the need nor | |||
| DNS client might choose to trust answers from its recursive DNS | the usefulness of the other. It is the choice of a client to either | |||
| resolver. This capability might be affected by the response media | perform full DNSSEC validation of answers or to trust the DNS API | |||
| type. | server to do DNSSEC validation and inspect the AD (Authentic Data) | |||
| bit in the returned message to determine whether an answer was | ||||
| authentic or not. As noted in Section 5.2, different response media | ||||
| types will provide more or less information from a DNS response so | ||||
| this choice may be affected by the response media type. | ||||
| Section 5.1 describes the interaction of this protocol with HTTP | Section 6.1 describes the interaction of this protocol with HTTP | |||
| caching. An adversary that can control the cache used by the client | 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 | can affect that client's view of the DNS. This is no different than | |||
| the security implications of HTTP caching for other protocols that | the security implications of HTTP caching for other protocols that | |||
| use HTTP. | use HTTP. | |||
| A server that is acting both as a normal web server and a DNS API | In the absence of DNSSEC information, a DNS API server can give a | |||
| server is in a position to choose which DNS names it forces a client | client invalid data in response to a DNS query. A client MUST NOT | |||
| to resolve (through its web service) and also be the one to answer | use arbitrary DNS API servers. Instead, a client MUST only use DNS | |||
| those queries (through its DNS API service). An untrusted DNS API | API servers specified using mechanisms such as explicit | |||
| server can thus easily cause damage by poisoning a client's cache | configuration. This does not guarantee protection against invalid | |||
| with names that the DNS API server chooses to poison. A client MUST | data but reduces the risk. | |||
| 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 | ||||
| untrusted party. Instead, a client MUST only trust DNS API server | ||||
| that is configured as trustworthy. | ||||
| A client can use DNS over HTTPS as one of multiple mechanisms to | 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 | obtain DNS data. If a client of this protocol encounters an HTTP | |||
| error after sending a DNS query, and then falls back to a different | error after sending a DNS query, and then falls back to a different | |||
| DNS retrieval mechanism, doing so can weaken the privacy and | DNS retrieval mechanism, doing so can weaken the privacy and | |||
| authenticity expected by the user of the client. | authenticity expected by the user of the client. | |||
| 9. Operational Considerations | 10. 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. For example, in the case of DNS64 [RFC6147], the choice | queries. For example, in the case of DNS64 [RFC6147], the choice | |||
| could affect whether IPv6/IPv4 translation will work at all. | 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 | |||
| skipping to change at page 13, line 33 ¶ | skipping to change at page 14, line 33 ¶ | |||
| procedure and the check itself requires DNS resolution to connect to | procedure and the check itself requires DNS resolution to connect to | |||
| the third party a deadlock can occur. The use of OCSP [RFC6960] | the third party a deadlock can occur. The use of OCSP [RFC6960] | |||
| servers or AIA for CRL fetching ([RFC5280] Section 4.2.2.1) are | servers or AIA for CRL fetching ([RFC5280] Section 4.2.2.1) are | |||
| examples of how this deadlock can happen. To mitigate the | examples of how this deadlock can happen. To mitigate the | |||
| possibility of deadlock, DNS API servers SHOULD NOT rely on DNS based | possibility of deadlock, DNS API servers SHOULD NOT rely on DNS based | |||
| references to external resources in the TLS handshake. For OCSP the | references to external resources in the TLS handshake. For OCSP the | |||
| server can bundle the certificate status as part of the handshake | server can bundle the certificate status as part of the handshake | |||
| using a mechanism appropriate to the version of TLS, such as using | using a mechanism appropriate to the version of TLS, such as using | |||
| [RFC6066] Section 8 for TLS version 1.2. AIA deadlocks can be | [RFC6066] Section 8 for TLS version 1.2. AIA deadlocks can be | |||
| avoided by providing intermediate certificates that might otherwise | avoided by providing intermediate certificates that might otherwise | |||
| be obtained through additional requests. | be obtained through additional requests. Note that these deadlocks | |||
| also need to be considered for server that a DNS API server might | ||||
| redirect to. | ||||
| 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 DNS API client cannot | originally determined from that same server, a DNS API client cannot | |||
| use its DNS API server to initially resolve the server's host name | use its DNS API server to initially resolve the server's host name | |||
| into an address. Alternative strategies a client might employ | into an address. Alternative strategies a client might employ | |||
| include making the initial resolution part of the configuration, IP | include making the initial resolution part of the configuration, IP | |||
| based URIs and corresponding IP based certificates for HTTPS, or | based URIs and corresponding IP based certificates for HTTPS, or | |||
| resolving the DNS API server's hostname via traditional DNS or | resolving the DNS API server's hostname via traditional DNS or | |||
| another DNS API server while still authenticating the resulting | another DNS API server while still authenticating the resulting | |||
| connection via HTTPS. | connection via HTTPS. | |||
| HTTP [RFC7230] is a stateless application level protocol and | HTTP [RFC7230] is a stateless application level protocol and | |||
| therefore DOH implementations do not provide stateful ordering | therefore DOH implementations do not provide stateful ordering | |||
| guarantees between different requests. DOH cannot be used as a | guarantees between different requests. DOH cannot be used as a | |||
| transport for other protocols that require strict ordering. | transport for other protocols that require strict ordering. | |||
| If a DNS API server responds to a DNS API client with a DNS message | A DNS API server is allowed to answer queries with any valid DNS | |||
| that has the TC (truncation) bit set in the header, that indicates | response. For example, a valid DNS response might have the TC | |||
| that the DNS API server was not able to retrieve a full answer for | (truncation) bit set in the DNS header to indicate that the server | |||
| the query and is providing the best answer it could get. This | was not able to retrieve a full answer for the query but is providing | |||
| protocol does not require that a DNS API server that cannot get an | the best answer it could get. A DNS API server can reply to queries | |||
| untruncated answer send back such an answer; it can instead send back | with an HTTP error for queries that it cannot fulfill. In this same | |||
| an HTTP error to indicate that it cannot give a useful answer. | example, a DNS API server could use an HTTP error instead of a non- | |||
| error response that has the TC bit set. | ||||
| 10. Acknowledgments | ||||
| This work required a high level of cooperation between experts in | Many extensions to DNS, using [RFC6891], have been defined over the | |||
| different technologies. Thank you Ray Bellis, Stephane Bortzmeyer, | years. Extensions that are specific to the choice of transport, such | |||
| Manu Bretelle, Tony Finch, Daniel Kahn Gilmor, Olafur Guomundsson, | as [RFC7828], are not applicable to DOH. | |||
| Wes Hardaker, Rory Hewitt, Joe Hildebrand, David Lawrence, Eliot | ||||
| Lear, John Mattson, Alex Mayrhofer, Mark Nottingham, Jim Reid, Adam | ||||
| Roach, Ben Schwartz, Davey Song, Daniel Stenberg, Andrew Sullivan, | ||||
| Martin Thomson, and Sam Weiler. | ||||
| 11. References | 11. References | |||
| 11.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>. | ||||
| [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | |||
| NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | |||
| <https://www.rfc-editor.org/info/rfc2308>. | <https://www.rfc-editor.org/info/rfc2308>. | |||
| [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, | |||
| skipping to change at page 15, line 10 ¶ | skipping to change at page 16, line 10 ¶ | |||
| [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 | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
| DOI 10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
| [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
| Protocol (HTTP/1.1): Conditional Requests", RFC 7232, | ||||
| DOI 10.17487/RFC7232, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7232>. | ||||
| [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>. | |||
| skipping to change at page 15, line 33 ¶ | skipping to change at page 16, line 38 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 11.2. Informative References | 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>. | |||
| [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | ||||
| Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2181>. | ||||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| [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>. | |||
| skipping to change at page 16, line 27 ¶ | skipping to change at page 17, line 27 ¶ | |||
| "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>. | |||
| [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | |||
| Galperin, S., and C. Adams, "X.509 Internet Public Key | Galperin, S., and C. Adams, "X.509 Internet Public Key | |||
| Infrastructure Online Certificate Status Protocol - OCSP", | Infrastructure Online Certificate Status Protocol - OCSP", | |||
| RFC 6960, DOI 10.17487/RFC6960, June 2013, | RFC 6960, DOI 10.17487/RFC6960, June 2013, | |||
| <https://www.rfc-editor.org/info/rfc6960>. | <https://www.rfc-editor.org/info/rfc6960>. | |||
| [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC7828] Wouters, P., Abley, J., Dickinson, S., and R. Bellis, "The | |||
| Terminology", RFC 7719, DOI 10.17487/RFC7719, December | edns-tcp-keepalive EDNS0 Option", RFC 7828, | |||
| 2015, <https://www.rfc-editor.org/info/rfc7719>. | DOI 10.17487/RFC7828, April 2016, | |||
| <https://www.rfc-editor.org/info/rfc7828>. | ||||
| [RFC7830] Mayrhofer, A., "The EDNS(0) Padding Option", RFC 7830, | ||||
| DOI 10.17487/RFC7830, May 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7830>. | ||||
| [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | |||
| and P. Hoffman, "Specification for DNS over Transport | and P. Hoffman, "Specification for DNS over Transport | |||
| Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | |||
| 2016, <https://www.rfc-editor.org/info/rfc7858>. | 2016, <https://www.rfc-editor.org/info/rfc7858>. | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats | Acknowledgments | |||
| This work required a high level of cooperation between experts in | ||||
| different technologies. Thank you Ray Bellis, Stephane Bortzmeyer, | ||||
| Manu Bretelle, Sara Dickinson, Tony Finch, Daniel Kahn Gilmor, Olafur | ||||
| Guomundsson, Wes Hardaker, Rory Hewitt, Joe Hildebrand, David | ||||
| Lawrence, Eliot Lear, John Mattson, Alex Mayrhofer, Mark Nottingham, | ||||
| Jim Reid, Adam Roach, Ben Schwartz, Davey Song, Daniel Stenberg, | ||||
| Andrew Sullivan, Martin Thomson, and Sam Weiler. | ||||
| 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. | |||
| o https://tools.ietf.org/html/draft-mohan-dns-query-xml | o https://tools.ietf.org/html/draft-mohan-dns-query-xml | |||
| o https://tools.ietf.org/html/draft-daley-dnsxml | o https://tools.ietf.org/html/draft-daley-dnsxml | |||
| End of changes. 58 change blocks. | ||||
| 179 lines changed or deleted | 235 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/ | ||||