从 javascript Web 服务客户端发送 CORS POST 请求返回 http 405 错误

Posted

技术标签:

【中文标题】从 javascript Web 服务客户端发送 CORS POST 请求返回 http 405 错误【英文标题】:Sending CORS POST request from javascript web-service client return http 405 error 【发布时间】:2015-11-11 02:08:45 【问题描述】:

几天前,我实现了一个网络服务(客户端和服务器)。客户正在使用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

我应该如何处理这个问题?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

dataType: 'jsonp'

【讨论】:

以上是关于从 javascript Web 服务客户端发送 CORS POST 请求返回 http 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法使用javascript向ASP.NET web api Controller发送http POST请求

从 web 服务器获取数据并将它们发送到客户端 c++

将文件从 REST Web 服务发送到客户端的正确方法是啥?

如何将音频 blob 从 javascript 发送到 java spring 服务器?

如何将数据从 Web 套接字服务器发送到客户端?

如何从我的休息服务发送一个 json 对象,以便我可以在客户端 javascript 上解析出来