rest - 不允许对 Tomcat 服务器的 ExtJS PUT 请求

标签 rest http tomcat extjs

为了创建和更新这些记录,我实现了一个包含记录和表单的网格。当编辑一条记录并在之后保存时,客户端会经过以下几行:

var form = this.getView().getForm();
var record = form.getRecord();
record.beginEdit();
var updatedRecord = form.getValues();
record.set(updatedRecord);
record.endEdit();

通过这样做,客户端将向 Tomcat 服务器发送一个 PUT 请求,请求体中包含更新后的参数。

tomcat 服务器允许在 web.xml 中设置的所有 HTTP 消息:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

当我使用浏览器插件发送 HTTP 请求时,一切正常,正如我们在此响应中所见:

Status Code: 200 OK
Allow: PUT
Content-Language: en
Content-Length: 190
Content-Type: application/json
Date: Mon, 22 May 2017 12:21:40 GMT
Server: Apache-Coyote/1.1

但是当 ExtJS 发送 PUT 请求时,我得到以下响应:

HTTP/1.1 405 Method Not Allowed
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://localhost:1337
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials
Allow: DELETE,GET,OPTIONS
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 1056
Date: Mon, 22 May 2017 11:55:37 GMT

为什么tomcat不允许PUT、GET和POST,如果ExtJS发送PUT请求。 当 ExtJS 发送 POST 请求时,一切正常,我得到以下响应:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:1337
Access-Control-Expose-Headers:Access-Control-Allow-Origin,Access-Control-Allow-Credentials
Content-Length:225
Content-Type:application/json
Date:Mon, 22 May 2017 12:59:07 GMT
Server:Apache-Coyote/1.1 

我必须做什么才能让 Tomcat 允许 PUT 消息?

最佳答案

您必须在 EXTJS 存储的 proxy 配置中指定 headers

proxy: {
    headers: {'Content-Type': "application/json" }
    ...
}

我认为通过指定 header 您的问题应该可以解决。

我认为 actionMethod 也会产生问题。

默认extjs的store发送GET请求但是如果你想让它发送PUT请求那么你可以在actionMethods<中指定 配置

proxy: {
    actionMethods: {
            read : 'PUT',
            create : 'POST', 
            update : 'PUT', 
            destroy : 'DELETE'
        }
...
}

请引用link .

关于rest - 不允许对 Tomcat 服务器的 ExtJS PUT 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113593/

相关文章:

java - Spring Boot REST API - 显示信息的问题

api - Thrift 作为 REST 的公共(public) API 替代品?

powershell - 如何获取GET参数?

swift - 尝试访问 Alamofire 中的错误代码

Java Spring Web 应用程序 - 未找到 HTTP 请求的映射

tomcat - netbeans tomcat清除日志文件

java - 为什么我不能调用这个简单的 Web 服务?

rest - 找不到媒体类型的 MessageBodyWriter={application/xml, q=1000} - Jersey + Jaxb

http - 通过 http 传输文件的二进制差异(增量)并在服务器上合并差异

java - 当 apache2 服务器和 apache tomcat 服务器都安装在我的 linux 机器上时出现问题