2017-10-22 7 views
0

Chromeを使用して新しいレスポンシブウェブアプリを試してみると、モバイルでエラーが発生します。私はいくつかの異なる方法でPHPヘッダを追加することから、私のAjaxリクエストでヘッダを渡すことまで、すべてを行ってきました。ウェブ上では、CORSのオン/オフを切り替えることができるChromeの拡張機能であるCORSトグルを使用しました。これは、ウェブ上の問題を解決します。しかし、私はモバイルのためのこのような解決策を見つけるように見えることはできません。とにかくモバイルChromeでCORSをバイパスできますか?CORS Allow-Access-Control-Mobile Chromeでのアクセス

私はこれらの方法をすべて試してみましたし、何も動いていないようにみえ..

PHPオプション1:

<?php 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Allow-Headers: Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With'); 
    header('Access-Control-Allow-Methods: GET, PUT, POST'); 
?> 

PHPオプション2:

<?php 
    // Allow from any origin 
    if (isset($_SERVER['HTTP_ORIGIN'])) { 
     header("Access-Control-Allow-Origin: *"); 
     header("Access-Control-Allow-Credentials: true "); 
     header("Access-Control-Allow-Methods: OPTIONS, GET, POST"); 
     header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
    } 

    // Access-Control headers are received during OPTIONS requests 
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 

     if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
      header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 

     if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
      header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

     exit(0); 
    } 

    echo "You have CORS!"; 
?> 

jQueryのAJAX:

$.ajax({ 
      url: '<MY API ENDPOINT>', 
      method: 'POST', 
      headers: { 
      'Access-Control-Allow-Origin': '*', 
      'Access-Control-Allow-Headers': "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With", 
      'Access-Control-Allow-Methods': "GET, PUT, POST", 
      'Authorization': 
       'Bearer <MY TOKEN>', 
      'Cache-Control': 'no-cache' 
      }, 
      data: formData, 
      processData: false, 
      contentType: false 
     }).done(function(res) { 
+1

'Access-Control-Allow- *'ヘッダはクライアントではなくサーバによって設定されるため、ajax呼び出しに追加することは何もしません。そして、自分のサーバー上で_ "MY API ENDPOINT" _ですか?そうでなければ、あなたのPHPのヘッダーを設定するだけで何もしません。 –

+0

私はsalesforces 'api.einstein.ai/v2/vision/predictを使用しています – cal

答えて

0

acceを削除するssはあなたのajaxリクエストからヘッダーを制御します。アクセス制御ヘッダーは、W3C CORS仕様で定義されているように、ブラウザーによって自動的に設定されます。

ajaxリクエストに含めるヘッダーは、サーバーの応答を許可する必要があります。あなたの場合はAuthorizationCache-Controlです。それらをAccess-Control-Allow-Headersに追加します。

あなたのPHPコードのオプション2を使用してください。これには、cors preflight OPTIONS要求に対する応答が含まれます。そのため、オプション1は機能しません。