Tous les produits
Search
Centre de documentation

Alibaba Cloud DNS:DNS over HTTPS (DoH)

Dernière mise à jour :Aug 28, 2026

Alibaba Cloud HTTPDNS résout les noms DNS conformément à la norme RFC 8484 via une connexion HTTPS chiffrée par TLS, une solution idéale pour les navigateurs.

Obtenir l'endpoint DoT/DoH

  1. Accédez à Alibaba Cloud DNS - HTTPDNS.

  2. Sous l'onglet Access Configuration, sélectionnez Method 3: DoT/DoH-based access.

  3. Le protocole DoT/DoH prend en charge deux méthodes d'accès : l'adresse courte et l'adresse chiffrée personnalisée.

    Important

    Pour renforcer la sécurité, nous vous recommandons d'utiliser l'adresse chiffrée.

  4. Cliquez sur Add an encrypted URL. Dans la boîte de dialogue, saisissez une chaîne personnalisée pour générer un endpoint unique.

  5. Activez le commutateur pour activer l'endpoint chiffré.

    Avertissement
    • Pour cesser d'utiliser DoH afin d'accéder à HTTPDNS, désactivez le commutateur.

    • Utilisez la fonctionnalité de suspension du service avec prudence. Une fois le service suspendu, votre compte passe au statut d'utilisateur gratuit. La facturation s'arrête et les rapports de la console ainsi que d'autres fonctionnalités deviennent indisponibles. Votre service HTTPDNS n'est plus couvert par un SLA et subit des limitations de débit et des rejets de requêtes.

    • Si vous redémarrez un service suspendu, votre configuration d'origine est restaurée et la facturation reprend.

DoH pour les utilisateurs finaux

Supposons que votre endpoint DoH soit https://5***4-2h*****ynx3tls.alidns.com/dns-query.

Cette rubrique explique comment configurer DoH dans Chrome.

  1. Ouvrez Chrome et accédez à Settings.

  2. Dans la zone de recherche, saisissez « DNS ». Dans les résultats, cliquez sur la flèche de développement située à droite de Security.

  3. Faites défiler la page jusqu'en bas. Localisez la section Advanced et activez Use secure DNS. Ensuite, saisissez https://5***4-2h*****ynx3tls.alidns.com/dns-query dans la zone Custom.

Service DoH pour les développeurs

Les développeurs doivent générer une requête HTTP DoH conformément à la norme RFC 8484 et l'envoyer à l'adresse du service DoH.

Le protocole DoH prend en charge les méthodes GET et POST. Avec la méthode POST, le message de requête DNS figure dans le corps de la requête HTTP. Avec la méthode GET, une variable unique nommée « dns » contient le contenu de la requête DNS encodé en base64url.

Exemples de code (Python et Golang)

Pour initier une requête DoH via la méthode GET, encodez d'abord le message DNS binaire en base64url afin d'obtenir le paramètre de requête DNS. Utilisez ce paramètre pour construire l'URL HTTP DoH complète, puis envoyez-la via une requête HTTP pour récupérer la réponse DNS.

  • Le code Python suivant montre comment utiliser DoH pour interroger le domaine alibaba.com.

    import dns.message
    import requests
    import base64
    import json
    doh_url = "https://5***4-2h*****ynx3tls.alidns.com/dns-query"
    domain = "alibaba.com"
    rr = "A"
    result = []
    message = dns.message.make_query(domain, rr)
    dns_req = base64.urlsafe_b64encode(message.to_wire()).decode("UTF8").rstrip("=")
    r = requests.get(doh_url + "?dns=" + dns_req,
                     headers={"Content-type": "application/dns-message"})
    for answer in dns.message.from_wire(r.content).answer:
        dns = answer.to_text().split()
        result.append({"Query": dns[0], "TTL": dns[1], "RR": dns[3], "Answer": dns[4]})
        print(json.dumps(result))

    Le résultat est le suivant :

    $ python test_doh.py
    [{"Answer": "106.11.XXX.XXX", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]
  • Le code Go suivant montre comment utiliser DoH pour interroger le domaine alibaba.com.

    package main
    import (
            "encoding/base64"
            "fmt"
            "github.com/miekg/dns"
            "io/ioutil"
            "net/http"
            "os"
    )
    func main() {
           query := dns.Msg{}
           query.SetQuestion("www.taobao.com.", dns.TypeA)
           msg, _ := query.Pack()
           b64 := base64.RawURLEncoding.EncodeToString(msg)
           resp, err := http.Get("https://5***4-2h*****ynx3tls.alidns.com/dns-query?dns=" + b64)
           if err != nil {
                fmt.Printf("Send query error, err:%v\n", err)
                os.Exit(1)
           }
           defer resp.Body.Close()
           bodyBytes, _ := ioutil.ReadAll(resp.Body)
           response := dns.Msg{}
           response.Unpack(bodyBytes)
           fmt.Printf("Dns answer is :%v\n", response.String())
    }

    Le résultat est le suivant :

    Sent Get query https://dns.alidns.com/dns-query?dns=xzEBAAABAAAAAAAAA3d3dwZ0YW9iYW8DY29tAAABAAE
    Dns answer is :;; opcode: QUERY, status: NOERROR, id: 5***3
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
    ;; QUESTION SECTION:
    ;www.taobao.com.        IN       A
    ;; ANSWER SECTION:
    www.taobao.com. 15      IN      CNAME   www.taobao.com.danuoyi.tbcache.com.
    www.taobao.com.danuoyi.tbcache.com.     15      IN      A       221.229.XXX.XXX
    www.taobao.com.danuoyi.tbcache.com.     15      IN      A       221.229.XXX.XXX
    ;; ADDITIONAL SECTION:
    ;; OPT PSEUDOSECTION:
    ; EDNS: version 0; flags: ; udp: 4096