既知の問題のように思われるかもしれませんし、このトピックには多くの質問がありますが、私の状況は非常に奇妙です。 Tomcat8.0.36にデプロイされている単純なWebアプリケーションがあります。 CORSを適切に設定しました:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.Apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
クロスオリジンリクエストはブラウザによってブロックされます:
要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' https://www.mytestpage.com 'はアクセスを許可されていません。応答のHTTPステータスコードは403でした。
Tomcatログファイルには、403の応答コードも表示されます。興味深いのは、クロスオリジンリクエストの場合にアプリケーションのコードが実行されないことです。リクエストはアプリケーションに到達する前にブロックされ、403がすぐに送信されます。 Tomcatの前にApacheはありません。プレーンなTomcatです。オリジンのホワイトリストへの登録や許可されたヘッダーの指定など、さまざまなことを試しましたが、何の役にも立ちませんでした。また、クロスオリジンリクエストの場合のコードが実行されないことがわかるまで、プログラムでヘッダーを設定しようとしました。
UPD:エンドポイントはPOSTリクエストを受け入れます。これらのPOSTリクエストは、JSスニペットからXmlHttpRequestsとして送信されます。
それが何であるかについて何か考えはありますか?
p.s同じOriginリクエストを成功させることができます。
問題が何であるかを見つけました。リクエストにContent-Typeヘッダーを設定する必要がありました。そうしないと、リクエストがブロックされてしまいます。 - Tomcat CORSフィルター
実際には、Access-Control-Allow-Origin
とAccess-Control-Allow-Methods
の両方を設定する必要があります。次に例を示します。
Access-Control-Allow-Origin: http://www.myhost.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
また、両方のAccess-Control-Allow-*
ヘッダー行を返す「OPTIONS」メソッドを受け入れる必要があります。一部のブラウザは、サービスのアクセス情報を取得するために、実際のリクエスト(「PUT」リクエストなど)の前にこの種のリクエストを発行する場合があります。
私はちょうど同じような状況に陥りました。必要なすべてのWebアプリに同じTomcatサーバーを使用して解決しました。また、localhostの代わりにTomcatサーバーの詳細な名前を使用する必要がありました。 CORSフィルターの問題はもう見られませんでした。