簡體   English   中英

restler 3跨域無效

[英]restler 3 cross domain not working

我的restler 3 api在本地測試服務器上工作正常,並且如果來自同一服務器的調用在生產服務器上正常工作,但是如果我遠程調用那么它就失敗了。

使用相同的休息客戶端和luracast在線示例,它可以正常使用遠程調用,所以必須是我的配置(我的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-21

我的index.php用於該調用,使用第二個參數映射到根級別

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

不知道這是否相關。

此外,生產服務器是Amazon EC2,所以可能與安全策略有關?

或者,也許是其他一些標題問題? 在谷歌瀏覽器中,使用Advanced Rest Client擴展,它提供403 Forbidden狀態和Content-Typetext/plain (無論是使用本地服務器還是遠程服務器)因此它根本不起作用,與firefox插件不同。

我也看到在Restler.php中使用$_SERVER['HTTP_ORIGIN'] ,這似乎並不是所有地方都支持嗎?

*不是Access-Control-Allow-Headers響應標頭的有效值。 您需要列出每個非簡單請求標頭。 例如:

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

還要考慮為Access-Control-Allow-Origin標頭放置單個原始值或* 我剛訪問了您的示例網址,該標頭中有多個值。 雖然這應該符合CORS規范,但尚未廣泛采用。

最后我注意到服務器正在設置Access-Control-Allow-Credentials: true 如果將其設置為true ,那么您還需要執行另外兩項操作:

  1. Access-Control-Allow-Origin標頭的值必須是Access-Control-Allow-Origin的值(例如http://localhost ,它不能是* )。
  2. 你需要設置xhr.withCredentials = true; 在您的JavaScript客戶端代碼中。

如果您只是在測試,那么您應該嘗試在不設置Access-Control-Allow-Credentials標頭的情況下完成工作。 它將使調試更容易。

至少對我來說問題是使用SSL而且restclient類不適應這個問題。

所以我添加了(來自phpclasses.org的RestClient.class.php)curl_setopt($ this-> curl,CURLOPT_SSL_VERIFYPEER,false); //用於SSL,現在可以使用了。

還需要設置public static $ crossOriginResourceSharing = true; 在Rests. 3的Defaults.php中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM