[英]Access-Control-Origin within Slim Framework and Ember.js
在閱讀了很多問題/答案后,我決定發帖。 我認為Slim Framework - jQuery $ .ajax請求 - Access-Control-Allow-Methods不允許使用方法DELETE來匯總我找到並嘗試過的大部分信息。
我正在使用MAMP和PHP 5.6進行開發,但生產環境很可能是共享主機。 我也在使用ember.js
當ember執行POST請求時,我得到Access-Cross-Origin消息:
XMLHttpRequest無法加載http://foo.bar/ 。 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此不允許來源' http:// localhost:4200 '訪問。
我知道在服務器上設置適當的標頭可以解決問題,但我不知道何時這樣做。 我目前在Slim框架中做的是:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
$app->options('/(:name+)', function() use($app) {
$response = $app->response();
$app->response()->status(200);
$response->header('Access-Control-Allow-Origin', '*');
$response->header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, X-authentication, X-client');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
});
但是,我檢查了Ember.js請求,它沒有請求OPTIONS
,因此沒有設置正確的標頭。
如果我在Slim的單個路徑中設置標題,那么它可以正常工作。 但我不想一個接一個地在每條路線上設置標題。
如何設置所有路由的標頭?
CorsSlim是你的朋友:
<?php
$app = new \Slim\Slim();
$corsOptions = array(
"origin" => "*",
"exposeHeaders" => array("Content-Type", "X-Requested-With", "X-authentication", "X-client"),
"allowMethods" => array('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS')
);
$cors = new \CorsSlim\CorsSlim($corsOptions);
$app->add($cors);
您可以這樣做,而不是向項目添加新包
$app->add(function ($req, $res, $next) {
$response = $next($req, $res);
return $response
->withHeader('Access-Control-Allow-Origin', 'http://mysite')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
});
https://www.slimframework.com/docs/v3/cookbook/enable-cors.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.