Tiêu đề máy chủ lưu trữ http là gì?


120

Cho rằng kết nối TCP đã được thiết lập khi yêu cầu HTTP được gửi đi, địa chỉ IP và cổng đã được biết rõ - kết nối TCP là IP + Cổng. Vì vậy, tại sao chúng ta cần Hosttiêu đề? Điều này chỉ cần thiết cho trường hợp có nhiều máy chủ được ánh xạ tới địa chỉ IP ngụ ý trong kết nối TCP?

Câu trả lời:


140

Các hostheader kể webserver mà máy chủ ảo để sử dụng (nếu thiết lập). Bạn thậm chí có thể có cùng một máy chủ ảo bằng cách sử dụng một số bí danh (= miền và miền ký tự đại diện). Trong trường hợp này, bạn vẫn có khả năng đọc tiêu đề đó theo cách thủ công trong ứng dụng web của mình nếu bạn muốn cung cấp các hành vi khác nhau dựa trên các miền khác nhau được xử lý. Điều này là có thể vì trong máy chủ web của bạn, bạn có thể (và nếu tôi không nhầm thì bạn phải) thiết lập một vhost làm máy chủ lưu trữ mặc định. Vhost mặc định này được sử dụng bất cứ khi nào hosttiêu đề không khớp với bất kỳ máy chủ ảo nào đã định cấu hình.

Điều đó có nghĩa là: Bạn hiểu đúng, mặc dù nói "nhiều máy chủ" có thể hơi gây hiểu nhầm: Máy chủ (máy được định địa chỉ) giống nhau, những gì thực sự được giải quyết cho địa chỉ IP là các tên miền khác nhau (bao gồm cả miền phụ) cũng được tham chiếu thành tên máy chủ (nhưng không phải máy chủ!).

Mặc dù không phải là một phần của câu hỏi, nhưng một sự thật thú vị: Đặc điểm kỹ thuật này đã dẫn đến sự cố với SSL trong những ngày đầu vì máy chủ web phải cung cấp chứng chỉ tương ứng với miền mà máy khách đã sử dụng. Tuy nhiên, để biết được chứng chỉ nào cần sử dụng, máy chủ web cần phải biết trước tên máy chủ có địa chỉ. Nhưng vì máy khách chỉ gửi thông tin đó qua kênh được mã hóa (có nghĩa là: sau khi chứng chỉ đã được gửi), máy chủ phải giả định rằng bạn đã duyệt máy chủ mặc định. Điều đó có nghĩa là một miền được bảo mật ssl trên mỗi địa chỉ IP / kết hợp cổng.

Điều này đã được khắc phục với Chỉ báo tên máy chủ ; tuy nhiên, điều đó lại phá vỡ một số quyền riêng tư, vì tên máy chủ bây giờ lại được chuyển sang dạng văn bản thuần túy, vì vậy mọi người ở giữa sẽ thấy tên máy chủ nào bạn đang cố gắng kết nối.

Mặc dù máy chủ web sẽ biết tên máy chủ từ Chỉ báo tên máy chủ, nhưng hosttiêu đề không phải là lỗi thời, vì thông tin Chỉ báo tên máy chủ chỉ được sử dụng trong quá trình bắt tay TLS. Với một kết nối không an toàn, không có Chỉ báo Tên Máy chủ nào cả, vì vậy hosttiêu đề vẫn hợp lệ (và cần thiết).

Một thực tế thú vị khác: Hầu hết các máy chủ web (nếu không phải tất cả) đều từ chối yêu cầu http của bạn nếu nó không chứa chính xác một hosttiêu đề, ngay cả khi nó có thể bị bỏ qua vì chỉ có vhost mặc định được định cấu hình. Điều đó có nghĩa là thông tin bắt buộc tối thiểu trong yêu cầu http- (get-) là dòng đầu tiên chứa METHOD RESOURCEPROTOCOL VERSIONvà ít nhất là host-header, như sau:

GET /someresource.html HTTP/1.1
Host: www.example.com

Trong Tài liệu MDN trên Host-Header, họ thực sự diễn đạt như thế này:

Trường tiêu đề Máy chủ lưu trữ phải được gửi trong tất cả các thông báo yêu cầu HTTP / 1.1. Mã trạng thái 400 (Yêu cầu không hợp lệ) sẽ được gửi đến bất kỳ thông báo yêu cầu HTTP / 1.1 nào thiếu trường tiêu đề Máy chủ lưu trữ hoặc chứa nhiều hơn một trường.

Như đã đề cập bởi Darrel Miller, thông số kỹ thuật đầy đủ có thể được tìm thấy trong RFC7230 .


câu trả lời tốt. Bạn đã viết "Điều này có thể thực hiện được vì trong máy chủ web của bạn, bạn có thể (và nếu tôi không nhầm thì bạn phải) thiết lập một vhost làm máy chủ mặc định. Vhost mặc định này được sử dụng bất cứ khi nào tiêu đề máy chủ không khớp với bất kỳ máy chủ ảo nào được định cấu hình vật chủ. " Tôi muốn kiểm tra trong RFC7230 nhưng không tìm thấy vhostchỉ có 3 lần xuất hiện thân của virtual hostvới nghĩa không gần gũi với cụm từ và 12 cho defaulthầu hết về cảng,
Alexei Martianov

chỉ về máy chủ lưu trữ rằng: "Nếu không, thì nếu trường tiêu đề Máy chủ lưu trữ được cung cấp giá trị trường không trống, thành phần quyền hạn giống như giá trị trường Máy chủ lưu trữ." - không IMHO giống nhau. Bạn có thể chỉ cho tôi chỉ trong RFC về điều đó?
Alexei Martianov

mặt thực tế: đến một số máy chủ, tôi gửi POST với tiêu đề máy chủ = tên miền và nhận được 200 (ok), tôi gửi tiêu đề máy chủ đã thay đổi và nhận được 404 (không tìm thấy). Nó có thể có nghĩa là máy chủ không được by the bookcấu hình đúng (đầy đủ )?
Alexei Martianov

như lời nhận xét không thể chỉnh sửa: quote trong 2 là gần defaulttừ tìm thấy bằng cách tìm kiếm,Otherwise, the authority component is assigned the default name configured for the server
Alexei Martianov

lạ lùng. tất cả 3 lần xuất hiện virtual hostđược tìm thấy bởi tìm kiếm của tôi trong tools.ietf.org/html/rfc7230 đều ở trong đó Appendix A. HTTP Version History. có vẻ như tìm kiếm của bạn đã tìm thấy một số khác.
Alexei Martianov

29

Tôi luôn khuyên bạn nên truy cập nguồn có thẩm quyền khi cố gắng hiểu ý nghĩa và mục đích của tiêu đề HTTP.

Trường tiêu đề "Máy chủ lưu trữ" trong một yêu cầu cung cấp máy chủ lưu trữ và
thông tin cổng từ URI đích, cho phép máy chủ gốc
phân biệt giữa các tài nguyên trong khi cung cấp các yêu cầu cho nhiều
tên máy chủ lưu trữ trên một địa chỉ IP.

https://tools.ietf.org/html/rfc7230#section-5.4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.