Topik ini menjelaskan cara menggunakan DNS-over-HTTPS (DoH) dengan pustaka jaringan native HarmonyOS, Remote Communication Kit (RCP), dan ArkWeb (WebView).
1. Pengantar
Pada platform HarmonyOS, kami merekomendasikan penggunaan kit pengembangan perangkat lunak (SDK) HarmonyOS untuk koneksi. Untuk informasi selengkapnya, lihat Manual SDK HarmonyOS atau . Jika Anda tidak dapat mengimpor SDK, Anda dapat melakukan koneksi menggunakan DoH. Topik ini menjelaskan cara menghubungkan menggunakan DoH untuk pustaka dan komponen jaringan berikut di HarmonyOS:
Komponen jaringan HarmonyOS hanya mendukung satu tautan DoH. Untuk meningkatkan stabilitas layanan, terapkan fallback ke DNS lokal.
Pustaka Network Kit dan RCP tidak mendukung fallback otomatis ke DNS lokal. Anda harus menerapkan fallback tersebut di aplikasi Anda. Untuk contohnya, lihat kode contoh.
Anda dapat mengaktifkan fallback otomatis ke DNS lokal di ArkWeb dengan mengatur
<a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#securednsmode10" id="1b0b1b228b7jm">SecureDnsMode</a>keAUTO.
Konfigurasi DoH untuk Network Kit dan RCP dipengaruhi oleh aturan resolusi kustom yang ditetapkan menggunakan
<a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-net-connection-V5#connectionaddcustomdnsrule11-1" id="424d8cdeddks7">addCustomDnsRule</a>. Jika Anda menggunakan<a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-net-connection-V5#connectionaddcustomdnsrule11-1" id="4c3da21d56ymi">addCustomDnsRule</a>untuk mengonfigurasi resolusi Nama domain tertentu, Nama domain tersebut tidak akan diselesaikan menggunakan DoH.
2. Prasyarat
Sebelum Anda menghubungkan ke pustaka atau komponen jaringan di HarmonyOS menggunakan DoH, pastikan Anda telah mengonfigurasi layanan DoH.
3. Menghubungkan ke DoH menggunakan Network Kit (httpRequest)
Anda dapat menggunakan Network Kit untuk mengaktifkan DNS-over-HTTPS (DoH) untuk satu permintaan dengan mengatur parameter options.dnsOverHttps: string dari http.request(options: <a href="https://developer.huawei.com/consumer/en/doc/harmonyos-references/js-apis-http#httprequestoptions" id="fa498210ee5q6">http.RequestOptions</a>) ke Titik akhir DoH Anda. Operasi ini tidak mengubah sesi global. Kode contoh berikut memberikan ilustrasi:
import http from '@ohos.net.http';
const httpRequest: http.HttpRequest = http.createHttp();
// Ganti ini dengan URL DoH Anda
const DOH_ENDPOINT = 'https://xxxxx.aliyunhttpdns.com/dns-query';
const isDoHFailure = (err: ErrorDetails): boolean => {
const code = String(err.code ?? '');
const msg = String(err.message ?? '');
return /(couldn'?t\s+resolve\s+host\s+name|resolve\s+host\s+name|dns|resolve|name\s*not\s*resolved|EAI_AGAIN)/i.test(msg) || /DNS/i.test(code);
};
httpRequest.request(this.urlInput, {
method: http.RequestMethod.GET,
connectTimeout: 3000,
readTimeout: 3000,
dnsOverHttps: DOH_ENDPOINT,
}).then((res: http.HttpResponse) => {
console.log('Permintaan DoH berhasil:', res);
}).catch((err: ErrorDetails) => {
if (isDoHFailure(err)) {
console.error('Kesalahan permintaan DoH, beralih ke DNS lokal:', err);
httpRequest.request(this.urlInput, {
method: http.RequestMethod.GET,
connectTimeout: 3000,
readTimeout: 3000,
}).then((fallbackRes: http.HttpResponse) => {
console.log('Permintaan fallback berhasil:', fallbackRes);
}).catch((fallbackErr: ErrorDetails) => {
console.error('Kesalahan permintaan fallback:', fallbackErr);
});
} else {
console.error('Kesalahan permintaan:', err);
}
});4. Menghubungkan ke DoH menggunakan Remote Communication Kit (RCP)
Pustaka jaringan RCP mendukung koneksi DoH pada dua tingkat granularitas: Session global dan Request individual. Topik ini menjelaskan kedua jenis koneksi tersebut.
4.1 Menghubungkan ke DoH pada tingkat sesi
Anda dapat menggunakan RCP untuk mengaktifkan DoH pada tingkat sesi dengan menentukan Titik akhir DoH Anda di SessionConfiguration.requestConfiguration.dns.<a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5#section13705867403" id="424c1e44d83tg">dnsOverHttps</a>. Operasi ini tidak mengubah sesi global. Kode berikut memberikan contoh:
import { rcp } from '@kit.RemoteCommunicationKit';
import type { BusinessError } from '@ohos.base';
private isDoHFailure(err: BusinessError): boolean {
const code: string = err.code ? String(err.code) : '';
const msg: string = String(err.data);
return /(couldn'?t\s+resolve\s+host\s+name|resolve\s+host\s+name|dns|resolve|name\s*not\s*resolved|EAI_AGAIN)/i.test(msg) || /DNS/i.test(code);
}
async sendRequest() {
try {
const dohConfig: rcp.DnsOverHttpsConfiguration = {
url: 'https://xxxxx.aliyunhttpdns.com/dns-query',
skipCertificatesValidation: false,
};
const dohSession = rcp.createSession({
requestConfiguration: {
dns: { dnsOverHttps: dohConfig },
transfer: { timeout: { connectMs: 3000, transferMs: 8000 } },
},
});
const resp = await dohSession.get(this.urlInput);
console.info('Permintaan DoH berhasil, status=', resp.statusCode);
console.info('Tanggapan:', JSON.stringify(resp));
} catch (err) {
if (this.isDoHFailure(err)) {
console.error('Kesalahan permintaan DoH, beralih ke DNS lokal:', err);
try {
const localSession = rcp.createSession({
requestConfiguration: { transfer: { timeout: { connectMs: 3000, transferMs: 8000 } } },
});
const fb = await localSession.get(this.urlInput);
console.info('Fallback (DNS lokal) berhasil, status=', fb.statusCode);
console.info('Tanggapan fallback:', JSON.stringify(fb));
} catch (fallbackErr) {
console.error('Kesalahan permintaan fallback (DNS lokal):', fallbackErr);
}
} else {
console.error('Kesalahan permintaan (non-DoH):', err);
}
}
}4.2 Menghubungkan ke DoH pada tingkat permintaan
Anda dapat mengaktifkan DoH untuk satu permintaan RCP dengan menentukan request.configuration.dns.<a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5#section9677185417382" id="da462d45103k9">dnsOverHttps</a> sebagai Titik akhir DoH, tanpa mengubah sesi global. Kode contoh adalah sebagai berikut:
import { rcp } from '@kit.RemoteCommunicationKit';
import type { BusinessError } from '@ohos.base';
async sendRequest() {
try {
const dohConfig: rcp.DnsOverHttpsConfiguration = {
url: 'https://xxxxx.aliyunhttpdns.com/dns-query',
skipCertificatesValidation: false,
};
const session = rcp.createSession({
requestConfiguration: {
transfer: { timeout: { connectMs: 3000, transferMs: 8000 } },
},
});
const perReq = new rcp.Request(this.urlInput, 'GET', undefined, undefined, undefined, undefined, {
dns: { dnsOverHttps: dohConfig },
});
const resp = await session.fetch(perReq);
console.info('Permintaan DoH berhasil, status=', resp.statusCode);
console.info('Tanggapan:', JSON.stringify(resp));
} catch (err) {
if (this.isDoHFailure(err)) {
console.error('Kesalahan permintaan DoH, beralih ke DNS lokal:', err);
try {
const localSession = rcp.createSession({
requestConfiguration: { transfer: { timeout: { connectMs: 3000, transferMs: 8000 } } },
});
const fb = await localSession.get(this.urlInput);
console.info('Fallback (DNS lokal) berhasil, status=', fb.statusCode);
console.info('Tanggapan fallback:', JSON.stringify(fb));
} catch (fallbackErr) {
console.error('Kesalahan permintaan fallback (DNS lokal):', fallbackErr);
}
} else {
console.error('Kesalahan permintaan (non-DoH):', err);
}
}
}5. Kebijakan DoH untuk WebView
Anda dapat menentukan URL DoH Anda menggunakan webview.WebviewController.setHttpDns. Kode berikut memberikan contoh:
import { webview } from '@kit.ArkWeb';
webview.WebviewController.setHttpDns(webview.SecureDnsMode.AUTO, 'https://xxxxx.aliyunhttpdns.com/dns-query');Komponen jaringan HarmonyOS hanya mendukung satu tautan DNS-over-HTTPS (DoH). Untuk meningkatkan stabilitas layanan, kami merekomendasikan penerapan fallback DNS lokal. Di ArkWeb, Anda dapat mengatur <a data-init-id="1b0b1b228b7jm" href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#securednsmode10" id="cc698912edejc">SecureDnsMode</a> ke AUTO untuk mengaktifkan fallback otomatis ke DNS lokal.
6. Ringkasan
Topik ini menjelaskan cara mengintegrasikan fitur DNS-over-HTTPS (DoH) dengan pustaka jaringan HarmonyOS. Integrasi ini secara signifikan meningkatkan keamanan dan perlindungan privasi aplikasi Anda. Setelah konfigurasi selesai, Anda dapat memverifikasi bahwa DoH berfungsi dengan benar. Untuk melakukannya, atur Server DNS jaringan Wi-Fi ponsel Anda ke alamat yang tidak valid dan periksa apakah aplikasi Anda masih dapat melakukan permintaan dengan sukses.