Javascript Angularjs';访问控制允许原点';使用Laravel CORS
我刚刚安装了Laravel CORS,据我所知,该模块运行良好,但我似乎仍然面临访问控制允许原点错误 无法加载XMLHttpRequest …I4OTYZMTJLYZYYMMMXOTVKNWI5YJNJYZM1MTCZNYISINMIOII2ZDCWZDG5N2FKOTQZDFKIN0=。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,源“”不是 允许访问 下面是执行该函数的角度代码:Javascript Angularjs';访问控制允许原点';使用Laravel CORS,javascript,angularjs,laravel,laravel-5,Javascript,Angularjs,Laravel,Laravel 5,我刚刚安装了Laravel CORS,据我所知,该模块运行良好,但我似乎仍然面临访问控制允许原点错误 无法加载XMLHttpRequest …I4OTYZMTJLYZYYMMMXOTVKNWI5YJNJYZM1MTCZNYISINMIOII2ZDCWZDG5N2FKOTQZDFKIN0=。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,源“”不是 允许访问 下面是执行该函数的角度代码: var SomeApp = angular.module('
var SomeApp = angular.module('SomeApp',['ngResource','ngSanitize'])
SomeApp.factory('SomeAppService', ['$resource', function($resource){
return {
firstActions : $resource(svrid('acns') + '/action/:payload',{payload:'@payload'},
{
'remove': {method:'DELETE',isArray:true, cache:false},
'save' : {method:'POST', isArray:true, cache:false},
'query' : {method:'GET', isArray:true,cache:false},
}, {cache:false}
),
//some more other functions
};
}]);
在进一步深入研究代码时,我意识到假设附加的头并没有包含在xhr请求中(请参阅下图)
我错过了什么
更新1:我稍微缩小了问题的范围,最有可能的问题是config\cors.php没有正确地传递给asm89。对这个问题不是很有信心,但我做了一些手动覆盖,当我手动将config\cors.php中的数组传递给asm89时,OPTIONS
会起作用,但另一方面会导致其他方法失败
更新2:我尝试手动更改Asm89\Stack\CorsService
下的一个部分,并为其设置如下默认值:
private function normalizeOptions(array $options = array())
{
$options += array(
'allowedOrigins' => array('*'),
'supportsCredentials' => true,
'allowedHeaders' => array('*'),
'exposedHeaders' => array('*'),
'allowedMethods' => array('*'),
'maxAge' => 0,
);
// Some other codes
// normalize array('*') to true
return $options;
}
并注释出一小部分
public function handlePreflightRequest(Request $request)
{
/*if (true !== $check = $this->checkPreflightRequestConditions($request)) {
return $check;
}*/
return $this->buildPreflightCheckResponse($request);
}
它对飞行前选项
和获取
方法非常有效,但发布
和删除
方法将提示我一个错误
请求的服务器上不存在“Access Control Allow Origin”标头
资源。因此,源“”不是
允许访问。响应的HTTP状态代码为500
飞行前选项
请求之后,您需要在服务器端添加CORS响应头。我遇到了一个类似的问题,所有跨域AJAX请求都可以工作,POST请求除外。POST响应将缺少“Access Control Allow Origin”标题,但GET和DELETE请求按预期运行
事实证明,我在php.ini中禁用了对不推荐的警告的抑制,并使用
$data = Input::json()->all();
在我的控制器中,PHP抛出了一个
PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
警告,然后是
PHP Warning: Cannot modify header information - headers already sent
警告
这意味着从未发送过我的自定义标题。我通过简单地抑制php.ini中不推荐使用的警告解决了这个问题。
我以后将不得不处理这个不推荐使用的问题,但目前它是从laravel中的JSON请求中获取POST数据的有效解决方法。如果我没有记错的话,您的响应中应该有Access Control Allow Origin标头,因此,您可能必须更新给出响应的服务器。@Shilly您是怎么做的?您是怎么做的?请参考此链接。OP试图包含的库的目的应该是这样做的。