delphi版HTTP/1. 1 405 Method Not Allowed的终极解释及Http(s)请求的常见错误
一、概念
1.1、这个提示的意思
HTTP/1.1的客户端请求Method,,按照互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小组提交 IESG通过的现实标准,HTTP已从HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2,发展到HTTP/3,HTTP/2成为当今HTTP的现实标准,它完整包含了HTTP/1.1,无非就那几种:GET、POST、HEAD、PUT、OPTIONS、DELETE、TREACE、CONNECT 8 种请求方法,最常用的是Head、Get、Post。
其次,这个错误提示,它是客户端的提示,是说,客户端用HTTP/1. 1协议版本请求服务器端的Web服务器(比如IIS或Apache)或应用服务器中间件时,Web服务器或应用服务器中间件所提供的服务,不允许客户端进行访问。并非开发者那么弱智,错误使用了这几种请求方法。
1.2、璧瑶互联网上的常用说法
类似“将出错页面表单的method=“post”改为“get”即可”......不一而举。
二、排错方法
2.1、检查Web服务器或应用服务器中间件所提供的服务
当物理服务器上,Web服务器和应用服务器中间件并存运行时,且开通了SSL支持运行HTTPs时,当调用http而非https或公用运行80端口时,最容易混淆,是哪个逻辑服务器在提供服务。
这时,会让客户端误判本案的错误提示。
2.2、检查客户端的HTTP(s)请求类型
同2.1,客户端应当完全匹配服务端所提供的服务,否则,也会造成本案的错误提示。
三、案例
比如:物理服务器开放了80、8085、8086端口,逻辑服务器:Web服务器IIS上跑http跑80端口和https跑默认的443端口和已重定向的8080端口,应用服务器中间件MySvr同时支持http跑8085、https跑8086端口。
请求同一个资源:http://www.cpuofbs.com:8085/image/a.txt
此时,稍有不慎,开发者开发客户端App时,在用Head或Get方法,获取或下载服务器端的数据时,很容易误用http(s)及其端口的匹配:
什么原因呢:是因为 窗体组件,使用的是SSL的IO处理器:
IdHttp.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
四、小结
当“资源提供者”(比如http://www.cpuofbs.com:8085/image/a.txt)和“请求的Http(s)协议”(比如IdHttp.IOHandler)不相匹配时,才会提示“HTTP/1. 1 405 Method Not Allowed”错误。
五、Http(s)请求的常见错误
5.1、404错误 :资源没有找到,即无此资源。
在http的8085端口下Web服务器IIS并未提供该服务,它是由应用服务器中间件MySvr提供的服务,但资源的文件aaa.txt物理不存在:
资源的文件存在,但https的服务提供者(应用服务器中间件MySvr)并未提供该/API路径(image)下的文件服务:
5.2、Read time out错误 :读取超时错误:即客户端协议http请求无误,但服务器协议找不到对应端口8086时,会报此错误。
5.3、class EIdosSLUnderlyingCryptoError with message Error connecting error with SSL错误 :用SSL错误连接,意思是客户端以Https协议请求服务器资源,但服务端找不到对应请求的端口8085:
错误的具体描述为:error: 1408F 10B:SSL routines:SSL3_ GET_ RECORD:wrong version number:即端口错误的意思。
《delphi Restful:客户端实现的四种方式及其比较》
https://blog.csdn.net/pulledup/article/details/104132753
喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享: