我们有两个用于UI和服务器的项目,它们都运行在不同的域上。对于UI,我们使用angular JS,对于服务器端,我们使用spring,并向客户端提供JSON响应。由于CORS问题,我们无法与服务器通信。我们在谷歌上搜索了一下,尝试了不同的解决方案。我们找到了下面的链接。
我们确实做了链接中提到的任何事情。它适用于GET请求,但不适用于POST请求。当我们做POST请求时,我们得到了400个坏请求。请查看以下详细信息。
响应头:http/1.1 400错误请求服务器:apache-coyote/1.1 access-control-allow-origin:*access-control-allow-methods:POST,GET,OPTIONS,DELETE access-control-allow-headers:Origin,x-requested-with,Content-Type,Accept Content-Type:text/html;charset=utf-8 content-language:en content-length:1113 date:Mon,28 Sep 2015 09:33:21 GMT连接:close
请求头:POST/controller/addlogin http/1.1主机:192.168.5.131:8080连接:keep-alive内容-长度:41 pragma:no-cache cache-control:no-cache接受:application/json,text/plain,/origin:localhost:1337用户-代理:mozilla/5.0(Windows NT 6.1;WOW64)appleWebkit/537.36(KHTML,像Gecko)chrome/45.0.2454.101 safari/537.36内容-类型:application/json;charset=utf-8引用:
在得到这些信息之后,我们在客户端添加了下面的行,就像我们在StacloverFlow的一些解决方案中看到的那样。但错误仍然保持不变。
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.headers.common['Access-Control-Allow-Credentials'] = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.defaults.headers.post['Content-type'] = "application/json";
请帮助我们解决这个问题。
更新问题:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'corsFilter' is defined for enabling cors.
为了解决这个问题,我们创建了bean
<bean id="corsFilter" class="com.prototype.helper.SimpleCORSFilter" />
在root-context.xml文件中。但我们仍然没有运气,我们仍然收到400个坏的请求
发布http://ip address:8080/controller/addlogin 400(错误请求)。
public class SimpleCORSFilter extends OncePerRequestFilter {
// private Set<String> whitelist = Sets.newHashSet("[AllowedOrigin1]", "[AllowedOrigin2]");
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String originHeaderFromClient = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", originHeaderFromClient);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization,Content-Type");
filterChain.doFilter(request, response);
}
}
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果检查浏览器中的developer options中的network选项卡,您可能会看到浏览器在进行POST调用之前对服务器进行了options调用。
Spring的DispatcherServlet默认情况下阻止OPTIONS调用进入应用程序。也就是说,期权调用不会通过。您的浏览器认为您试图到达的服务器不支持CORS,因此阻止呼叫通过。
我们在web.xml中使用delegatingfilterproxy
实现了一个筛选器并将其连线,如下所示:
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
并在筛选器的doFilter
方法中执行以下操作:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
String originHeaderFromClient = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", <<acceptedOrigins>>;
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization,Content-Type");
chain.doFilter(request, response);
这样,所有调用都将获得access-control-allow-origin
头,而不考虑get/POST。它还使控制器不受CORS报头特定设置的影响(如果您有多个控制器,这是一个麻烦)。
通过邮递员API正在工作,但相同的API不与改造工作,我收到400个错误的改造要求 返回true或false的endpoint@POST(“/emrmegax/api/allscript/saveappointment”)调用saveappointment(@Header(“x-auth-token”)字符串header1,@Body字符串yy);
我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s
问题内容: 我正在尝试使用Jquery发送Ajax POST请求,但是我遇到了400错误的请求错误。 这是我的代码: 它说:无法根据请求构建资源。我想念什么? 问题答案: 最后,我弄错了,原因是我需要对发送的JSON数据进行字符串化处理。我必须在XHR对象中设置内容类型和数据类型。所以正确的版本在这里: 可能会帮助别人。
我正在寻找200 OK请求。
我试图从一个Angular控制器执行POST操作,当我的Java RestController不需要任何参数(例如,下面的签名只是)时,它就可以工作,但是一旦我告诉它需要一个参数,并试图在Angular的POST请求中发送它,它就会失败,出现。是否需要做一些事情来从一个角帖子中正确地发送数据?
我想我会在这里问这个问题,因为我不太确定我会错在哪里。我正在尝试使用Django Rest框架类通过AJAX执行POST请求。但是,每当事件触发时,我都会收到以下错误: 这是堆栈跟踪中显示的内容: 上下文 我试图做到这一点,当用户单击“添加到列表”按钮时,它会向用户定义的列表发送一个cafeName(以及最终的其他详细信息)。 我想知道是否有人可以看看我的代码,并给我一些指导,我哪里出了问题? 代