JSON API for DNS over HTTPS (DoH)

في السابق، كانت التطبيقات المستندة إلى الويب تتطلّب إضافات المتصفح لاستخدام الميزات المتقدّمة ميزات نظام أسماء النطاقات مثل DANE واكتشاف خدمة نظام أسماء النطاقات-SD أو حتى لحل أي شيء آخر بخلاف عناوين IP، مثل سجلات MX. لاستخدام الميزات التي تعتمد على ملحقات أمان نظام أسماء النطاقات (DNSSEC)، مثل سجلّات SSHFP، يمكن استخدام أيٍّ من هذه الإضافات. التحقق من صحة ملحقات أمان نظام أسماء النطاقات (DNSSEC) بنفسها، لأنّ المتصفّح أو نظام التشغيل قد لا يتحقّقان من ذلك.

منذ عام 2016، قدّم نظام أسماء النطاقات العام من Google واجهة برمجة تطبيقات متوافقة مع الويب في DoH تتضمّن ملحقات أمان نظام أسماء النطاقات (DNSSEC). عمليات تحقق لا تتطلب تهيئة المتصفح أو نظام التشغيل أو الإضافات. تسمح معلمات طلب بحث GET البسيطة واستجابات JSON للعملاء بتحليل تستخدم واجهات برمجة تطبيقات الويب الشائعة وتجنب التفاصيل المعقدة لتنسيق رسالة نظام أسماء النطاقات، مثل ضغط المؤشر لأسماء النطاقات.

يمكنك الاطّلاع على صفحة مستندات وزارة الصحة العامة للحصول على معلومات عن وزارة الصحة. مثل عناوين HTTP ومعالجة إعادة التوجيه وأفضل ممارسات الخصوصية رموز حالة HTTP.

تتضمن صفحة عمليات النقل الآمن أمثلة على curl في سطر الأوامر في DoH، والمعلومات المشتركة في DoH ونظام أسماء النطاقات عبر TLS (DoT)، مثل دعم TLS واقتطاع نظام أسماء النطاقات

مواصفات واجهة برمجة التطبيقات JSON

جميع طلبات البيانات من واجهة برمجة التطبيقات هي طلبات HTTP GET. في حالة وجود المعلمات المكررة، يتم استخدام القيمة الأولى فقط.

المَعلمات المتوافقة

الاسم

سلسلة، مطلوبة

المعلمة المطلوبة الوحيدة. يتم قبول أحرف إلغاء الشرطة المائلة للخلف في RFC 4343.

  • يجب أن يكون الطول (بعد استبدال أحرف إلغاء الشرطة المائلة للخلف) بين 1 و 253 (مع تجاهل نقطة الانتهاء الاختيارية إن كانت موجودة).
  • يجب أن يتراوح طول جميع التصنيفات (أجزاء من الاسم بين النقاط) 1 إلى 63 بايت.
  • يتم الحصول على الأسماء غير الصالحة مثل .example.com أو example..com أو سلسلة فارغة. 400 طلب سيئ.
  • يجب أن تكون الأحرف غير ASCII punycoded (xn--qxam، وليس ελ).
كتابة

سلسلة، القيمة التلقائية: 1

يمكن تمثيل نوع RR كرقم في [1، 65535] أو سلسلة أساسية. (غير حساسة لحالة الأحرف، مثل A أو aaaa). يمكنك استخدام 255 لـ 'ANY' طلبات البحث، ولكن اعلم أن هذا ليس بديل لإرسال الاستعلامات لكل من سجلات A وAAAA أو MX. لا تحتاج خوادم الأسماء الموثوقة إلى عرض جميع السجلات لطلبات البحث هذه. والبعض الآخر لا يستجيب والبعض الآخر (مثل cloudflare.com) لا يعرض سوى HINFO.

cd

منطقي، القيمة التلقائية: false

علامة القرص المضغوط (تم تعطيل التحقق). استخدام الإضافة cd=1 أو cd=true لإيقاف التحقّق من صحة ملحقات أمان نظام أسماء النطاقات (DNSSEC) استخدام مَعلمة cd=0 أو cd=false أو بدون مَعلمة cd لتفعيل التحقّق من صحة ملحقات أمان نظام أسماء النطاقات (DNSSEC)

عدد

سلسلة، تلقائي: فارغ

