5

私はWeb開発の新人であり、Webで多くの苦労をした後、解決策にたどり着きました。十分に文書化されておらず、他の誰かが使用できる可能性があると感じ、フィードバックが必要なため、共有しています。

特定のドメインにAPIへのアクセスを許可したかったのです。

まず、リクエストのヘッダーを設定しようとしましたが、2つの理由でまったく機能しませんでした。

最初の理由は、crossdomain.xmlで許可していなかったことです。

    <cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
          <allow-http-request-headers-from domain="domain1WithoutSlashAtTheEnd" headers="*"/>
          <allow-http-request-headers-from domain="domain2WithoutSlashAtTheEnd" headers="*"/>
    </cross-domain-policy>

2つ目の理由は、「access-control-allow-origin」ヘッダーが役に立たないときに設定しようとしたことです。このようなカスタムヘッダーは無視されます。実際、サーバーはそのようなものを必要とせず、彼のデフォルトの動作により、次のようにフィルターで処理できた呼び出しの発信元(ドメイン)を取得できました。

    String origin = hsRequest.getHeader("Origin");
    if (allowedDomainList.contains(origin)) {
      hsResponse.setHeader("Access-Control-Allow-Origin", origin);
    } else {
      throw new SomeException("domain not allowed");
    }

ここで、「allowedDomainList」は、APIへのアクセスを許可するすべてのドメインを指定する文字列のリストです。うまくいくようです。あなたはそれについてどう思いますか?具体的には次の点について教えてください。

    headers="*"

たぶん「Access-Control-Allow-Origin」とだけ言ってください。次に、「安全な」属性があることを確認しましたが、それをどうすればよいかわかりません。

私はすでに持っているそのコードにも問題があります:

    <!DOCTYPE cross-domain-policy 
    SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
      <cross-domain-policy>
        <allow-access-from domain="*" />
      </cross-domain-policy>

そして、それが私の政策の振る舞いにどのように干渉するのだろうか。影響はないようですが、crossdomain.xmlは私には非常に不明確です。

最後のポイントはjQuery(http://api.jquery.com/jQuery.ajax/)についてです。サーバー側でヘッダーを取得できないのに、jQueryにヘッダーを設定するものがあるのはなぜですか?さらに、ヘッダーを「与える」には、「beforeSend」と「headers」の2つの方法があります。これらの2つのポイントは私には意味がなく、上記のように、最終的には多くの時間を無駄にすることになりました。

返信ありがとうございます!

4

1 に答える 1