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

RestFul 专栏收录该内容
30 篇文章 2 订阅

目录

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

一、概念

1.1、这个提示的意思

1.2、璧瑶互联网上的常用说法

二、排错方法

三、案例

四、小结

五、Http(s)请求的常见错误:

5.1、404错误 :资源没有找到,即无此资源。

5.2、Read time out错误 :读取超时错误:即客户端协议http请求无误,但服务器协议找不到对应端口8086时,会报此错误。

5.3、class EIdosSLUnderlyingCryptoError with message Error connecting error with SSL错误 :用SSL错误连接,意思是客户端以Https协议请求服务器资源,但服务端找不到对应请求的端口8085:

六、常见的HTTP状态码:

七、Http(s) API调用常见错误码:

八、Http(s) API调用状态码大全:

本博客相关:


 

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:即端口错误的意思。

 

六、常见的HTTP状态码:

  
    
状态码
错误类型一般的解决方案典型错误码示例
200 - OK处理成功  
204 - No Content处理成功,无返回Body  
400 - Bad Request协议或者参数非法请根据接口返回的详细信息检查您的程序PARAM_ERROR
401 - Unauthorized签名验证失败请检查签名参数和方法是否都符合签名算法要求SIGN_ERROR
403 - Forbidden权限异常请开通商户号相关权限。请联系产品或商务申请NO_AUTH
404 - Not Found请求的资源不存在请商户检查需要查询的id或者请求URL是否正确ORDER_NOT_EXIST
429 - Too Many Requests请求超过频率限制请求未受理,请降低频率后重试RATE_LIMITED
500 - Server Error系统错误按具体接口的错误指引进行重试SYSTEM_ERROR
502 - Bad Gateway服务下线,暂时不可用请求无法处理,请稍后重试SERVICE_UNAVAILABLE
503 - Service Unavailable服务不可用,过载保护请求无法处理,请稍后重试SERVICE_UNAVAILABLE

七、Http(s) API调用常见错误码:

错误码错误消息HTTP状态码描述
AccessDeniedAccess denied.403Forbidden无权限访问对应的资源。
InappropriateJSONThe JSON you provided was well-formed and valid, but not appropriate forthis operation.400 Bad Request请求中的JSON格式正确,但语义上不符合要求。如缺少某个必需项,或值类型不匹配等。出于兼容性考虑,对于所有无法识别的项应直接忽略,不应该返回这个错误。
InternalErrorWe encountered an internal error Please try again.500 Internal Server Error所有未定义的其他错误。在有明确对应的其他类型的错误时(包括通用的和服务自定义的)不应该使用。
InvalidAccessKeyIdThe Access Key ID you provided doesnot exist in our records.403ForbiddenAccess Key ID不存在。
InvalidHTTPAuthHeaderThe Access Key ID you provided does notexist in our records.400 BadRequestAuthorization头域格式错误。
InvalidHTTPRequestThere was an error in the body of your HTTP request.400 Bad RequestHTTP body格式错误。例如不符合指定的Encoding等。
InvalidURICould not parse the specified URI.400 Bad RequestURI形式不正确。例如一些服务定义的关键词不匹配等。对于ID不匹配的问题,应定义更加具体的错误码,如NoSuchKey。
MalformedJSONThe JSON you provided was not well-formed.400 BadRequestJSON格式不合法。
InvalidVersionThe API version specified was invalid.404 NotFoundURI的版本号不合法。
OptInRequiredA subscription for the service is required.403Forbidden没有开通对应的服务。
PreconditionFailedThe specified If-Match header doesn’tmatch the ETag header.412PreconditionFailed详见Etag。
RequestExpiredRequest has expired. Timestamp date is <Data>.400 BadRequest请求超时。要改成x-bce-date。若请求中只有Date,需将Date转成datetime。
IdempotentParameterMismatchThe request uses the same client token asa previous, but non-identical request.403ForbiddenclientToken对应的API参数不一样。
SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided. Check yourSecret Access Key and signing method. Consultthe service documentation for details.400 Bad RequestAuthorization头域中附带的签名和服务端验证不一致。

八、Http(s) API调用状态码大全:

状态码

编码

错误码说明

100

Continue

继续请求。

这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。

101

Switching Protocols

切换协议。只能切换到更高级的协议。

例如,切换到HTTP的新版本协议。

201

Created

创建类的请求完全成功。

202

Accepted

已经接受请求,但未处理完成。

203

Non-Authoritative Information

非授权信息,请求成功。

204

NoContent

请求完全成功,同时HTTP响应不包含响应体。

在响应OPTIONS方法的HTTP请求时返回此状态码。

205

Reset Content

重置内容,服务器处理成功。

206

Partial Content

服务器成功处理了部分GET请求。

300

Multiple Choices

多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。

301

Moved Permanently

永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。

302

Found

资源被临时移动。

303

See Other

查看其它地址。

使用GET和POST请求查看。

304

Not Modified

所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。

305

Use Proxy

所请求的资源必须通过代理访问。

306

Unused

已经被废弃的HTTP状态码。

400

BadRequest

非法请求。

建议直接修改该请求,不要重试该请求。

401

Unauthorized

在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。

402

Payment Required

保留请求。

403

Forbidden

请求被拒绝访问。

返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。

404

NotFound

所请求的资源不存在。

建议直接修改该请求,不要重试该请求。

405

MethodNotAllowed

请求中带有该资源不支持的方法。

建议直接修改该请求,不要重试该请求。

406

Not Acceptable

服务器无法根据客户端请求的内容特性完成请求。

407

Proxy Authentication Required

请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。

408

Request Time-out

服务器等候请求时发生超时。

客户端可以随时再次提交该请求而无需进行任何更改。

409

Conflict

服务器在完成请求时发生冲突。

返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。

410

Gone

客户端请求的资源已经不存在。

返回该状态码,表明请求的资源已被永久删除。

411

Length Required

服务器无法处理客户端发送的不带Content-Length的请求信息。

412

Precondition Failed

未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。

413

Request Entity Too Large

由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。

414

Request-URI Too Large

请求的URI过长(URI通常为网址),服务器无法处理。

415

Unsupported Media Type

服务器无法处理请求附带的媒体格式。

416

Requested range not satisfiable

客户端请求的范围无效。

417

Expectation Failed

服务器无法满足Expect的请求头信息。

422

UnprocessableEntity

请求格式正确,但是由于含有语义错误,无法响应。

429

TooManyRequests

表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。

500

InternalServerError

表明服务端能被请求访问到,但是不能理解用户的请求。

501

Not Implemented

服务器不支持请求的功能,无法完成请求。

502

Bad Gateway

充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。

503

ServiceUnavailable

被请求的服务无效。

建议直接修改该请求,不要重试该请求。

504

ServerTimeout

请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。

505

HTTP Version not supported

服务器不支持请求的HTTP协议的版本,无法完成处理。

 

本博客相关:

      《delphi Restful:客户端实现的四种方式及其比较

        https://blog.csdn.net/pulledup/article/details/104132753

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

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页

打赏作者

pulledup

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值