خيار نوع المحتوى المطلوب. استخدم ct=application/dns-message لتلقي رسالة نظام أسماء نطاقات ثنائية في نص HTTP للاستجابة بدلاً من نص JSON. يمكنك استخدام ct=application/x-javascript لطلب نص JSON صراحةً. ويتم تجاهل قيم أنواع المحتوى الأخرى، ويتم عرض محتوى JSON التلقائي.

do

منطقي، القيمة التلقائية: false

علامة "ملحق أمان نظام أسماء النطاقات" (DNSSEC) استخدام do=1 أو do=true لتضمين سجلّات ملحقات أمان نظام أسماء النطاقات (DNSSEC) (RRSIG وNSEC وNSEC3) استخدام مَعلمة do=0 أو do=false أو لا do لحذف سجلّات ملحقات أمان نظام أسماء النطاقات (DNSSEC)

يجب أن تتعامل التطبيقات دائمًا مع أي من ملحقات أمان نظام أسماء النطاقات (DNSSEC) (وتتجاهلها، إذا لزم الأمر). السجلات في استجابات JSON حيث قد تتضمنها عمليات تنفيذ أخرى دائمًا، وقد نغيّر السلوك التلقائي لاستجابات JSON في المستقبل. (تراعي دائمًا استجابات رسالة نظام أسماء النطاقات الثنائية قيمة علامة DO.)

edns_client_subnet

سلسلة، تلقائي: فارغ

الخيار edns0-client-subnet. التنسيق هو عنوان IP مع قناع الشبكة الفرعية. أمثلة: 1.2.3.4/24، 2001:700:300::/48.

إذا كنت تستخدم معالجة نظام أسماء النطاقات عبر بروتوكول HTTPS بسبب مخاوف تتعلق بالخصوصية، ولا تريد أي جزء من عنوان IP لإرساله إلى خوادم الأسماء الموثوقة لدقة الموقع الجغرافي، استخدم edns_client_subnet=0.0.0.0/0. عادةً ما يرسل نظام أسماء النطاقات العام من Google معلومات تقريبية عن الشبكة. (عادةً ما يتم تفريغ الجزء الأخير من عنوان IPv4).

random_padding

سلسلة، تم التجاهل

ويتم تجاهل قيمة هذه المَعلمة. مثال: XmkMw~o_mgP2pf.gpw-Oi5dK

شعور عملاء واجهة برمجة التطبيقات بالقلق بشأن هجمات الخصوصية المحتملة من جانب القناة باستخدام يمكن لأحجام حزم البيانات الخاصة بطلبات HTTPS GET استخدام هذا المعامل لإجراء جميع الطلبات بالضبط بنفس الحجم من خلال طلبات المساحة المتروكة مع بيانات عشوائية. لمنع إساءة تفسير عنوان URL، يجب فرض قيود على أحرف المساحة المتروكة. إلى أحرف عنوان URL غير المحجوزة: الأحرف الكبيرة والصغيرة والأرقام والواصلة والنقطة والشرطة السفلية والتلدة.

استجابة نظام أسماء النطاقات بتنسيق JSON

تمت الإجابة بنجاح (التعليقات التي تتم إضافتها هنا ليست موجودة في الردود الفعلية):

{
  "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
}

راجِع RFC 7871 (EDNS Client Subnet) للحصول على تفاصيل حول "طول بادئة النطاق" وكيفية تأثيره في التخزين المؤقت.

خطأ في الاستجابة مع معلومات التشخيص:

{
  "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/."
}

سجلّات نظام التعرّف على هوية المُرسِل (SPF) وسجلّات TXT مع علامات الاقتباس المضمّنة وتحديد مصدر خادم الأسماء:

{
  "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
    }
  ],
}

سلاسل نظام أسماء النطاقات

يتم ترميز جميع سجلّات TXT كسلسلة JSON واحدة بما في ذلك استخدامات سجلّ TXT الأطول تنسيقات السجل مثل RFC 4408 (نظام التعرف على هوية المرسل) (SPF) أو RFC 4871 (DKIM)

نظام أسماء النطاقات (EDNS)

لا تتوفّر آلية إضافة EDNS العامة. يُعد خيار الشبكة الفرعية لعميل EDNS (edns-client-subnet) معلمة في طلب GET وحقل مستوى أعلى في استجابة JSON.