Python 如何判断服务器是否支持部分内容?

Python 如何判断服务器是否支持部分内容?,python,http-headers,python-requests,Python,Http Headers,Python Requests,我正在开发自己的多线程web下载程序。在开始之前,我搜索了相同的问题,但文章告诉我,如果服务器支持部分内容,他们可以接受请求头Range:bytes=a-b并返回206响应代码。根据这个规则,这里是我的代码 # Occur HEAD request and get more information def _get_url_header(self): interface.info_out('HEAD_REQUEST') headers = { 'Range': '

我正在开发自己的多线程web下载程序。在开始之前,我搜索了相同的问题,但文章告诉我,如果服务器支持部分内容,他们可以接受请求头
Range:bytes=a-b
并返回
206
响应代码。根据这个规则,这里是我的代码

# Occur HEAD request and get more information
def _get_url_header(self):
    interface.info_out('HEAD_REQUEST')
    headers = {
        'Range': 'bytes=0-1'
    }
    response = requests.head(self.url, stream = True, headers = headers)
    print(response.status_code)
    # This if statement need modify!!!
    if response.status_code == 206:
        self.partital_content = True
        interface.info_out('PARTITAL_SUPPORT')
    elif response.status_code // 100 == 4:
        interface.info_out('CONNECTION_ERROR', response.status_code)
    elif response.status_code // 100 == 2:
        self.partital_content = False
        interface.info_out('PARTITAL_NOT_SUPPORT')
但是当我测试我的代码时,我意外地发现,虽然我得到了
200
code,但服务器仍然接受我的
Range
头,换句话说,服务器仍然支持部分内容传输!
那么出了什么问题?如何判断服务器是否支持部分内容?

接受(或至少不拒绝)
范围
标题并不一定意味着它们支持部分内容传输。如果您没有获得206,服务器不支持它,可能只是忽略了它无法处理的头。@jornsharpe但当我测试代码时,使用200 respond的多线程输出文件的md5sum与单线程相同。这真是一件奇怪的事情,可以解释吗?@jornsharpe我发现检查内容范围是否在响应标题中是一个好主意。接受(或至少不拒绝)范围标题并不一定意味着它们支持部分内容传输。如果您没有获得206,服务器不支持它,可能只是忽略了它无法处理的头。@jornsharpe但当我测试代码时,使用200 respond的多线程输出文件的md5sum与单线程相同。这真是一件奇怪的事情,可以解释吗?@jornsharpe我发现检查内容范围是否在响应标题中是一个好主意。