Lỗi của tôi. Trên thực tế, DefaultHttpClient
làm thêm tiêu đề Host
, theo yêu cầu của đặc tả HTTP.
Sự cố của tôi là do tiêu đề tùy chỉnh khác mà tôi đã thêm trước khi giá trị của nó kết thúc bằng "\r\n
". Điều này đã vô hiệu hóa tất cả tiêu đề tiếp theo được thêm tự động bởi DefaultHttpClient
. tôi đang làm một cái gì đó như:
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);
đã tạo ra chuỗi Tiêu đề sau đây trong yêu cầu HTTP:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
Khoảng cách giữa X-Custom-Header
và Host
không còn giá trị các Host
tiêu đề. cố định với:
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);
Đó tạo:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
Tốt bắt! Trong trường hợp của tôi (trên Android), tôi đã mã hóa Base64 một giá trị tiêu đề với ['Base64.DEFAULT'] (http://developer.android.com/reference/android/util/Base64.html#DEFAULT), bao gồm các thuật ngữ dòng . Kết quả là tất cả các cặp khóa-giá trị xuất hiện sau khi tiêu đề tùy chỉnh bị rối tung lên (thậm chí không thể nhìn thấy chúng khi chạy yêu cầu thông qua proxy). Chuyển sang ['Base64.NO_WRAP'] (http://developer.android.com/reference/android/util/Base64.html#NO_WRAP) đã giải quyết được vấn đề của tôi, vì nó bỏ qua tất cả các thuật ngữ dòng (tức là, đầu ra là một dòng dài). –