2015-10-25 106 views

回答

5

对于请求:具有正文(例如POST)的请求在默认情况下不会压缩其主体,因为很少有服务器会支持该主体。

对于响应:默认情况下,它接受(通过请求标头)压缩和未压缩的响应。通过通常的方式设置Accept-Encoding标题可以覆盖此项。如果将Accept设置为仅允许压缩,如果服务器不支持压缩,则服务器可能无法为您的请求提供服务。

+0

好的,我有两个答案,告诉我头指定它接受压缩数据。但是如果服务器可以提供压缩和未压缩的数据,它会选择什么? – Rififi

+0

@Rififi你正在想错误的方式:客户端(任何客户端)都可以列出接受的编码。之后,*服务器*决定使用哪种编码。强制压缩响应的唯一方法是只在Accept标头中压缩列表。但是,如果服务器不想使用压缩,请求将失败。 – Kroltan

+0

是的,抱歉,如果我不清楚,那正是我的问题:服务器如何在编码中选择?假设你告诉它你接受压缩和未压缩的数据,它会选择什么(一般情况下)? – Rififi

2

你可以自己测试一下。请尝试以下操作:

import requests 
req = requests.get("http://google.com") 
print(req.request.headers) 

这将打印发送到服务器的标头(缺省标签,因为没有定义其他标头)。在我的系统我得到:

{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.7.0 CPython/2.7.8 Linux/4.1.8-100.fc21.x86_64'} 

所以,gzipdeflate被接受的压缩类型。服务器将选择其中之一。