javascript AJAXクロスドメインPOSTリモートアクセスの単純な実装の問題
発売日:2022/11/12 11:06実際、問題は非常に単純です. リクエストを POST することができ、サーバーもレスポンスを返します. これは、ローカルの JavaScript がレスポンスを処理するのを防ぐ最新のブラウザのセキュリティ メカニズムです.デバッグ コンソールには次のように表示されます。
オリジン「null」から「https://ip.taotu.org/」の XMLHttpRequest へのアクセスが CORS ポリシーによってブロックされました: 要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。
問題は、ローカル ページを投稿すると、ブラウザーが自動的にヘッダー Origin: null を追加し、サーバーが応答ヘッダー Access-Control-Allow-Origin: * を追加しない場合、応答を返すとき、またはヘッダーサーバーから返される値はあなたのものと同じです 送信されたヘッダーの Origin が一致しない場合、ブラウザ クライアントは処理のために応答データを JavaScript に渡さず、エラーが発生します。
解決策: 実際には、非常に単純なサーバー バックエンド コードです。投稿データに指定された情報 (自分のパスワードに相当) が含まれているかどうかを確認するだけで済みます。含まれている場合は、Access-Control-Allow-Origin を追加します。 *、クライアントを正しく処理できるようにします。
要約すると、AJAX クロスドメイン リクエストはデフォルトで許可されておらず、ブラウザが禁止するため、サーバーは状況が必要かどうかを判断し、Access-Control-Allow-Origin:* レスポンス ヘッダーを返し、OK です。
リクエストページの JavaScript コード:
var xhttp = 新しい XMLHttpRequest();
xhttp.onreadystatechange = 関数 () {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("queryipinfo").innerHTML =
this.responseText;
}
};
xhttp.open("POST", "https://ip.taotu.org", true);
xhttp.send('XX comes from remote request XX'+ipdomain); //キーコードによって追加された前の文字列は、私たち自身のパスワードに相当します
サーバー側の処理コード:
ストリーム oPostData = Request.InputStream;
バイト[] bPostByte=新しいバイト[oPostData.Length];
oPostData.Read(bPostByte, 0, (int)oPostData.Length);
文字列 sPostIPDomain=Encoding.UTF8.GetString(bPostByte);
bool bFromRemote;
if (sPostIPDomain.StartsWith("XX はリモート リクエスト XX から来ています")) //キー コード
{
bFromRemote=真;
sPostIPDomain = Regex.Replace(sPostIPDomain,"XX はリモート要求 XX(.*) から来ています", "$1");
********省略コード********
if (bFromRemote) //ヘッダーを返すかどうかを判断するキーコード
Response.AddHeader("Access-Control-Allow-Origin", "*"); //キーコード
ちなみに、通常の解決策は、サーバーの応答ヘッダーに Access-Control-Allow-Origin: * を設定して、すべてのクロスドメイン リクエストを許可するか、Access-Control-Allow-Origin: https://taotu.org を許可することです。指定したドメインから送信されるリクエストは、通常のネットワーク開発で使用されますが、自宅でローカルに送信されるリクエスト ドメインが IP アドレスであることが要件であり、固定 IP ではない場合、これは長い間解決できないため、このシンプルなソリューションを使用しました。
私の目的は、自宅のローカル コンピューターのブラウザーに静的な .html ファイルを設定し、それを既定のホームページとして設定することです.ブラウザーを開くたびに、java を介してリモート サーバーにポスト リクエストを送信し、自分の.html ファイルを返します。外部ネットワーク IP を取得して表示します。静的ページには、頻繁に使用する Web サイトへのリンクや、スリーインワンの検索エンジンもあります。
これは私が作成した小さなウェブページです。訪問するか、ホームページとして設定してください: https://ip.taotu.org
ユーザーコメント
新しいコメントを追加