2017-10-13 4 views
0

WordPress APIを照会するときに起点ヘッダーのキャッシングと考えられる問題があります。しかし、私は何が起こっているのか、どのように修正できるのかを正確に調べるのには苦労しています。Access Control-Allow-Originとキャッシングの理解

ファースト - ここで何が起こっているのかです:

私はAJAXを経由してWP APIメニュープラグインによって追加のWordPress API、具体的にエンドポイントを照会ハブスポットのページを持っている - 私は、メニューを構築するようでワードプレスで更新する場合クライアント(またはマーケティングチームの1人) - メニューはHubSpotページでも更新されます。

ハブスポットのページには、WordPressのサイトのサブドメインである、と最初はWordPressのサイトには、ヘッダのアクセス制御 - 許可 - 起源は、明示的に設定だけサブドメインのURLを追加しました。

HubSpot内の編集画面を参照すると、メインメニューは読み込まれませんが、2番目の呼び出し(別のメニュー用)は成功します。次のようにメインメニューのエラーがある:

「アクセス制御は、許可原点」ヘッダが供給 原点に等しくない値 「http://subdomain.example.com」を有します。したがって、オリジン 'https://preview.hs-sites.com'は許可されません。

http://subdomain.example.comは、ライブページのURLです。不思議なことに、プレビューページの実際のURLはhttps://preview.hs-sites.comではありませんが、プレビューがiframeに読み込まれる可能性があるため、これが原因と思われます。

ライブURLに行くと、同じことが起こります。最初の呼び出しエラーですが、2番目のエラーは成功します。この時間は、次のようにエラーがある:

「アクセス制御 - 許可原点」ヘッダが供給 原点に等しくない値 「https://preview.hs-sites.com」を有します。したがって、オリジン 'http://subdomain.example.com'は許可されません。


質問1 - 原点が のWordPressサイトでキャッシュされているので、これは?

add_filter('allowed_http_origins', 'my_add_origins'); 
function my_add_origins($origins) { 
    $origins[] = 'https://preview.hs-sites.com'; 
    $origins[] = 'http://subdomain.example.com'; 
    return $origins; 
} 

質問2:次のように -

私は今allowed_http_originsのWordPress内フィルタの両方http://subdomain.example.comhttps://preview.hs-sites.comを追加しているにかかわらず、推定キャッシング - なぜ許容 https://preview.hs-sites.comではありません許可された起源は に追加されていますか?

私は上記の機能をテストする方法がわからないでした - ので、私はまた、次のことを試してみました:

add_action('rest_api_init', function() { 
    remove_filter('rest_pre_serve_request', 'rest_send_cors_headers'); 
    add_filter('rest_pre_serve_request', function($value) { 
     $domains = [ 
      'https://preview.hs-sites.com', 
      'http://subdomain.example.com' 
     ]; 
     $allowed = get_http_origin(); 
     if ($allowed && (in_array($allowed, $domains))) { 
      header("Access-Control-Allow-Origin:" . esc_url_raw($allowed)); 
     } elseif (!$allowed) { 
      header("Access-Control-Allow-Origin: http://subdomain.example.com"); 
     } 
     header('Access-Control-Allow-Methods: GET'); 

     return $value; 
    }); 
}); 

しかし、まったく同じエラーが発生します。

質問3:誰かがこのような状況で行わ を取り、どのようなエラーを言っているのプロセスを説明してくださいでした - 特に彼らはから値を取得しているところ - 起源は現在のページですが?そして、 'アクセス制御の許可元'ヘッダーに値 '...があります - これは の値がWordPressの アクセス制御許可原点ヘッダーとして設定されているもので設定されていますか?

Iはまた、AJAXリクエストでないキャッシュヘッダを設定しようとしたが、持っているので、プリフライトリクエストのこのエラー。また、リクエストにランダムなクエリーストリングを追加しましたが、効果はありません。

セキュリティ上の理由から、Access-Control-Allow-Originヘッダーとしてワイルドカード値を追加しないようにしたいと考えています。そして、私は本当に何が起こっているのか理解したいと思います!

答えて

1

Vary応答ヘッダーに値Originを追加して、サーバー応答に追加してみます。

Origin要求ヘッダーの値が、キャッシュされた要求の値のOriginと異なる場合、ブラウザにキャッシュをスキップさせて新しいネットワーク要求を行うという影響があります。

さらに詳しい情報は、the MDN article on the Vary response headerを参照してください。

Vary HTTPレスポンスヘッダは、キャッシュされた応答は、オリジンサーバからの新鮮なものを要求 ではなく、使用することができるかどうかを決定するために、将来の要求に ヘッダを一致させる方法を決定します。 サーバーは、コンテンツネゴシエーションアルゴリズムでリソースを表す を選択するときにどのヘッダーを使用したかを示すためにサーバーを使用します。

関連する問題