CORS 超薄框架。对 apache 的 Angular 请求不起作用
Posted
技术标签:
【中文标题】CORS 超薄框架。对 apache 的 Angular 请求不起作用【英文标题】:CORS slim framework. Angular request to apache not working 【发布时间】:2016-03-23 06:57:01 【问题描述】:我有一个 chorme 插件,它允许我通过插入标题来切换 CORS。如果我使用它,我的苗条代码就可以工作。如果没有,那么我会收到如下错误。
(index):1 XMLHttpRequest 无法加载 http://localhost/api/flowers。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:9000” 访问。
我的代码
$app = new \Slim\Slim(); $app->response->headers->set('Content-Type', 'application/json'); $app->response->header('Access-Control-Allow-Headers',> '内容类型'); $app->response->header('Access-Control-Allow-Methods', 'GET, PUT, 发布,删除'); $app->response->header('Access-Control-Allow-Origin','*');
$app->get('/', function() 使用($app)
$ins = new Lead(); $products = $ins->run(); 回声 json_encode($products); );
如果我使用 crome 扩展,那么来自服务器的标头响应如下。
HTTP/1.1 200 OK 日期:2015 年 12 月 16 日星期三 23:04:26 GMT 服务器: Apache/2.4.7 (Ubuntu) X-Powered-By: php/5.5.9-1ubuntu4.14 访问控制允许标头:内容类型 访问控制允许方法:GET、PUT、POST、DELETE Access-Control-Allow-Origin: * Keep-Alive: timeout=5, max=100 连接:保持活动传输编码:分块内容类型: 应用程序/json
所以标题正在发送。但是如果没有扩展,CORS 仍然无法工作。当然,我需要为所有浏览器解决这个问题。不只是我的。我很确定这是一个小错误,但我没有看到它。这里有什么问题?
【问题讨论】:
localhost:9000 是 nodejs。 localhost:8080 是 apache 【参考方案1】:您的系统需要处理“选项”路由。
浏览器使用同一 URL 的 OPTIONS 请求。所以本质上你需要处理 2 个请求。
如果你添加一个 $app->options("/:name+");它应该修复它。
【讨论】:
你能详细说明吗? 这是一条包罗万象的路线。一些浏览器会发送一个 pre-flight OPTIONS 请求,以确保浏览器实际上能够请求相关资源。您必须将 CORS 标头附加到此 OPTION 请求和实际资源的响应中。以上是关于CORS 超薄框架。对 apache 的 Angular 请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Apache 如何以及为啥拦截对 Rails 的一些 CORS 请求?
对 Apache CXF 2.4 (JAX-RS 1.1) 的 CORS 支持
Apache Shiro 正在破坏我的 Spring Boot Rest API 的 CORS 配置