Todos os produtos
Search
Central de documentação

Alibaba Cloud DNS:DNS over HTTPS (DoH)

Última atualização: Aug 28, 2026

Alibaba Cloud HTTPDNS oferece resolução de DNS compatível com a RFC 8484 por meio de uma conexão HTTPS criptografada com TLS, ideal para casos de uso como navegadores.

Obter o endpoint de DoT/DoH

  1. Acesse Alibaba Cloud DNS - HTTPDNS.

  2. Na aba Access Configuration, selecione Method 3: DoT/DoH-based access.

  3. O DoT/DoH oferece suporte a dois métodos de acesso: endereço curto e endereço criptografado personalizado.

    Importante

    Para maior segurança, recomendamos o uso do endereço criptografado.

  4. Clique em Add an encrypted URL. Na caixa de diálogo, insira uma string personalizada para gerar um endpoint exclusivo.

  5. Ative a chave para habilitar o endpoint criptografado.

    Aviso
    • Para interromper o acesso ao HTTPDNS via DoH, desative a chave.

    • Use o recurso de suspensão de service com cautela. Após a suspensão do service, sua conta será rebaixada para usuário gratuito. O faturamento é interrompido e os relatórios do console, além de outros recursos, ficam indisponíveis. Seu HTTPDNS deixará de ser coberto por um SLA e estará sujeito a limitação de taxa e rejeição de consultas.

    • Ao reiniciar um service suspenso, a configuração original é restaurada e o faturamento é retomado.

DoH para usuários finais

Considere que seu endpoint de DoH seja https://5***4-2h*****ynx3tls.alidns.com/dns-query.

Esta seção demonstra como configurar o DoH no Chrome.

  1. Abra o Chrome e acesse Settings.

  2. Na caixa de pesquisa, insira "DNS" e, nos resultados da busca, clique em na seta de expansão à direita de Security.

  3. Role até o final da página. Localize a seção Advanced e ative Use secure DNS. Em seguida, insira https://5***4-2h*****ynx3tls.alidns.com/dns-query no campo Custom.

Service de DoH para desenvolvedores

Desenvolvedores devem gerar uma solicitação HTTP de DoH conforme os padrões da RFC 8484 e enviá-la ao endereço do service de DoH.

O DoH aceita tanto o método GET quanto o POST. Ao utilizar o método POST, a mensagem de consulta DNS é incluída no corpo da solicitação HTTP. Já no método GET, uma única variável chamada "dns" recebe o conteúdo da solicitação DNS codificado em base64url.

Exemplos de código (Python e Golang)

Para iniciar uma consulta DoH com o método GET, codifique primeiro a mensagem binária de DNS em base64url para obter o parâmetro de consulta DNS. Esse parâmetro compõe a URL HTTP completa do DoH, enviada via solicitação HTTP para recuperar a mensagem de resposta DNS.

  • O código Python abaixo ilustra como usar o DoH para consultar o domínio 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))

    A saída é a seguinte:

    $ python test_doh.py
    [{"Answer": "106.11.XXX.XXX", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]
  • O código Go a seguir mostra como consultar o domínio alibaba.com usando DoH.

    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())
    }

    A saída é a seguinte:

    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