Sebelumnya, aplikasi berbasis web memerlukan ekstensi browser untuk menggunakan fitur DNS seperti DANE, penemuan layanan DNS-SD, atau bahkan untuk me-resolve semua hal selain alamat IP – seperti data MX. Untuk menggunakan fitur yang bergantung pada DNSSEC seperti data SSHFP, ekstensi tersebut harus memvalidasi DNSSEC sendiri, karena browser atau OS mungkin tidak melakukannya.
Sejak tahun 2016, Google Public DNS telah menawarkan API yang sesuai untuk web untuk DoH dengan DNSSEC validasi yang tidak memerlukan konfigurasi atau ekstensi OS atau browser. Parameter kueri GET sederhana dan respons JSON memungkinkan klien menggunakan API web umum dan menghindari detail format pesan DNS yang kompleks seperti kompresi pointer untuk nama domain.
Lihat halaman dokumentasi DoH umum untuk mengetahui informasi tentang DoH secara umum, seperti header HTTP, penanganan pengalihan, praktik terbaik privasi, dan Kode status HTTP.
Halaman Secure Transports memiliki
Contoh command line curl
untuk DoH, dan informasi yang umum untuk DoH dan DNS melalui
TLS (DoT), seperti dukungan TLS dan pemotongan DNS.
Spesifikasi JSON API
Semua panggilan API adalah permintaan GET HTTP. Dalam kasus parameter duplikat, hanya nilai pertama yang akan digunakan.
Parameter yang didukung
- nama
string, wajib
Satu-satunya parameter yang diperlukan. Escape garis miring terbalik RFC 4343 diterima.
- Panjang (setelah mengganti escape garis miring terbalik) harus antara 1 dan 253 (mengabaikan titik di akhir opsional jika ada).
- Semua label (bagian dari nama antartitik) harus sepanjang 1 sampai 63 byte.
- Nama yang tidak valid seperti
.example.com
,example..com
, atau string kosong 400 Permintaan Buruk. - Karakter non-ASCII harus menggunakan punycoded (
xn--qxam
, bukanελ
).
- jenis
string, default:
1
Jenis RR dapat direpresentasikan sebagai angka dalam [1, 65535] atau string kanonis (tidak peka huruf besar/kecil, seperti
A
atauaaaa
). Anda dapat menggunakan255
untuk 'SALAH SATU' tetapi perhatikan bahwa ini bukan pengganti untuk mengirim kueri untuk data A dan AAAA atau MX. Server nama otoritatif tidak perlu menampilkan semua catatan untuk kueri tersebut; beberapa tidak merespons, dan yang lainnya (seperti cloudflare.com) hanya menampilkan HINFO.- cd
boolean, default:
false
Tanda CD (Pemeriksaan Dinonaktifkan). Gunakan
cd=1
ataucd=true
untuk menonaktifkan validasi DNSSEC; gunakancd=0
,cd=false
, atau tanpa parametercd
untuk mengaktifkan validasi DNSSEC.- buah
string, default: kosong
Opsi jenis konten yang diinginkan. Gunakan
ct=application/dns-message
untuk menerima pesan DNS biner di isi HTTP respons, bukan teks JSON. Gunakanct=application/x-javascript
untuk meminta teks JSON secara eksplisit. Nilai jenis konten lainnya akan diabaikan dan konten JSON default akan ditampilkan.- cara
boolean, default:
false
Penanda DO (DNSSEC OK). Menggunakan
do=1
, ataudo=true
untuk menyertakan data DNSSEC (RRSIG, NSEC, NSEC3); gunakando=0
,do=false
, atau tanpa parameterdo
untuk menghilangkan data DNSSEC.Aplikasi harus selalu menangani (dan mengabaikan, jika perlu) DNSSEC apa pun rekaman dalam respons JSON karena implementasi lain mungkin selalu menyertakannya, dan kami dapat mengubah perilaku default untuk respons JSON pada masa mendatang. (Respons pesan DNS biner selalu mengikuti nilai tanda DO.)
- edns_client_subnet
string, default: kosong
Opsi edns0-client-subnet. Formatnya adalah alamat IP dengan subnet mask. Contoh:
1.2.3.4/24
,2001:700:300::/48
.Jika Anda menggunakan DNS-over-HTTPS karena masalah privasi, dan tidak ingin setiap bagian dari alamat IP Anda akan dikirim ke server nama yang kredibel untuk akurasi lokasi geografis, gunakan
edns_client_subnet=0.0.0.0/0
. Google Public DNS biasanya mengirimkan perkiraan informasi jaringan (biasanya membuat bagian terakhir dari alamat IPv4 Anda menjadi nol).- random_padding
string, diabaikan
Nilai parameter ini diabaikan. Contoh:
XmkMw~o_mgP2pf.gpw-Oi5dK
.Klien API khawatir dengan kemungkinan serangan privasi side-channel menggunakan ukuran paket permintaan GET HTTPS dapat menggunakan ini untuk membuat semua permintaan ukuran yang sama dengan permintaan padding dengan data acak. Untuk mencegah salah penafsiran URL, batasi karakter padding terhadap karakter URL yang tidak dicadangkan: huruf besar dan kecil, angka, tanda hubung, titik, garis bawah, dan tanda gelombang.
Respons DNS di JSON
Respons yang berhasil (komentar yang ditambahkan di sini tidak ada dalam respons sebenarnya):
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "apple.com.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Answer":
[
{
"name": "apple.com.", // Always matches name in the Question section
"type": 1, // A - Standard DNS RR type
"TTL": 3599, // Record's time-to-live in seconds
"data": "17.178.96.59" // Data for A - IP address as text
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.172.224.47"
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.142.160.59"
}
],
"edns_client_subnet": "12.34.56.78/0" // IP address / scope prefix-length
}
Lihat RFC 7871 (EDNS Client Subnet) untuk detail tentang “panjang awalan cakupan” dan pengaruhnya terhadap penyimpanan dalam cache.
Respons kegagalan dengan informasi diagnostik:
{
"Status": 2, // SERVFAIL - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "dnssec-failed.org.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}
Data SPF dan TXT dengan kutipan yang disematkan dan atribusi server nama:
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "*.dns-example.info.", // FQDN with trailing dot
"type": 99 // SPF - Standard DNS RR type
}
],
"Answer": [
{
"name": "*.dns-example.info.", // Always matches name in Question
"type": 99, // SPF - Standard DNS RR type
"TTL": 21599, // Record's time-to-live in seconds
"data": "\"v=spf1 -all\"" // Data for SPF - quoted string
}
],
"Comment": "Response from 216.239.38.110"
// Uncached responses are attributed to the authoritative name server
}
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
"type": 16 // TXT - Standard DNS RR type
}
],
"Answer": [
{
"name": "s1024._domainkey.yahoo.com.", // Always matches Question name
"type": 16, // TXT - Standard DNS RR type
"data": "\"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
// Data for TXT - multiple quoted strings
}
],
}
String DNS
Semua data TXT dienkode sebagai satu string JSON termasuk penggunaan TXT yang lebih panjang format rekaman seperti RFC 4408 (SPF) atau RFC 4871 (DKIM).
DNS
Mekanisme ekstensi EDNS umum tidak didukung. Opsi Subnet Klien EDNS (edns-client-subnet) adalah parameter di Permintaan GET dan kolom level teratas di respons JSON.