Javascript CORS angular js+;轻松上岗
我正在做一些POST请求,从我的angular js应用程序到我的RESTful API,使用RestEasy实现Javascript CORS angular js+;轻松上岗,javascript,angularjs,resteasy,Javascript,Angularjs,Resteasy,我正在做一些POST请求,从我的angular js应用程序到我的RESTful API,使用RestEasy实现 情况是我需要CORS,因此我添加了一个servlet过滤器,其中包含以下代码: public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response
情况是我需要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”标头
资源
我的职位要求是:
$http({method: 'POST',
url: myUrl,
data: $scope.data,
headers: {'Content-Type': 'application/json'}
});
这是我在邮件中收到的回复:
Allow:POST, OPTIONS
Content-Length:0
Date:Thu, 03 Apr 2014 23:27:22 GMT
Server:Apache-Coyote/1.1
有什么想法吗?谢谢编辑:
在IE10上测试,可以工作,但在chrome和firefox上都不工作。。。有人知道为什么吗?我终于找到了解决办法:
它与IE一起工作的原因是IE直接发送一个POST,而不是首先发送一个飞行前请求以请求许可。
但我仍然不知道为什么过滤器无法管理选项请求,并在默认情况下发送过滤器中未描述的头文件(似乎是唯一一种情况下的覆盖…可能是一件容易的事情…) 因此,我在我的rest服务中创建了一个选项路径,该路径重写响应,并使用响应头将头包含在响应中 如果有人面临这个问题,我仍然在寻找一种干净的方法 以前
通过使用以下库,我很幸运地为我的API(在Wildfly上)配置了跨源资源共享(CORS):
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.1</version>
</dependency>
交易公司
cors过滤器
2.1
安装起来很容易。只需将上述依赖项添加到pom中,然后将以下配置添加到web.xml文件的webapp部分
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowGenericHttpRequests</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowSubdomains</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, HEAD, POST, DELETE, OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.maxAge</param-name>
<param-value>3600</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- CORS Filter mapping -->
<filter-name>CORS</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
科尔斯
com.thetransactioncompany.cors.CORSFilter
cors.allowgenerichtt前传
真的
金鸡儿
*
cors.allowSubdomains
假的
cors.supportedMethods
获取、标题、发布、删除、选项
cors.supportedHeaders
*
cors.supportsCredentials
真的
科斯马克萨奇酒店
3600
科尔斯
*
如果愿意,也可以使用属性文件对其进行配置。这个库工作起来很有魅力,给了你很大的配置灵活性 您如何使用GET进行请求?同样的方法,但使用“GET”而不是“POST”和另一个url,但使用相同的WSi。我认为您不需要显式地允许
内容类型
标题。尝试删除它。仍然不起作用,正如您在我的编辑中看到的,它的浏览器功能似乎。。。FF和chrome没有收到与IE上的IEworks相同的响应头,但在chrome或Firefox上没有?那是。