質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

Access-Control-Allow-Originの複数指定について

unity3dbigginer
unity3dbigginer

総合スコア65

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

2回答

0グッド

0クリップ

443閲覧

投稿2023/02/07 05:55

編集2023/02/08 04:46

実現したいこと

HeaderにAccess-Control-Allow-Originを設定したいのですが、複数のURLを指定したいです。
(Access-Control-Allow-Origin : "*")ではなく、固有URLを書き並べるイメージです。

イメージ
Access-Control-Allow-Origin : https://hoge.jp, https://fuga.jp, https://hoge.fuga.jp

上記のように書き並べる、もしくは、正規表現などがJavaのsetHeaderでできるのでしたら、その方法をご教授頂きたいです。

前提

Javaアプリケーションで、Servlet内でAccess-Control-Allow-Originの設定をしています。

該当のソースコード

java

1public static void setHeaderMethod(HttpServletRequest req, HttpServletResponse res){ 2 res.setHeader("Access-Control-Allow-Origin", "https://hoge.jp, https://fuga.jp"); 3}

試したこと

上記のように、一つの文字列として複数のURLを記載したのですが、ヘッダー情報をみたところ、Access-Control-Allow-Originに設定されていたものは、1つめの「https://hoge.jp」のみとなっていました。

補足情報(FW/ツールのバージョンなど)

Java8
Windows10

最後に

Javaにはしばしば触れているのですが、通信関連に疎いので、実力不足ですが、ご教授のほどよろしくお願いいたします。

情報提供語試したこと

情報提供いただきありがとうございます。
Access-Control-Allow-Originは1つのみ設定できることを理解しました。
そのため、ホワイトリストを予め用意し、その中に含まれるURLの場合はセットするようコードを組みました。

java

1public static void setHeaderMethod(HttpServletRequest req, HttpServletResponse res){ 2 String Origin = req.getParameter(Origin); 3 if(isContainWhitelist(Origin) || Origin == null){ 4 if(Origin != null){ 5 res.setHeader("Access-Control-Allow-Origin", Origin); 6 } 7 res.setHeader("Access-Control-Allow-Methods", ...); 8 res.setHeader("Access-Control-Allow-Credentials", ...); 9 res.setHeader("Access-Control-Allow-Headers", ...); 10 ・・・ 11}

コードの説明
isContainWhitelist(Origin)で、あらかじめ用意したホワイトリストに含まれるURLかどうかチェックしています。
また、本来はif条件はisContainWhitelist(Origin)のみでよいと思うのですが、null時も中に通す必要がある事情があるため、一度nullも通しています。
中のif分でOriginがnullでない場合はAccess-Control-Allow-Originを動的セットしています。

しかし、
Originがnullとなるリクエストを送った場合、Access-Control-Allow-Originにnullがセットされてしまいます。

Originがnullの場合は、Access-Control-Allow-Originにnullはセットしたくないのですが、そこがうまくいっておりません。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2023/02/08 03:00

質問者さん、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
unity3dbigginer

2023/02/08 04:49

SurferOnWwwさん コメント頂きありがとうございます。 仕事やプライベートが忙しく、こちらを検証する手が回せませんでした。私情に関することなのでご了承ください。 ただいま、情報提供いただいたものを踏まえて、試したことを記載しましたので、ご確認ください。
SurferOnWww

2023/02/08 05:10

> 仕事やプライベートが忙しく、こちらを検証する手が回せませんでした。私情に関することなのでご了承ください。 あなたにも都合があるのは分かりますが、すぐに返事できない事情がある場合は「読んだ。検討する」とかだけでも折り返し言ってもらえるとありがたいです。 > 情報提供いただいたものを踏まえて、試したことを記載しましたので、ご確認ください。 「Access-Control-Allow-Originの複数指定について」はできないということで納得していただき、このスレッドの課題としては解決済みのはずですので、一旦クローズ願います。 ホワイトリスト案の具体的な実装方法の質問については、新たに別スレッドを立てて、やりたいこと(プリフライトリクエストはどうするのかも)と開発環境を詳しく書いて質問していただいた方が、あなたの開発環境に詳しい人の目に留まりやすいと思います。

回答2

1

Access-Control-Allow-Origin : https://hoge.jp, https://fuga.jp, https://hoge.fuga.jp

サーバー側で Origin のホワイトリスト、例えば上の https://hoge.jp, https://fuga.jp, https://hoge.fuga.jp というリストを保持して、クライアントから要求ヘッダで送られてくる Origin がホワイトリストの中に含まれていれば、サーバーから返す Access-Control-Allow-Origin にはクライアントから送られてきた Origin を設定するようにしてはいかがですか。

投稿2023/02/07 06:15

SurferOnWww

総合スコア17614

maisumakun👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

ベストアンサー

Access-Control-Allow-Origin に指定できるのは1つだけです。

投稿2023/02/07 06:18

jimbe

総合スコア11080

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。