从javascript web-service客户端发送CORS POST请求返回http 405错误

时间:2015-08-18 08:28:17

标签: javascript jquery web-services rest cors

几天前,我实施了一项网络服务(包括客户端和服务器)。客户端正在向XMLHttpRequest()发送请求,这很好。但是,今天我正在尝试将请求从它发送到jquery的$ .ajax();办法。

为此目的,这是我的客户端功能:

function ajaxQuery(){
  $.ajax({
   url: 'http://localhost:8080/recommender/sider/drugs',
   method:'POST',
   dataType: 'json',
   contentType: 'application/json',
   data: JSON.stringify({"uris":["SampleName1", "SampleName2", "SampleName3"],"limit":100 }),
   xhrFields: {
      withCredentials: true
   }
}).done(function(data) { console.log(data) });
}

这是我在服务器端使用的过滤器:

public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain filterChain) throws IOException, ServletException {

        if (response instanceof HttpServletResponse) {
            HttpServletResponse alteredResponse = ((HttpServletResponse) response);
            addCorsHeader((HttpServletRequest) request, alteredResponse);
        }

        filterChain.doFilter(request, response);
    }

    private void addCorsHeader(HttpServletRequest request, HttpServletResponse response) {
        response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000");
        response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
        response.addHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept, X-Requested-By");
        response.addHeader("Access-Control-Allow-Credentials", "true");
        response.addHeader("Access-Control-Max-Age", "1728000");
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
}

不幸的是,当我发送此POST请求时,我收到了http 405错误,这是我错误部分的屏幕截图。 https://www.dropbox.com/s/3wqlqkbnqwnjllx/Screenshot%202015-08-18%2011.27.29.png?dl=0

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

您实际上是在发送GET请求,而不是POST。您在method中使用了$.ajax。我怀疑你有一个低于1.9.0的jQuery版本,应该使用type代替。

$.ajax({
   ...
   type:'POST',
   ...

根据文档(http://api.jquery.com/jquery.ajax/):

  

method的别名。如果您使用的是1.9.0之前的jQuery版本,则应使用type

答案 1 :(得分:0)

我认为您需要将数据类型更改为 jsonp

{dataType: 'jsonp'}