このドキュメントでは、解決サービスを使用して単一のドメイン名を解決する方法について説明します。
API アクセス
HTTP API を直接使用する前に、ビジネス失敗のリスクを防ぐために、SDK を使用しない HTTPDNS 使用時の注意事項 を必ずお読みください。
HTTPDNS は、直接 IP 接続を利用して、HTTP インターフェイスを介してドメイン名解決サービスを提供します。最新のサービスエンドポイントを取得する方法については、「解決サービスエンドポイントの取得方法」をご参照ください。
説明のために、サービス IP 203.107.XXX.XXX
を使用して HTTPDNS サービスへのアクセス方法を示します。
リクエストメソッド: HTTP GET または HTTPS GET を使用します(これらのメソッド間で価格は異なります。詳細については、「課金」をご参照ください)。
HTTP サービス URL: http://203.107.XXX.XXX/{account_id}/d
HTTPS サービス URL: https://203.107.XXX.XXX/{account_id}/d
{account_id}
を、HTTPDNS コンソールから取得できる HTTPDNS アカウント ID
に置き換えます。
URL パラメーターの説明:
名前 | 必須 | 説明 |
host | はい | 解決するドメイン名。 |
ip | オプション | ユーザーの送信元 IP アドレス。このパラメーターが指定されていない場合、リクエスト接続の送信元 IP アドレスがデフォルトで使用されます。 |
query | オプション | ドメイン名を解決する IP アドレスのタイプ。有効な値: 6 (IPv6) および 4 (IPv4)。 デフォルト値: 4。 |
このインターフェイスでは、リクエストごとに 1 つのドメイン名のみを解決できます。
サンプルリクエスト:
例 1(デフォルトの送信元 IP): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com
例 2(指定された送信元 IP): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com&ip=42.120.XX.XXX
例 3(指定された解決タイプ): http://203.107.XXX.XXX/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
例 4(IPv6 サポート): http://[2401:b180:2000:XXXX:XXXX]/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6
API レスポンス
-
成功したリクエスト
成功したリクエストは、JSON 形式のレスポンスとともに、200 の HTTP ステータスコードを返します。例:
{ "host":"www.aliyun.com", "ips":[ "192.168.XX.234" ], "ipsv6":[ "2400:3200:1300:0:0:0:XX:XX" ], "ttl":57, "origin_ttl":120 }
レスポンスのパラメーターの説明:
名前
説明
host
解決するドメイン名。
ips
解決された IPv4 アドレスのリスト。リストには、0 個、1 個、または複数の IP アドレスが含まれる場合があります。このパラメーターは、query の値が 4 の場合にのみ返されます。
ipsv6
解決された IPv6 アドレスのリスト。リストには、0 個、1 個、または複数の IP アドレスが含まれる場合があります。このパラメーターは、query の値が 6 の場合にのみ返されます。
ttl
解決された IP アドレスの Time To Live (TTL)。
origin_ttl
ドメイン名の元の TTL。これは、権威 DNS で構成された TTL 値です。
重要サービスバックエンドが異なるドメイン名を異なる方法で解決するため、ドメイン名の TTL 値の取得に失敗する場合があります。この場合、このパラメーターは返されません。
空の
ips
フィールドは、ドメイン名に対応する IP アドレスが見つからなかったことを示します。これは、ドメイン名が HTTPDNS コンソールに追加されていない、ドメイン名が未登録、または IP アドレスが構成されていないことが原因である可能性があります。-
ドメイン名が HTTPDNS コンソールに追加されていません。コンソールから追加してください。
-
IP アドレスが見つからないか、ドメイン名が未登録か、IP アドレスが構成されていません。
空の
ips
フィールドを含むレスポンスの例を次に示します。{ "host":"www.aliyun.com", "ips":[], "ttl":300 }
レスポンスには TTL 値が含まれています。頻繁なドメイン解決を最小限に抑えるには、TTL に従って解決された IP アドレスをキャッシュします。TTL が期限切れになるまでキャッシュされた IP を使用し、その後、HTTPDNS サービスにクエリを実行して更新する必要があります。
-
-
失敗したリクエスト
失敗したリクエストは、エラーコードとともに、4xx または 5xx の HTTP ステータスコードを返します。レスポンスは JSON 形式です。
失敗したレスポンスの例を次に示します。
{ "code": "MissingArgument" }
エラーコードを次の表に示します。
エラーコード
HTTP ステータスコード
説明
MissingArgument
400
1 つ以上の必須パラメーターが不足していることを示します。
InvalidHost
400
ドメイン名の形式が無効であることを示します。
TooManyHosts
400
単一ドメイン名解決インターフェイスに複数のドメイン名が渡されたことを示します。
SdnsNotSupported
400
Software-Defined Name System (SDNS) サービスが利用できない中国本土以外の国/地域にいることを示します。
InvalidAccount
403
アカウントが無効または存在しないことを示します。
MethodNotAllowed
405
HTTP メソッドがサポートされていないことを示します。
InternalError
500
サーバーで内部エラーが発生しました。
エラー処理
ビジネスに HTTPDNS を使用する場合、非同期リクエスト、リトライ、フォールバックなど、例外を処理するためのフォールトトレラント ロジックを実装します。
-
非同期リクエスト
特に異常なネットワーク状態または HTTPDNS IP アドレスにアクセスできない場合に、ビジネスに影響を与える可能性のある解決中の大きなレイテンシを回避するために、非同期リクエスト戦略を使用します。同期アクセスでは、障害が報告されるまでネットワークタイムアウトを待つ必要があるため、ユーザーエクスペリエンスが低下する可能性があります。
非同期リクエスト戦略: 使用可能な場合は、キャッシュから有効な TTL IP アドレスを使用します。使用できない場合は、ネイティブの LocalDNS 解決にスペックダウンしながら、非同期で HTTPDNS リクエストを開始してキャッシュを更新し、今後の解決がキャッシュヒットになるようにします。
-
リトライ
最初の試行が HTTP レスポンスなしで失敗した場合は、HTTPDNS サーバーへのリクエストを再試行します。これらの障害は、一時的なネットワークの問題が原因であることがよくあります。
ネットワークの問題は、このような障害の一般的な原因であり、多くの場合、再試行することで解決できます。
-
フォールバック
HTTPDNS サービスがドメイン名に関連付けられた IP アドレスの取得に失敗した場合、標準 DNS 解決にフォールバックし、LocalDNS を介してドメイン名を解決する必要があります。
HTTPDNS リクエストが IP アドレスの取得に失敗した場合、これは通常、ドメイン名がコンソールに追加されていないか、ドメイン名が存在しないことが原因です。いずれの場合でも、HTTPDNS が IP アドレスを解決できない場合は、ビジネスリクエストの適切な機能を保証するためのバックアップ戦略として、従来の DNS 解決にフォールバックする必要があります。
注意事項
-
HTTP リクエストヘッダー Host フィールドの設定
サーバーは、HTTP リクエストヘッダーの HOST フィールド値を使用して、リクエストのドメイン名を決定します。
HTTPDNS を実装した後、HTTP リクエスト URL の HOST フィールド値を解決された IP アドレスに置き換える必要がある場合があります。サーバーは IP アドレスではなくドメイン名を予期しているため、これによりサーバー解決エラーが発生する可能性があります。
これを解決するには、HTTP リクエストの HOST フィールド値を手動で設定します。サイトが Alibaba Cloud Web Application Firewall (WAF) によって保護されている場合は、Host フィールドに元のドメイン名を指定します。HttpURLConnection を使用した例を次に示します。
// たとえば、http://www.example.com/ にアクセスする場合、www.example.com の解決された IP アドレスは 192.168.XX.XX です。 // ほとんどの場合、アクセスに IP アドレスを使用する場合は、HTTP リクエストの Host ヘッダーを元のドメイン名に設定する必要があります。 String fullPath ="http://192.168.XX.XX/"; String host ="www.example.com"; URL url =new URL(fullPath); HttpURLConnection conn =(HttpURLConnection) url.openConnection(); // HTTP リクエストの Host ヘッダーを www.example.com に設定します conn.setRequestProperty("Host", host);
-
Cookie フィールド
一部のネットワークライブラリは、Cookie を自動的に管理します。HTTPDNS を使用する場合、これらのライブラリは Cookie 管理に HOST フィールドではなく URL の IP アドレスを使用する可能性があり、問題が発生します。通常はデフォルトでオフになっている自動 Cookie 管理を無効にします。
-
HTTPS ドメインでの使用
HTTPS プロトコルは、ドメイン名と証明書の一致を確認します。リクエストに IP アドレスを使用すると、このチェックが原因で例外が発生する可能性があります。解決するには:
HTTPS プロトコルで HTTPDNS を使用しないでください。
クライアント証明書の検証ロジックを変更します。ガイダンスについては、以下を参照してください。
-
プロキシシナリオでの使用
HTTP プロキシを使用するには、リクエスト行に絶対 URL が必要です。HTTPDNS が有効で、URL に IP アドレスが使用されている場合、プロキシは IP をホスト情報として渡す可能性があり、宛先サーバーがリクエストの処理に失敗する原因となります。これを解決するには:
ネイティブ DNS 解決を使用します。
WAP ゲートウェイと同様に、独自のヘッダーフィールドに基づいて検証するようにサーバー構成を調整します。例:
モバイル WAP ゲートウェイは、
X-Online-Host
フィールドを使用してこれを解決します。例:ターゲット URL: http://www.example.com/product/oss/ HTTPDNS を使用して www.example.com が解決される IP アドレス: 192.168.XX.XX プロキシ: 10.0.XX.XX:XX HTTP リクエストヘッダー: GET http://192.168.XX.XX/product/oss/ HTTP/1.1 # プロキシによって開始された HTTP リクエストヘッダー。リクエスト行は絶対パスです Host: www.example.com # このヘッダーはプロキシゲートウェイによって無視されます。プロキシゲートウェイは、リクエスト行の絶対パスの Host 情報をオリジンのホストとして使用します。ホストの IP アドレスは 192.168.XX.XX です X-Online-Host: www.example.com # このヘッダーは、モバイルゲートウェイによって追加された独自のヘッダーであり、実際のホストを渡します。オリジンサーバーは、この独自のヘッダーを認識して実際のホスト情報を取得するように構成する必要があります
または、
setRequestProperty
メソッドを使用してX-Online-Host
リクエストヘッダーを設定します。説明ほとんどの場合、デバイス上のネットワークプロキシを確認し、プロキシモードではドメイン名解決に HTTPDNS を使用しないことをお勧めします。
-
認証アクセス: 詳細については、「認証アクセスを実装する」をご参照ください。.