[英]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-Type
是text/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
,那么您還需要執行另外兩項操作:
Access-Control-Allow-Origin
標頭的值必須是Access-Control-Allow-Origin
的值(例如http://localhost
,它不能是*
)。 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.