一则“HTTP 405 Method Not Allowed”的解决办法

在angular 1.4版本的项目中,程序一直运行正常,突然有一天,在提交表单时,提示“HTTP 405”错误——“Method Not Allowed”。

从字面上的意思理解,很显然是提交方法的类型错误,要么是以GET方式向POST接口提交数据,要么是POST方式项GET接口提交数据,但反反复复检查了后端接口与提交方式,都是POST,完全没有问题。

仔细检查前端代码,发现编写方式如下:

$http({
    method : 'POST',
    url : '/test',
    params : {
        cycle : key,
        emp_id : user.id
    }
 }).success(function (resp) {
    //  处理逻辑
 });

这样的编程方式有两个问题:
1. 提交的参数暴露在外;
2. 默认提交的Header参数“content-type”为“application/json”;

但经过反复的实验,请参见《浏览器查询参数与表单数据的优先级》,第一个问题不会导致405错误,所以很容易确定问题所在,解决办法是明确指定“content-type”,如下:

$http({
    method : 'POST',
    url : '/test',
    params : {
        cycle : key,
        emp_id : user.id
    },
    //  新增content-type头部属性
    heads : {
        'content-type' : 'application/x-www-form-urlencoded'
    }
 }).success(function (resp) {
    //  处理逻辑
 });

如果要解决第一个问题,那么只需要引入$httpParamSerializer服务即可,如下:

$http({
    method : 'POST',
    url : '/test',
    //  以表单方式提交,将Object转换为form参数方式
    data : $httpParamSerializer({
        cycle : key,
        emp_id : user.id
    }),
    //  新增content-type头部属性
    heads : {
        'content-type' : 'application/x-www-form-urlencoded'
    }
 }).success(function (resp) {
    //  处理逻辑
 });

结论

在发生HTTP 405错误,不妨首先检查下请求头部的“content-type”信息。

### 回答1: 405 (method not allowed) 是一种HTTP状态码,表示请求的HTTP方法不允许被服务器处理。这通常是因为客户端使用了不支持的HTTP方法,或者服务器没有实现该 HTTP 方法。 HTTP协议定义了一组标准HTTP方法,如GET、POST、PUT、DELETE、HEAD等,在与服务器通信时,客户端发送的请求必须包含这些HTTP方法之一。如果服务器不能处理该HTTP方法,则会返回405错误响应。 举个例子,如果你在网页上点击一个链接或提交表单,但该服务器只允许使用POST方法提交数据,而你使用了其他的HTTP方法,如PUT或DELETE等,则会收到405错误响应。 要解决这个问题,可以检查请求中的HTTP方法是否正确并使用正确的HTTP方法重新发送请求。如果是开发者,需要确保服务器已经实现相应的HTTP方法,或者使用适当的中间件或框架来处理HTTP请求。 总之,405 (method not allowed)错误提示是HTTP通信中比较常见的错误之一,需要了解这个错误的含义和可能的原因,以便更好地诊断和解决问题。 ### 回答2: HTTP 405状态码代表了无法使用请求方法对所请求的资源进行操作。换句话说,服务器不支持请求方法,因此该操作失败。405错误通常是由于客户端使用了不正确的HTTP方法,或者向服务器发送了不被服务器支持的未知方法造成的。 请求方法通常包括​​GET、POST、PUT、DELETE等。常见的例子是,用户试图使用POST请求从服务器删除资源,但服务器不支持使用POST方法进行删除操作。此时,服务器会向客户端发送一个HTTP状态码405,告诉客户端该操作不能被执行。 为了解决此问题,客户端在使用HTTP协议时应遵循HTTP协议的规范。如果不能确定正确的HTTP方法,客户端应该向服务器发送一条OPTIONS请求,以获取所有可用的HTTP方法和其他支持信息。除此之外,服务器还可以直接在响应中告知客户端所支持的HTTP方法,以帮助客户端选择正确的方法。 总而言之,405错误通常源于客户端发送了不可用的HTTP方法。解决方法是通过OPTIONS请求或直接从服务器获取支持信息,也可以在客户端端尝试使用其他可用的HTTP方法,以便完成所需的操作。 ### 回答3: 405 (Method Not Allowed)指的是一种HTTP状态码,表示在请求中使用了不支持的HTTP方法。当客户端使用一个不支持的HTTP方法请求一个服务器时,服务器通常会返回405错误,告诉客户端请求被拒绝。 在Web开发中,常见的HTTP方法包括GET、POST、PUT、DELETE、HEAD、OPTIONS等等。如果一个请求使用了服务器不支持的HTTP方法,那么服务器就会返回405错误,表示请求无法被处理。 当出现405错误时,通常需要检查以下几个方面: 1. 确认请求所使用的HTTP方法是否被服务器支持。如果不确定,可以查看HTTP请求的“Method”字段。 2. 确认请求的URL是否正确。有时候请求URL可能包含错误的路径或参数,导致服务器无法识别。 3. 检查服务器端设置,确认是否允许客户端使用该HTTP方法访问某个资源。有些服务器可能会限制客户端使用某些HTTP方法,例如DELETE方法可能被禁止使用。 在开发过程中,为了避免出现405错误,建议开发者仔细阅读文档,理解服务器支持的HTTP方法和对应的用法,同时要注意异常处理和错误提示,及时向客户端返回错误信息,便于定位和解决问题。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值