我正在尝试使用TIdHTTP.Head('https://www.myurl.com/myfile.zip')
, 只是为了在下载之前获取文件大小。
我获取文件大小,以便可以打开多个线程并行下载文件的各个部分,因此下载速度会更快。
Head()
直到最近该方法开始引发此异常时,它都工作正常:
项目 myproject.exe 引发异常类 EIdHTTPProtocolException 并显示消息“HTTP/1.1 406 不可接受”。
我的TIdHTTP
连接到 a TIdSSLIOHandlerSocketOpenSSL
,其中SSLOptions
:
Method = sslvSSLv23
SSLVersions = [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]
我应该寻找什么?
错误
406 Not Acceptable
来自 HTTP 服务器。通常1表示请求有一个标头,指定客户端愿意接收的数据类型,但服务器无法以任何这些类型发送请求的资源。Accept
1不太可能,该错误也可能意味着中间防火墙正在阻止该请求。
默认
TIdHTTP.Request.Accept
值为'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
。应该包含文件,但如果您知道您只对文件感兴趣而没有其他兴趣,那么您应该将该*/*
属性设置为。.zip
.zip
TIdHTTP.Request.Accept
'application/zip'
附带说明:您不应该在 SSLIOHandler 的属性中启用
sslvSSLv2
和。它们已经过时且已被弃用,因为它们不再安全,没有人再使用 SSL v2.0 和 v3.0。sslvSSLv3
SSLVersions