Http 使用CORS从dart应用程序发布到laravel 4 api时出错
我有一个使用Laravel4开发的RESTAPI。客户端使用Dart语言编写 当我的Dart应用程序执行GET-it操作时,一切正常,但当它执行post操作时,我会出现以下错误:Http 使用CORS从dart应用程序发布到laravel 4 api时出错,http,laravel,laravel-4,dart,cors,Http,Laravel,Laravel 4,Dart,Cors,我有一个使用Laravel4开发的RESTAPI。客户端使用Dart语言编写 当我的Dart应用程序执行GET-it操作时,一切正常,但当它执行post操作时,我会出现以下错误: XMLHttpRequest cannot load http://localhost:8000/api/v1/users. Origin http://127.0.0.1:3030 is not allowed by Access-Control-Allow-Origin. 我的Dart函数发出请求: 无效提交表单
XMLHttpRequest cannot load http://localhost:8000/api/v1/users. Origin http://127.0.0.1:3030 is not allowed by Access-Control-Allow-Origin.
我的Dart函数发出请求:
无效提交表单e{
e、 preventDefault;//不执行默认提交。
请求=新的HttpRequest;
request.onReadyStateChange.listendata;
//获取基本身份验证凭据
var auth_string='admin:admin';//用于创建新用户帐户的默认管理员登录
var auth_base64=window.btoaauth_字符串;
var授权='Basic'+auth_base64;
//将数据发布到服务器。
var url='1〕http://localhost:8000/api/v1/users';
请求。打开“POST”,url;
request.withCredentials=true;
setRequestHeader'Authorization',Authorization;
setRequestHeader'Content-Type','application/json';
打印筛选的注册数据;
request.sendsiftedregistrationAsJsonData;
}
My Laravel 4在filters.php中定义的过滤器之前和之后:
App::beforefunction$请求
{
如果$\u服务器['REQUEST\u METHOD']='OPTIONS'{
$statusCode=204;
$headers=[
'访问控制允许来源'=>'http://localhost:3030',
'访问控制允许方法'=>'获取、发布、放置、删除、选项',
'访问控制允许标头'=>'来源、内容类型、接受、授权、X请求-带',
“访问控制允许凭据”=>“true”,
“访问控制最大年龄”=>“86400”
];
返回响应::makenull,$statusCode,$headers;
}};
App::afterfunction$request$response
{
$response->headers->set'Access-Control-Allow-Origin','http://localhost:3030';
$response->headers->set'Access-Control-Allow-Methods'、'GET、POST、PUT、DELETE、OPTIONS';
$response->headers->set'Access-Control-Allow-headers'、'Origin、Content-Type、Accept、Authorization、X-request-With';
$response->headers->set'Access-Control-Allow-Credentials'、'true';
$response->headers->set'Access-Control-Max-Age','86400';
返回$response;
};
这是我使用Chrome开发工具得到的标题:
Request URL:http://localhost:8000/api/v1/users
Request Method:OPTIONS
Status Code:204 No Content
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8000
Origin:http://127.0.0.1:3030
Referer:http://127.0.0.1:3030/Users/salarrahmanian/Dropbox/Projects/phpstorm/sifted/app/dart/web/out/sifted.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1530.0 (Dart) Safari/537.36
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin, Content-Type, Accept, Authorization, X-Requested-With
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:http://localhost:3030
Access-Control-Max-Age:86400
Cache-Control:no-cache
Connection:close
Content-Type:text/html; charset=UTF-8
Date:Wed, 10 Jul 2013 18:38:42 GMT
Host:localhost:8000
X-Powered-By:PHP/5.4.14
Your help and input on this really appreciated.
非常感谢。您允许原产地http://localhost:3030,但随后要求http://127.0.0.1:3030.
更改:
$response->headers->set('Access-Control-Allow-Origin', 'http://localhost:3030');
到
注意:不幸的是,在使用授权时,您无法将Allow Origin设置为“*”——仅供参考,以防您也尝试过。我认为没有设置标题,您是否使用Firebug或chrome调试工具检查了标题?我不确定,但它是否正确处理了地址差异?您通过ip在浏览器中打开,标题中是主机名?可能会有所不同…添加标题我回到原始帖子尝试了您的建议,但我仍然遇到相同的问题:-
$response->headers->set('Access-Control-Allow-Origin', 'http://127.0.0.1:3030');