Khi máy khách HTTP gửi GET
yê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 Host
tiê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 Host
yê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 Request
từ 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 CONNECT
phươ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ỳ 2xx
phả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!
CONNECT
phương pháp.