我有一个grails 2.2.4申请。我想启用CORS 所以我在build config中安装了以下行来安装cors插件。
plugins {
runtime ':cors:1.1.8'
}
然后在config.groovy
中cors.headers = ['Access-Control-Allow-Origin': '*']
但在此之后,当我运行应用程序时,CORS未启用。所以我调试了CORS插件。问题似乎是CorsFilter类中的以下方法
private boolean checkOrigin(HttpServletRequest req, HttpServletResponse resp) {
String origin = req.getHeader("Origin");
if (origin == null) {
//no origin; per W3C spec, terminate further processing for both preflight and actual requests
return false;
}
上面一行中的origin参数始终为null,因为请求没有参数'Origin'。有什么我做错了吗?我不是在寻找答案,说明添加一个名为“Origin”的手动标题,因为这不是一个正确的修复
我对CORS很陌生,所以请求帮助。
答案 0 :(得分:1)
除了Access-Control-Allow-Origin之外,除了根据请求设置Origin头之外,您可能还需要指定这些响应头:
另外,请确保使用这些标头和空白200 OK响应来响应HTTP OPTIONS请求。
答案 1 :(得分:0)
现在,让我们假设RestClient正在正确发送Origin头。它可能仍会被您的应用程序剥离。您可以使用SELECT * FROM datatables_demo where CONCAT(first_name, last_name, position, office) REGEXP 'T';
标题来阻止此操作。
我的Web服务遇到的大多数问题都是正在发送正确的标头,但是我的网络服务器将它们从邮件中删除。所以我倾向于采用一种霰弹枪的方式来实现一切"然后一个接一个地删除我不需要的东西。我的allow-headers标头通常很长,我最终必须在我的请求最终通过之前包含Access-Control-Allow-Headers: Origin
和其他垃圾之类的东西。
我还建议您使用除RestClient之外的其他内容进行测试,如果仅作为完整性检查。我使用免费的Chrome应用Postman进行所有的消息传递测试。在我看来,问题是RestClient没有发送正确的Origin头。