You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TIdHTTP.Head()抛出'HTTP/1.1 406 Not Acceptable'异常?

排查方向

针对你遇到的HTTP/1.1 406 Not Acceptable异常,从以下几个方面逐一排查:

  • 检查Request.Accept请求头:
    406错误核心是服务器无法匹配客户端发送的Accept头要求。TIdHTTP默认的Accept头可能偏向网页类内容,部分服务器现在对Head请求的Accept头有严格限制。尝试手动设置适配zip文件的Accept值:

    IdHTTP1.Request.Accept := 'application/zip, */*';
    

    再执行Head请求测试。

  • 验证SSL/TLS协议版本兼容性:
    你当前配置的SSL版本包含了老旧的SSLv2、SSLv3,很多服务器已经禁用这些不安全的协议,可能导致服务器直接拒绝请求。尝试调整SSL配置,只保留高版本协议:

    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_2;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];
    // 若服务器支持TLS1.3,可追加sslvTLSv1_3(需对应版本的Indy支持)
    

    重新测试请求是否正常。

  • 补全或调整其他必要请求头:
    部分服务器会校验User-Agent、Referer等头信息,TIdHTTP默认的User-Agent可能被识别为非合法客户端。尝试设置一个标准的浏览器User-Agent:

    IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
    

    如果目标网站有防盗链机制,还需要设置对应的Referer头。

  • 对比第三方工具的请求差异:
    用curl命令模拟Head请求,验证服务器本身是否正常响应:

    curl -I https://www.myurl.com/myfile.zip
    

    如果curl能正常返回200状态码和Content-Length,就捕获TIdHTTP发送的请求头(可通过Wireshark抓包,或开启Indy的日志功能),对比curl的请求头,将TIdHTTP的请求头调整为一致格式。

  • 确认服务器端配置变更:
    既然之前正常现在报错,大概率是服务器端做了调整——比如Web服务器(Nginx/Apache)更新了配置、启用了WAF规则、限制了Head请求的Accept头范围。可联系服务器管理员确认近期是否有相关变更。

  • 升级Indy组件版本:
    若你使用的是较旧版本的Indy,可能存在TLS协议处理或请求头构造的bug。尝试升级到最新稳定版的Indy组件后再测试请求。

内容的提问来源于stack exchange,提问作者delphirules

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:25