Ajax(Common Put、Delete)リクエストの解決、405(メソッドは許可されていません)



Resolve Ajax Common Put



今日、プロジェクトでput / deleteリクエストを使用したときに、次のエラーが見つかりました。

失敗の解決策:



インターネット上で多くのソリューションをチェックしても、追加などの効果はありません。

Web.configのwebServiceノードの下に追加するソリューションも多数あり、最終的に失敗します(ps:私のクロスドメイン構成は疑わしいものではありません)



見つかった問題:

多くの実験の結果、リクエストの最初のリクエストは、以下に示すようにOPTIONS(リクエストメソッド:OPTIONS)であることがわかりました。

PUTリクエストは送信されますか?OPTIONSリクエストのメソッドはどのようになっていますか? OPTIONSリクエストとは何ですか?インターネットで情報を確認して、ようやくわかりました。



  1. プリフライトリクエスト、PTIONSは、サーバーが実際のリクエストを許可するかどうかを尋ねる、ブラウザが開始する「プリフライト」リクエストです。
  2. Preflighted Requestsは、CORSの透過的なサーバー認証メカニズムです。プリフライトリクエストは、実際に送信されたリクエストが安全かどうかを判断するために、最初にHTTPOPTIONSリクエストヘッダーを別のドメイン名のリソースに送信する必要があります。

OPTIONSがプリフライトリクエストであることを知っている場合、ブラウザはどのような条件下でOPTIONSリクエストをトリガーしますか?

1.次のHTTPメソッドのいずれかを使用します。

–プット

–削除

–接続

–オプション

- 痕跡

–パッチ

2.CORSセキュリティヘッダーフィールドセット以外のヘッダーフィールドを人為的に設定します。コレクションは次のとおりです。

–受け入れる

–受け入れる-言語

–コンテンツ言語

–コンテンツタイプ(ただし、以下の追加要件に注意してください)

-DPR

–ダウンリンク

–データの保存

–ビューポート-幅

–幅

3. Content-Typeの値は、次のいずれにも属していません。

– application / x-www-form-urlencoded

– multipart / form-data

–テキスト/プレーン

次に、最初の条件であるputリクエストが使用されました。

最終的解決:

現在のプロジェクトでは、複雑すぎることを考慮する必要はなく、単純な処理はOPTIONS要求を解放することです。 (タイムラッシュのため、ここでは簡単な解決策のみが提供されています。自分で情報を確認できます)
通常のフィルターでは、メソッドは最初にリクエストを通じて取得され、次にOPTIONSがリリースされます。

.netMvc処理の例をここに書いてください。Global.asax次の処理を追加します。

protected void Application_BeginRequest() { if (Request.Headers.AllKeys.Contains('Origin') && Request.HttpMethod == 'OPTIONS') { Response.End() } }

最後にこの記事に感謝します: https://www.aliyun.com/jiaocheng/992452.html そして、tuyブロガー http://www.xudihui.com/