0

私のrestler3apiは、ローカルテストサーバーで正常に動作し、同じサーバーからの呼び出しの場合は本番サーバーで正常に動作しますが、リモートで呼び出しを行うと失敗します。

luracastオンラインの例で同じRESTクライアントを使用すると、リモートコールで正常に機能するため、構成(APIまたは本番サーバー)に何かが含まれている必要があります。

ヘッダーを送信する必要があるという言及を見つけたので、これらのヘッダーをindex.phpファイルに追加してみました。

header('Access-Control-Allow-Origin:  *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, PATCH, DELETE');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: *');

しかし、それは役に立ちませんでした。FirefoxでRESTClientアドオンを使用すると、これらのヘッダーが送信され、これらのヘッダーコマンドを使用するかどうかに関係なく、ブラウザーにローカルとリモートの両方でデータが表示されることがわかります。

呼び出しの例は次のとおりです: https ://api.masterpiecesolutions.org/v1/artists/?key = A4oxMOYEUSF9lwyeFuleug ==

その呼び出しの私のindex.phpはこれを使用し、2番目のパラメーターをルートレベルにマップします

$r->addAPIClass('Artists', '');

それが適切かどうかわからない。

また、本番サーバーはAmazon EC2なので、セキュリティポリシーと関係があるのではないでしょうか。

または、他のヘッダーの問題でしょうか?グーグルクロームでは、Advanced Rest Client拡張機能を使用して、ステータスを提供し403 Forbidden、 (ローカルサーバーまたはリモートサーバーを使用してContent-Typeいるtext/plainかどうかにかかわらず)Firefoxアドオンとは異なり、まったく機能しません。

Restler.phpでもの使用が見られますが$_SERVER['HTTP_ORIGIN']、これはまだどこでもサポートされていないようです。

4

2 に答える 2

1

*Access-Control-Allow-Headersは応答ヘッダーの有効な値ではありません。単純でないリクエストヘッダーをすべてリストする必要があります。例えば:

header('Access-Control-Allow-Headers: Content-Type');

また、単一のオリジン値またはヘッダーのみ*を配置することを検討してください。Access-Control-Allow-OriginサンプルURLにアクセスしましたが、そのヘッダーには複数の値があります。これはCORS仕様に従って機能するはずですが、まだあまり広く採用されていません。

最後に、サーバーが設定されていることに気づきましたAccess-Control-Allow-Credentials: true。これをに設定するとtrue、他に2つのことも行う必要があります。

  1. ヘッダーのAccess-Control-Allow-Origin値は、Originの値である必要があります(たとえばhttp://localhost、できません*)。
  2. xhr.withCredentials = true;JavaScriptクライアントコードを設定する必要があります。

テストしているだけの場合は、Access-Control-Allow-Credentialsヘッダーを設定せずに動作させるようにしてください。デバッグが容易になります。

于 2013-03-10T11:51:45.373 に答える
1

少なくとも私にとっての問題はSSLを使用することであり、restclientクラスはそれに対応していませんでした。

そこで、(phpclasses.orgからRestClient.class.phpに)curl_setopt($ this-> curl、CURLOPT_SSL_VERIFYPEER、false);を追加しました。// SSLの場合、これで機能します。

public static $ crossOriginResourceSharing=true;を設定することも必要でした。Restler3のDefaults.phpにあります。

于 2013-03-13T16:39:58.350 に答える