Làm thế nào mà làm việc?
Máy chủ quyết định.
Làm thế nào để máy chủ (hoặc một cái gì đó khác? Tôi khá mới làm quen) biết URL có nghĩa là gì khi nhận được yêu cầu?
Các máy chủ dựa trên cấu hình của nó. Đối với các máy chủ dựa trên Unix, điều này thường được xử lý bởi một hoặc nhiều tệp văn bản thường được gọi là tệp "cấu hình". Khi thiết lập máy chủ, bạn có thể chỉ định điều này. Chi tiết về cách chỉ định điều này sẽ thay đổi dựa trên phần mềm máy chủ web bạn sử dụng.
(Có xu hướng có nhiều hướng dẫn cho các máy chủ web và gói CGI phổ biến, vì vậy nếu quản trị viên trang web không biết cách thực hiện, người đó thường bắt đầu đọc các ví dụ / tài liệu / hướng dẫn. Vì vậy, nếu bạn tìm tài liệu về Máy chủ web như Apache, bạn có thể tìm thấy thông tin về việc thiết lập Drupal. Mặt khác, nếu bạn tìm kiếm thông tin cho một cái gì đó như Drupal, bạn có thể sẽ tìm thấy một phần tài liệu về cách định cấu hình Apache để sử dụng Drupal. Với rất nhiều tài liệu có sẵn, quản trị viên trang web thường không cần phải vật lộn quá nhiều để tìm chi tiết có liên quan cho các gói phần mềm họ muốn sử dụng.)
Máy khách HTTP 1.1 có xu hướng chia URL thành 3 phần:
- Giao thức (ví dụ: http / https)
- Trang web (ví dụ example.com)
- tài nguyên (ví dụ /somedir/file.htm)
Đó có thể là một sự đơn giản hóa một chút. Một số URL cũ hơn được phép cho một cái gì đó như ftp: // username @ password: example.com/somedir/file mặc dù các trình duyệt web mới hơn có xu hướng xóa hỗ trợ đó, ví dụ: MS KB 8344389 , vì lo ngại về bảo mật (bao gồm cả mức độ lạm dụng đáng chú ý đã xảy ra, ví dụ: http://paypal.com/gibberish%40PhishingSite.example.com/gibberish sẽ chuyển đổi% 40 thành ASCII 64 là @, khiến tên người dùng của paypal.com/gibberish được sử dụng để đăng nhập vào PhishingSite .example.com sẽ đơn giản chấp nhận đăng nhập và hỏi mọi người mật khẩu PayPal của họ. Mọi người sẽ thấy paypal.com khi bắt đầu URL và tin tưởng vào nó.
Chắc chắn, có một số "tiêu chuẩn" như # trong một URL là thứ mà máy khách web sẽ nhận ra và sẽ không gửi nó đến máy chủ. Thay vào đó, máy khách web sẽ coi văn bản sau # là văn bản neo để chuyển đến. Ngoài ra,% được sử dụng để thoát các ký tự hex. Khách hàng web có xu hướng hiểu điều đó.
Các chi tiết khác có thể lên đến máy chủ. Ví dụ, nhiều máy chủ web có? bắt đầu một danh sách các tham số và sử dụng & (hoặc nhiều dấu chấm phẩy?) để phân tách các tham số trong danh sách các tham số. Tuy nhiên, đó chỉ đơn giản là hành vi phổ biến được thể hiện bởi nhiều máy chủ web. Không có phần HTTP nào buộc các máy chủ web tôn vinh điều đó. Thực sự, máy chủ web có thể xử lý điều đó tuy nhiên máy chủ web muốn và máy khách web có thể không yêu cầu bất kỳ sự hỗ trợ đặc biệt nào cho việc đó.
Nếu bạn đã từng thiết lập máy chủ HTTP, có thể bạn sẽ hiểu rằng một phần của cấu hình đó đang chỉ định những việc cần làm với các tài nguyên được yêu cầu. ví dụ: bạn có thể nói rằng mọi thứ được gửi tới / sẽ tải các tệp từ / srv / httpdocs / của ổ cứng cục bộ, ngoại trừ / cgi-bin / sẽ chạy chương trình nằm trong / cgi-bin / và bất cứ thứ gì dưới / script / và kết thúc bằng .pl sẽ được chạy bởi trình thông dịch PERL.
Các chi tiết cụ thể khác nhau dựa trên cấu hình của máy chủ web, do đó, không có một tiêu chuẩn chung nào sẽ cho khách hàng biết liệu nó có thể được đảm bảo để nhận một bản sao của trang tĩnh hay đầu ra của chương trình được chạy hay không. Tất cả các máy khách web có thể mong đợi là nếu máy khách web yêu cầu tài nguyên, máy chủ web sẽ trả lời nó.