我的错。实际上,DefaultHttpClient 确实添加了 Host 标头,这是 HTTP 规范所要求的。
我的问题是由于我之前添加的另一个自定义标头,其值以
“\r\n”。这使DefaultHttpClient 自动添加的所有后续标头无效。
我正在做类似的事情:
HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value\r\n");
HttpResponse httpResponse = client.execute(request);
在 HTTP 请求中生成以下 Header 序列:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
X-Custom-Header 和 Host 之间的空格使 Host 标头无效。
修正:
HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value");
HttpResponse httpResponse = client.execute(request);
生成:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com