【发布时间】:2014-05-16 00:14:25
【问题描述】:
我正在从我的 angular js 应用程序向使用 RestEasy 实现的 RESTful API 执行一些 POST 请求.
情况是我需要 CORS 所以我用这段代码添加了一个 servlet 过滤器:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.addHeader("Access-Control-Max-Age", "3600");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
chain.doFilter(req, res);
}
但我不明白为什么它只适用于 GET 请求而不适用于 POST 请求,chrome 控制台上的错误是:
请求中没有“Access-Control-Allow-Origin”标头 资源
我的 POST 请求是:
$http({method: 'POST',
url: myUrl,
data: $scope.data,
headers: {'Content-Type': 'application/json'}
});
这是我在 POST 上收到的回复:
Allow:POST, OPTIONS
Content-Length:0
Date:Thu, 03 Apr 2014 23:27:22 GMT
Server:Apache-Coyote/1.1
有什么想法吗?谢谢!
编辑:
在 IE10 上测试,它可以工作,但不能在 chrome 和 firefox 上工作......任何人都知道为什么?
【问题讨论】:
-
您如何使用 GET 请求?
-
方法相同,但使用 'GET' 而不是 'POST' 和另一个 url 但在同一个 WS 上
-
我认为您不需要明确允许
Content-Type标头。尝试删除它。 -
仍然不起作用,正如您在我的编辑中看到的那样,它的浏览器似乎... FF 和 chrome 没有收到与 IE 相同的响应标头
-
适用于 IE,但不适用于 Chrome 或 Firefox?那是odd。
标签: javascript angularjs resteasy