delphi版HTTP/1. 1 405 Method Not Allowed的终极解释及Http(s)请求的常见错误

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/3HTTP/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

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

猜你喜欢

转载自blog.csdn.net/pulledup/article/details/107790739