Khi máy khách HTTP gửi GETyêu cầu, tên máy chủ đích thường không nằm trong URI được yêu cầu. Đó là, thay vì gửi
GET http://www.gstatic.com/generate_204 HTTP/1.1
một khách hàng HTTP 1.1 gửi:
GET /generate_204 HTTP/1.1
Host: www.gstatic.com
Kể từ khi khách hàng "biết" mà nó cần phải giải quyết các tên DNS "www.gstatic.com" đến một địa chỉ IP, và gửi yêu cầu HTTP đến địa chỉ IP, nó không thực sự cần phải bao gồm tên máy một lần nữa như một phần của đường dẫn được yêu cầu. Các Hosttiêu đề là một gợi ý để các máy chủ của hostname yêu cầu ban đầu.
Lưu ý rằng các ngữ nghĩa trên được bao phủ bởi RFC 7230, Phần 5.3 . Và ở đó, nó làm nhà nước rằng "hình thức tuyệt đối" của tài nguyên / mục tiêu yêu cầu có thể bao gồm các lược đồ và hostname; đó là "mẫu gốc" mà tôi đã mô tả ở trên. Nếu máy chủ gốc / máy chủ đích của bạn trả về "400 Yêu cầu Không hợp lệ" cho "biểu mẫu tuyệt đối" mà proxy của bạn đang sử dụng, thì nó gợi ý a) rằng máy chủ đó không hỗ trợ "biểu mẫu tuyệt đối" hoặc b) có gì đó không đúng (thiếu Hostyêu cầu tiêu đề?).
Điều này có nghĩa là proxy HTTP của bạn không thực sự dựa vào tên máy chủ đích nằm trong dòng đầu tiên của yêu cầu HTTP (đối với máy khách HTTP có thể sử dụng "biểu mẫu gốc" của tài nguyên đích / yêu cầu; thay vào đó, proxy của bạn nên tìm các Host. header, nếu bạn cần phải biết thông tin đó Và để tránh những 400 Bad Requesttừ máy chủ gốc, tôi khuyên proxy của bạn gửi cho ví dụ :
GET /generate_204 HTTP/1.1
Host: www.gstatic.com
Đối với ngữ nghĩa của CONNECTphương pháp, xem RFC 7231, Mục 4.3.6 . Ở đó, chúng ta thấy rằng tài nguyên được yêu cầu phải bao gồm tên máy chủ và cổng. Bất kỳ 2xxphản hồi từ máy chủ đích cho thấy thành công; bất kỳ mã phản hồi nào khác chỉ ra rằng "đường hầm" được yêu cầu không được thiết lập. Phần còn lại của RFC có giá trị đọc, cho các trường hợp và hành vi cạnh khác.
Hi vọng điêu nay co ich!
CONNECTphương pháp.