Topik ini menjelaskan cara menggunakan API dari HTTPDNS untuk menyelesaikan nama domain.
Akses API
Jika Anda menggunakan API HTTP, Anda harus merujuk ke topik Praktik Terbaik. Jika tidak, risiko bisnis mungkin terjadi.
HTTPDNS menyediakan layanan resolusi nama domain melalui API HTTP. Anda dapat mengakses HTTPDNS secara langsung menggunakan alamat IP. Untuk informasi lebih lanjut tentang cara memperoleh alamat HTTPDNS terdekat secara real time, lihat Memperoleh Alamat HTTPDNS.
Bagian ini menggunakan alamat IP layanan 203.107.XXX.XXX sebagai contoh untuk menunjukkan cara mengakses layanan HTTPDNS.
Metode Permintaan: HTTP GET atau HTTPS GET. Harga kedua metode permintaan tersebut berbeda. Untuk informasi lebih lanjut, lihat Penagihan.
URL Layanan HTTP: http://203.107.XXX.XXX/{account_id}/d
URL Layanan HTTPS: https://203.107.XXX.XXX/{account_id}/d
Ganti {account_id} dengan Account ID HTTPDNS Anda. Anda dapat menemukan ID tersebut di Konsol HTTPDNS.
Tabel berikut menjelaskan parameter dalam URL.
Nama | Wajib | Deskripsi |
host | Wajib | Nama domain yang ingin Anda selesaikan. |
ip | Opsional | Alamat IP sumber. Jika parameter ini tidak ditentukan, alamat IP sumber dari permintaan digunakan secara default. |
query | Opsional | Jenis alamat IP ke mana Anda ingin menyelesaikan nama domain. Nilai valid: 6 dan 4. Nilai 6 menunjukkan alamat IPv6, dan nilai 4 menunjukkan alamat IPv4. Nilai default: 4. |
Saat Anda mengakses HTTPDNS, Anda hanya dapat menyelesaikan satu nama domain pada satu waktu.
Contoh permintaan:
Contoh 1 (Sumber default): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com
Contoh 2 (Sumber yang ditentukan): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com&ip=42.120.XX.XXX
Contoh 3 (Jenis resolusi yang ditentukan): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
Contoh 4 (IPv6): http://[2401:b180:2000:XXXX:XXXX]/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
Respon API
Permintaan Berhasil
Jika permintaan berhasil, kode status HTTP 200 dikembalikan. Respon dalam format JSON. Contoh:
{ "host":"www.aliyun.com", "ips":[ "192.168.XX.234" ], "ipsv6":[ "2400:3200:1300:0:0:0:XX:XX" ], "ttl":57, "origin_ttl":120 }Tabel berikut menjelaskan parameter respon.
Nama
Deskripsi
host
Nama domain yang diselesaikan.
ips
Daftar alamat IPv4 yang dikembalikan. Daftar tersebut mungkin mencakup 0, 1, atau beberapa alamat IP. Parameter ini hanya dikembalikan jika nilai query adalah 4.
ipsv6
Daftar alamat IPv6 yang dikembalikan. Daftar tersebut mungkin mencakup 0, 1, atau beberapa alamat IP. Parameter ini hanya dikembalikan jika nilai query adalah 6.
ttl
Time to live (TTL) dari alamat IP yang dikembalikan.
origin_ttl
TTL asli dari nama domain. Nilai TTL nama domain dikonfigurasi pada server Sistem Nama Domain (DNS) otoritatif.
PentingNilai TTL nama domain mungkin gagal diperoleh karena backend layanan menyelesaikan nama domain yang berbeda dengan cara yang berbeda. Dalam hal ini, parameter ini tidak dikembalikan.
Jika permintaan berhasil, bidang
ipsdalam respons mungkin berupa daftar kosong. Hal ini menunjukkan bahwa tidak ada alamat IP yang diperoleh untuk nama domain tersebut, yang dapat disebabkan oleh dua alasan utama:Nama domain belum ditambahkan di konsol HTTPDNS. Kami sarankan Anda pergi ke konsol HTTPDNS untuk menambahkan nama domain.
Tidak ada alamat IP yang tersedia untuk nama domain, nama domain tidak terdaftar, atau tidak ada alamat IP yang dikonfigurasikan.
Berikut contoh respons dengan bidang
ipskosong:{ "host":"www.aliyun.com", "ips":[], "ttl":300 }Untuk menghindari resolusi domain yang sering, ikuti nilai TTL yang dikembalikan dalam hasil. Sebelum TTL habis, gunakan alamat IP yang di-cache. Setelah TTL habis, akses HTTPDNS untuk mendapatkan hasil resolusi terbaru.
Permintaan Gagal
Jika permintaan gagal, kode status HTTP 4xx atau 5xx dikembalikan, dan kode kesalahan juga dikembalikan. Respon ditampilkan dalam format JSON.
Contoh:
{ "code": "MissingArgument" }Tabel berikut menjelaskan kode kesalahan.
Kode kesalahan
Kode status HTTP
Deskripsi
MissingArgument
400
Satu atau lebih parameter wajib hilang.
InvalidHost
400
Format nama domain tidak valid.
TooManyHosts
400
Beberapa nama domain dilewatkan.
SdnsNotSupported
400
Anda berada di negara atau wilayah di luar Tiongkok daratan di mana layanan Software-Defined Name System (SDNS) tidak tersedia.
InvalidAccount
403
Akun tidak valid atau tidak ada.
MethodNotAllowed
405
Metode HTTP tidak didukung.
InternalError
500
Kesalahan internal terjadi di server.
Penanganan kesalahan
Saat menggunakan HTTPDNS, Anda harus menerapkan logika penanganan kesalahan untuk mengantisipasi pengecualian. Logika ini mencakup permintaan asinkron, percobaan ulang, atau degradasi.
Permintaan Asinkron
Untuk mencegah dampak bisnis yang disebabkan oleh latensi tinggi, buat permintaan asinkron untuk mengakses HTTPDNS. Ini sangat membantu saat lingkungan jaringan abnormal atau alamat IP HTTPDNS tidak tersedia. Jika Anda membuat permintaan sinkron untuk mengakses HTTPDNS, Anda harus menunggu timeout jaringan sebelum kegagalan resolusi dikembalikan. Periode timeout ini dapat secara signifikan memengaruhi pengalaman pengguna.
Implementasi: Jika alamat IP yang TTL-nya belum habis tersedia, gunakan alamat IP tersebut. Jika TTL semua alamat IP telah habis, turunkan permintaan untuk menggunakan resolusi DNS lokal asli dan mulai thread lain untuk memulai permintaan resolusi HTTPDNS secara asinkron. Dengan cara ini, cache diperbarui dan TTL dapat dipenuhi saat nama domain diselesaikan nanti.
Coba lagi
Saat menggunakan HTTPDNS untuk menyelesaikan nama domain, jika permintaan ke server HTTPDNS gagal atau tidak ada permintaan HTTP yang dikembalikan, Anda dapat mencoba lagi.
Dalam kebanyakan kasus, kegagalan ini disebabkan oleh masalah jaringan dan dapat diselesaikan setelah percobaan ulang.
Degradasi
Jika HTTPDNS tidak mengembalikan alamat IP untuk suatu nama domain, Anda harus menggunakan metode resolusi terdegradasi, yaitu menggunakan DNS lokal untuk menyelesaikan nama domain tersebut.
Permintaan ke HTTPDNS tidak mengembalikan alamat IP karena nama domain tidak ditambahkan ke konsol atau nama domain tidak ada. Gunakan metode resolusi degradasi untuk memastikan ketersediaan layanan.
Catatan penggunaan
Pengaturan untuk Header HOST dalam Permintaan HTTP
Melalui protokol HTTP standar, server menyelesaikan nilai header Host dalam permintaan HTTP sebagai informasi nama domain.
Saat menggunakan HTTPDNS, Anda mungkin perlu mengganti parameter host dalam URL HTTP dengan alamat IP yang diperoleh melalui resolusi HTTPDNS. Dalam hal ini, pustaka jaringan standar menetapkan alamat IP ke header HOST dalam permintaan HTTP, yang menyebabkan kesalahan resolusi di server karena server mengenali nama domain Anda alih-alih alamat IP.
Untuk mengatasi masalah ini, Anda dapat menentukan nilai header HOST dalam permintaan HTTP. Jika situs web Anda dilindungi oleh Alibaba Cloud Web Application Firewall (WAF), Anda harus menetapkan header HOST ke nama domain. Kode berikut menggunakan HttpURLConnection sebagai contoh.
// Misalnya, nama domain www.example.com yang ingin Anda kunjungi diselesaikan menjadi alamat IP 192.168.XX.XX. // Dalam kebanyakan kasus, jika Anda ingin menggunakan alamat IP untuk akses, Anda harus menetapkan header HOST dalam permintaan HTTP ke nama domain. String fullPath ="http://192.168.XX.XX/"; String host ="www.example.com"; URL url =new URL(fullPath); HttpURLConnection conn =(HttpURLConnection) url.openConnection(); // Tetapkan header Host dalam permintaan HTTP ke www.example.com. conn.setRequestProperty("Host", host);Header Cookie
Pustaka jaringan tertentu mendukung manajemen penyimpanan otomatis cookie. Saat menggunakan HTTPDNS untuk membuat permintaan, pustaka jaringan ini menggunakan informasi alamat IP dalam URL Anda alih-alih header HOST dalam permintaan HTTP sebagai informasi nama domain untuk manajemen penyimpanan cookie. Hal ini dapat menyebabkan masalah dalam manajemen dan penggunaan cookie. Oleh karena itu, Anda harus menonaktifkan fitur manajemen cookie otomatis. Secara default, fitur ini dinonaktifkan.
Menggunakan Nama Domain HTTPS
Saat menggunakan protokol HTTPS, sistem memeriksa apakah nama domain Anda cocok dengan sertifikat. Jika Anda menggunakan alamat IP untuk membuat permintaan, pustaka jaringan memeriksa alamat IP tersebut. Ini menyebabkan pengecualian. Anda dapat menggunakan metode berikut untuk menyelesaikan masalah:
Nonaktifkan HTTPDNS. Kami merekomendasikan agar Anda menggunakan metode ini.
Ubah logika untuk memverifikasi sertifikat klien. Untuk informasi lebih lanjut, lihat
Menggunakan Proxy
Jika Anda menggunakan proxy HTTP perantara, URL jalur absolut digunakan dalam baris permintaan dari permintaan yang diinisiasi oleh klien. Saat Anda mengaktifkan HTTPDNS dan menggunakan alamat IP untuk akses, proxy mengidentifikasi informasi alamat IP Anda dan meneruskannya ke server tujuan sebagai informasi Host aktual. Dalam hal ini, server tujuan tidak dapat memproses permintaan HTTP semacam itu yang tidak memiliki informasi HOST aktual. Anda dapat menggunakan metode berikut untuk menyelesaikan masalah:
Gunakan resolusi DNS asli untuk menghindari masalah ini.
Ubah konfigurasi server, misalnya, tambahkan bidang header lain. Dalam hal ini, server melakukan verifikasi berdasarkan bidang header yang Anda tambahkan. Metode ini biasa digunakan untuk gateway WAP.
Gateway WAP seluler menggunakan bidang protokol privat
X-Online-Hostuntuk mengatasi masalah ini. Berikut contohnya:URL tujuan: http://www.example.com/product/oss/ Alamat IP tempat www.example.com diselesaikan menggunakan HTTPDNS: 192.168.XX.XX Proxy: 10.0.XX.XX:XX Header permintaan HTTP: GET http://192.168.XX.XX/product/oss/ HTTP/1.1 # Header permintaan HTTP yang diprakarsai oleh proxy. Baris permintaan berisi jalur mutlak. Host: www.example.com # Header ini diabaikan oleh gateway proxy. Gateway proxy menggunakan informasi Host dalam baris permintaan sebagai host asal, yaitu 192.168.XX.XX. X-Online-Host: www.example.com # Header ini adalah header privat yang ditambahkan oleh gateway seluler untuk mentransmisikan informasi Host yang sebenarnya. Header ini harus dikonfigurasi untuk asal. Dengan cara ini, asal dapat mengenali header untuk memperoleh informasi Host yang sebenarnya.Anda juga dapat menggunakan metode
setRequestPropertyuntuk mengatur bidang header permintaanX-Online-Host.CatatanDalam sebagian besar skenario, kami merekomendasikan agar Anda memeriksa apakah proxy jaringan diaktifkan untuk perangkat saat ini. Jangan gunakan HTTPDNS untuk resolusi nama domain dalam mode proxy.
Untuk informasi tentang mode autentikasi untuk akses, lihat Mengimplementasikan Akses Autentikasi.