我正在编写一个 API,并使用 Laravel 4 来实现。我的 api 位于不同的域。让我们假设它是:http://api-example.com/
当我尝试通过 Backbone 从我的 web 应用程序(即mydomain.com
)使用基本身份验证向我的 api 发出 ajax 请求时,它有时工作得很好,但有时却不行。我试图找出原因。下面是我的App::before
过滤器和App::after
过滤器。
App::before(function($request)
{
if($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
$statusCode = 204;
$headers = [
'Access-Control-Allow-Origin' => 'http://mydomain.com',
'Allow' => 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers' => 'Origin, Content-Type, Accept, Authorization, X-Requested-With',
'Access-Control-Allow-Credentials' => 'true'
];
return Response::make(null, $statusCode, $headers);
}
});
还有我的后过滤器:
App::after(function($request, $response)
{
$response->headers->set('Access-Control-Allow-Origin', 'http://mydomain.com');
$response->headers->set('Allow', 'GET, POST, OPTIONS');
$response->headers->set('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-Requested-With');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
return $response;
});
问题是当我尝试/login
使用凭据发出发布请求时,API 检查数据库并获取用户的 API 密钥。这工作正常。但是当我尝试向/users
chrome 发出 POST 请求时,只会给我以下错误:
XMLHttpRequest cannot load http://api-example.com/users. Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.
我尝试了一切,例如设置Access-Control-Allow-Origin
为'*'
我可以从互联网上找到的所有内容。但到目前为止没有任何效果。我不知道我应该怎么做。