Giao thức truyền siêu văn bản. Giao thức truyền siêu văn bản - HTTP
Trung tâm của web là Giao thức truyền siêu văn bản (HTTP), là một giao thức cấp độ ứng dụng. Mô tả HTTP có thể được tìm thấy trong RFC 1945 và RFC 2616. Giao thức HTTPđược triển khai bằng hai chương trình: máy khách và máy chủ, nằm trên các hệ thống đầu cuối khác nhau, trao đổi thông điệp HTTP. Thứ tự trao đổi và nội dung tin nhắn được mô tả trong giao thức. Trước khi đi sâu vào HTTP, trước tiên chúng ta hãy hiểu thuật ngữ được sử dụng trong ngữ cảnh web.
Mỗi trang web hoặc tài liệu đều bao gồm các đối tượng. Đối tượng là một tập tin thông thường ở định dạng HTML, một hình ảnh ở định dạng định dạng JPEG hoặc GIF, Java applet, clip âm thanh, v.v., tức là một đơn vị có Bộ định vị tài nguyên thống nhất (URL) riêng của nó. Thông thường, các trang web bao gồm một tệp HTML cơ sở và các đối tượng mà nó liên kết đến. Vì vậy, nếu một trang web bao gồm một tệp HTML cơ bản và năm hình ảnh thì nó bao gồm sáu đối tượng. Các liên kết đối tượng liên quan đến một trang web là các URL có trong tệp HTML cơ bản. Một URL bao gồm hai phần: tên máy chủ của máy chủ chứa đối tượng và đường dẫn đến đối tượng. Vì vậy, ví dụ: đối với URL _www.someSchool.edu/someDepartment/picture.gif, tên máy chủ là đoạn _www.someSchool.edu và đường dẫn đến đối tượng là đoạn someDepartment/picture.gif.
Tác nhân người dùng web được gọi là trình duyệt; nó hiển thị các trang web và cũng thực hiện nhiều chức năng tiện ích bổ sung. Ngoài ra, trình duyệt còn đại diện cho phía máy khách của giao thức HTTP. Do đó, các thuật ngữ “trình duyệt” và “máy khách” trong ngữ cảnh web sẽ được sử dụng tương đương. Một số trình duyệt phổ biến nhất bao gồm Netscape Navigator và Microsoft trình duyệt web IE.
Máy chủ Web chứa các đối tượng, mỗi đối tượng được xác định bằng URL của nó. Ngoài ra, máy chủ web đại diện cho phía máy chủ của giao thức HTTP. Các máy chủ web phổ biến nhất bao gồm Apache và Microsoft Internet Information Server.
Giao thức HTTP xác định cách máy khách (chẳng hạn như trình duyệt) yêu cầu các trang web và cách máy chủ phân phối các trang đó. Chúng ta sẽ nói chi tiết hơn về sự tương tác giữa máy khách và máy chủ sau, nhưng ý tưởng cơ bản có thể được hiểu từ Hình 2. 2.4. Khi người dùng yêu cầu một trang web (ví dụ: nhấp vào siêu liên kết), trình duyệt sẽ gửi yêu cầu HTTP đến máy chủ đối với các đối tượng tạo nên trang web. Máy chủ nhận được yêu cầu và gửi tin nhắn phản hồi có chứa các đối tượng được yêu cầu. Năm 1997, hầu như tất cả các trình duyệt web và máy chủ web bắt đầu hỗ trợ HTTP phiên bản 1.0, được mô tả trong RFC 1945. Năm 1998, quá trình chuyển đổi bắt đầu sang phiên bản 1.1, được mô tả trong RFC 2616. Phiên bản 1.1 tương thích ngược với phiên bản 1.0, nghĩa là bất kỳ máy chủ nào hoặc trình duyệt chạy phiên bản 1.1 hoàn toàn có thể tương tác với trình duyệt hoặc máy chủ chạy phiên bản 1.0.
Cả HTTP 1.0 và HTTP 1.1 đều sử dụng TCP làm giao thức lớp vận chuyển. Máy khách HTTP trước tiên thiết lập kết nối TCP với máy chủ và sau khi kết nối được tạo, máy khách và máy chủ bắt đầu giao tiếp với giao thức TCP thông qua giao diện ổ cắm. Như đã nêu trước đó, ổ cắm là "cánh cửa" giữa các tiến trình và giao thức lớp vận chuyển.
Máy khách gửi yêu cầu và nhận phản hồi thông qua giao diện ổ cắm của nó và máy chủ sử dụng giao diện ổ cắm để nhận yêu cầu và thực hiện chúng. Sau khi yêu cầu web vượt qua ổ cắm máy khách, nó sẽ nằm trong tay giao thức TCP. Hãy nhớ lại rằng một trong những chức năng của giao thức TCP là đảm bảo truyền dữ liệu đáng tin cậy; điều này có nghĩa là mọi yêu cầu do máy khách gửi và mọi phản hồi từ máy chủ đều được gửi chính xác như đã gửi. Đây là nơi một trong những lợi thế của đa cấp mô hình truyền thông: Giao thức HTTP không cần giám sát độ tin cậy truyền tải và đảm bảo rằng các gói được truyền lại nếu bị hỏng. Mọi công việc “bẩn” sẽ được thực hiện bởi giao thức TCP và các giao thức cấp thấp hơn.
Cần lưu ý rằng sau khi hoàn tất việc phục vụ khách hàng, máy chủ không lưu trữ bất kỳ thông tin nào về họ. Ví dụ: nếu khách hàng thực hiện hai yêu cầu cho cùng một tài nguyên liên tiếp, máy chủ sẽ thực hiện chúng mà không cung cấp cho khách hàng bất kỳ thông báo nào về yêu cầu trùng lặp. Giao thức HTTP được cho là giao thức không trạng thái cho các kết nối.
Tất cả dữ liệu trong công nghệ Web được truyền qua giao thức HTTP(Giao thức truyền siêu văn bản). Ngoại lệ là trao đổi bằng lập trình Java hoặc trao đổi từ ứng dụng Plugin. Xem xét khối lượng lưu lượng truy cập thực tế được truyền đi như một phần của trao đổi Web qua HTTP, chúng tôi sẽ chỉ xem xét giao thức này. Khi làm như vậy, chúng ta sẽ xem xét các câu hỏi như:
Cấu trúc tin nhắn chung
HTTP là một giao thức lớp ứng dụng. Giao thức tập trung vào mô hình trao đổi máy khách-máy chủ. Việc trao đổi diễn ra trong các phần dữ liệu được gọi là Thông báo HTTP. Tin nhắn được gửi từ máy khách đến máy chủ được gọi là yêu cầu và tin nhắn được gửi từ máy chủ đến máy khách được gọi là phản hồi. Một tin nhắn có thể bao gồm hai phần: tiêu đề và nội dung. Phần thân được ngăn cách với phần đầu bằng một dòng trống.
Tiêu đề chứa thông tin dịch vụ cần thiết để xử lý nội dung thư hoặc kiểm soát việc trao đổi. Tiêu đề bao gồm các chỉ thị tiêu đề, thường được viết trên một dòng mới.
Nội dung thư là tùy chọn, nhưng tiêu đề thư thì có. Nó có thể chứa thông tin văn bản, đồ họa, âm thanh hoặc video.
Dưới đây là yêu cầu HTTP:
GET/HTTP/1.0 Chấp nhận: image/jpeg [dòng trống]
và phản hồi:
HTTP/1.0 200 OK Ngày: Thứ Sáu, 24 tháng 7 năm 1998 21:30:51 GMT Máy chủ: Apache/1.2.5 Kiểu nội dung: text/html Độ dài nội dung: 21345 [dòng trống] bối cảnh trang
Văn bản "dòng trống" chỉ đơn giản là để biểu thị sự hiện diện của một dòng trống ngăn cách tiêu đề của thông điệp HTTP với nội dung của nó.
Máy chủ, khi nhận được yêu cầu từ máy khách, sẽ chuyển đổi một phần thông tin tiêu đề yêu cầu HTTP thành các biến môi trường có sẵn để phân tích bằng tập lệnh CGI. Nếu yêu cầu có nội dung thì nội dung đó sẽ được cung cấp cho tập lệnh thông qua luồng đầu vào tiêu chuẩn.
Phương thức truy cập
Chỉ thị quan trọng nhất của yêu cầu HTTP là phương thức truy cập. Nó được chỉ định là từ đầu tiên trong dòng đầu tiên của truy vấn. Trong ví dụ của chúng tôi đây là GET. Có bốn phương pháp truy cập chính:
Ngoài bốn phương pháp này, còn có khoảng năm phương pháp truy cập bổ sung nhưng chúng hiếm khi được triển khai trong thực tế.
phương thức NHẬN
Phương thức GET được máy khách sử dụng khi đưa ra yêu cầu tới máy chủ theo mặc định. Với phương pháp này, máy khách sẽ truyền đạt địa chỉ tài nguyên (URL) mà nó muốn nhận, phiên bản giao thức HTTP, loại tài liệu MIME mà nó hỗ trợ cũng như phiên bản và tên của phần mềm máy khách. Tất cả các tham số này được chỉ định trong tiêu đề yêu cầu HTTP. Cơ thể không được gửi trong yêu cầu.
Để phản hồi, máy chủ sẽ báo cáo phiên bản giao thức HTTP, mã trả về, loại nội dung nội dung thư, kích thước nội dung thư và một số chỉ thị tiêu đề HTTP tùy chọn khác. Bản thân tài nguyên, thường là một trang HTML, được gửi trong phần nội dung của phản hồi.
phương pháp ĐẦU
Phương thức HEAD được sử dụng để giảm thiểu trao đổi khi làm việc qua giao thức HTTP. Nó tương tự như phương thức GET ngoại trừ nội dung thư không được gửi trong phản hồi. Phương pháp này được sử dụng để kiểm tra thời gian sửa đổi cuối cùng của tài nguyên, kiểm tra ngày hết hạn của tài nguyên được lưu trong bộ nhớ đệm khi sử dụng các chương trình quét tài nguyên World Wide Web. Nói tóm lại, phương thức HEAD được thiết kế để giảm thiểu lượng thông tin được truyền qua mạng như một phần của trao đổi HTTP.
phương thức ĐĂNG
Phương thức POST là một phương thức thay thế cho phương thức GET. Khi trao đổi dữ liệu bằng phương thức POST, yêu cầu của máy khách sẽ chứa nội dung thông báo HTTP. Nội dung này có thể được hình thành từ dữ liệu được nhập dưới dạng HTML hoặc từ tệp đính kèm bên ngoài. Phản hồi thường chứa cả tiêu đề và nội dung của thông báo HTTP. Để bắt đầu trao đổi bằng phương thức POST trong thuộc tính phương pháp thùng đựng hàng hình thức giá trị "bài" phải được chỉ định.
phương pháp PUT
Phương thức PUT được sử dụng để xuất bản các trang HTML lên thư mục máy chủ HTTP. Khi truyền dữ liệu từ máy khách đến máy chủ, tin nhắn cũng chứa tiêu đề tin nhắn chỉ định URL của tài nguyên này và nội dung - nội dung của tài nguyên được lưu trữ.
Phản hồi thường không gửi nội dung tài nguyên, nhưng tiêu đề thư chứa mã trả về xác định xem việc phân bổ tài nguyên thành công hay không thành công.
Tối ưu hóa trao đổi
Giao thức HTTP ban đầu được thiết kế là giao thức không kết nối. Điều này có nghĩa là khi máy chủ đã chấp nhận yêu cầu từ máy khách và phản hồi yêu cầu đó, kết nối giữa máy khách và máy chủ sẽ bị mất. Để trao đổi dữ liệu mới, một kết nối mới phải được thiết lập. Cách tiếp cận này có cả ưu điểm và nhược điểm.
Ưu điểm bao gồm khả năng phục vụ đồng thời một số lượng lớn truy vấn ngắn. Ngay cả trên các máy chủ phổ biến, số lượng kết nối mở có thể không vượt quá hàng trăm khi phục vụ khoảng một triệu yêu cầu mỗi ngày. Trong trường hợp này, một máy khách có thể mở tối đa 40 kết nối cùng lúc, theo quan điểm của máy chủ là như nhau. Với đường truyền tốc độ cao, điều này giúp có thể đạt được thời gian phản hồi ngắn cho yêu cầu của khách hàng đối với toàn bộ trang (văn bản, đồ họa, v.v.).
Những nhược điểm của sơ đồ trao đổi này bao gồm: nhu cầu thiết lập kết nối cho mỗi trao đổi và không có khả năng duy trì phiên làm việc với tài nguyên thông tin. Khi khởi tạo một kết nối thông qua giao thức truyền tải TCP và chấm dứt kết nối này, cần phải truyền một lượng thông tin dịch vụ khá lớn. Việc thiếu hỗ trợ phiên trong HTTP làm phức tạp đáng kể việc làm việc với các tài nguyên như cơ sở dữ liệu hoặc tài nguyên yêu cầu xác thực.
Để tối ưu hóa số mở kết nối TCP Giao thức HTTP phiên bản 1.0 và 1.1 cung cấp chế độ duy trì. Ở chế độ này, kết nối chỉ được khởi tạo một lần và một số trao đổi HTTP có thể được thực hiện tuần tự.
Để triển khai hỗ trợ phiên, “cookie” đã được thêm vào chỉ thị tiêu đề HTTP. Chúng cho phép bạn mô phỏng hỗ trợ kết nối khi làm việc qua giao thức HTTP.
Mã hóa các yêu cầu GET và POST.
Có hai loại mã hóa yêu cầu HTTP. Nền tảng - được mã hóa url, hay còn gọi là mã hóa URL tiêu chuẩn. Khoảng trắng được biểu thị bằng %20, các chữ cái tiếng Nga và hầu hết các ký tự đặc biệt được mã hóa, các chữ cái và dấu gạch nối tiếng Anh được giữ nguyên.
Cách mã hóa dữ liệu biểu mẫu khi gửi được chỉ định trong thẻ HTML của nó: