昨天逛站长论坛,刚好看到有人问,网站好好的突然弹出来网站405错误,到底是哪里出问题了?其实这个错误说少见也少见,说常见吧,碰到配置不对的时候,十有八九会遇上。我之前帮朋友排查过好几次,总结下来都是那几个老问题,今天就掰扯掰扯,方便大家碰到了自己对着找,不用瞎折腾半天摸不着头脑。

网站405错误的核心本质是什么
先给不太懂的朋友理一理,405本质上是HTTP协议里的一个状态码,和大家熟悉的404、500这些是一类的。404说的是找不到资源,500是服务器内部错误,那405呢?它的官方解释是「方法不被允许」,说白了就是你发送给服务器的请求方法,服务器不接受,所以给你返回了这个错误。打个比方,你去餐厅吃饭,本来点餐要用前台点,你非要跑到后厨去点,后厨不接受你的点餐,就相当于给你甩了个405,就是这么个事儿。
请求方式前后端配置不匹配
这是我碰到过最多的情况,十个405里有五六个都是这个原因。现在很多网站都是前后端分离开发,后端会给前端开一个个接口,每个接口都规定了能用什么请求方式,最常用的就是GET和POST两种。如果前端发请求的时候用了后端不接受的方式,比如后端规定接口只能用GET接收参数,前端非要发POST,那不就撞枪口上了?
举个实际例子,你做了一个登录表单,代码里写死了用POST提交到接口,结果后端接口只开了GET权限,那你点登录按钮的时候,直接就出405了。这种情况开发阶段其实很容易碰到,就是前后端对接的时候没对齐接口文档,或者谁改了接口忘了通知对方。还有一种情况,就是你改了网站的伪静态规则,或者换了web服务器之后,原来的路由规则没转对,旧的链接带着错误的请求方式过来,也会触发405。我之前就碰到过一个用户,把网站从Apache换到Nginx,原来的.htaccess规则没转对,所有的动态页面全弹405,折腾了半天才找到问题。
服务器端权限设置错误
除了前后端对接的问题,服务器本身的权限配置错了,也会出405。比如Nginx默认对静态文件是不允许POST请求的,如果有人往静态html或者图片文件发POST请求,服务器就会直接返回405。很多新手刚装完web服务器,喜欢乱抄网上的安全配置教程,看到别人说禁用不必要的请求方法提高安全性,就一股脑把除了GET之外的全禁了,结果自己网站上有个提交表单或者评论的功能,提交的时候直接就405了,这种真的是踩了不必要的坑,改配置之前还是要搞明白每个参数是干嘛的,别乱改。
还有一种常见情况就是CORS跨域配置错了。现在跨域请求很普遍,服务器需要配置允许跨域的请求方法,如果没把你要用的方法加进去,跨域请求的时候就会被拦截,返回405,这个很多做开发的朋友应该都碰到过,就是刚配置跨域的时候没弄对,坑好久。
CDN或者反向代理配置错误
现在几乎所有网站都会套一层CDN,或者用反向代理做负载均衡,代理层如果配置错了转发规则,也很容易导致405。比如CDN那边把请求转发错了端口,或者转发的时候自动改了请求方式,原本的GET变成POST,后端当然不认,直接返回405。
我之前就碰到过一个用户,用了某家免费CDN,默认开了恶意请求拦截,结果把所有带参数的POST请求都拦了,导致网站的登录、评论功能全用不了,全弹405,折腾了半天才发现是CDN规则的问题,关掉对应防护就好了。所以如果你套了CDN之后突然出405,可以先暂时关掉CDN测试一下,确认是不是CDN这边的问题,排查起来就快多了。
域名解析和绑定错误
这个情况相对少见一点,但也不是没有。比如你把域名绑定错了服务器,或者解析到了不对的端口,新服务器不支持你当前的请求方式,就会返回405。还有一种情况,就是你刚改了DNS解析,解析还没完全生效,部分用户访问到旧服务器,旧服务器的配置不对,就会出现偶发的405,这种等解析生效了一般就自己好了。
还有一种就是用了泛解析的朋友,多个域名绑定到同一个站点,其中某个域名的配置不对,访问的时候就会触发405,这种你只要去检查一下域名绑定列表,看看每个域名的配置是不是对的,改过来就好了。
总的来说,网站405错误大多都是配置层面的问题,很少是硬件或者服务器本身出故障,所以不用太慌,顺着我们说的这几个方向一个个排查,基本上都能找到问题。要是碰到偶发的405,可以先清一下本地缓存或者CDN缓存,有时候缓存过期没更,也会出这种奇怪的问题。要是真的自己排查不出来,就去翻一下服务器的错误日志,日志里一般都会写清楚为什么返回405,照着改就行,要是还是搞不定,就找服务商技术支持问问,以服务商或官方页面说明为准就好。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!