Khuôn dạng của bản tin HTTP

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 46 - 49)

Các đặc tả HTTP 1.0 (RFC 1945) và HTTP 1.1 (RFC 2016) đặc tả khuôn dạng bản tin HTTP. Có hai kiểu khuôn dạng HTTP: bản tin yêu cầu và bản tin trả lời.

Bản tin yêu cầu HTTP:

Một bản tin yêu cầu thường có dạng sau:

GET /english/index.html HTTP/1.l Host: www.ptit.edu.vn Connection :close

User-agent :Mozzilla /4. 0 Accept- language:Fr

(extra carry return line feed)

Trước hết ta thấy rằng bản tin được viết bằng mã ASCII - vì thế bất kỳ máy tính thông thường nào cũng có thể đọc được. Thứ hai, bản tin gồm 5 dòng và mỗi dòng đều kết thúc bởi lặp ký tự đặc biệt Carriage Return (CR=13h) và Line Feed (LF-10h). Trên thực tế một bản tin có thể có nhiều dòng hơn. Dòng

đầu tiên của bản tin được gọi là dòng yêu cầu (request line), các dòng sau gọi là tiêu đề (header). Dòng yêu cầu có 3 trường: trường method, trường địa chỉ URL và trường phiên bản HTTP. Trường method nhận một trong ba giá trị: GET, POST và HEAD. Phần lớn các yêu cầu sử dụng phương thức GET. Phương thức này được trình duyệt sử dụng để yêu cầu đối tượng có địa chỉ URL. Trong ví dụ trên thì trình duyệt yêu cầu đối tượng somedir/page.html. Trường phiên bản xác định phiên bản giao thức HTTP (trong ví dụ là 1.1 ).

Hình 3.3 Khuôn dạng chung của bản tin yêu cầu

Bây giờ hãy xét các trường trong tiêu đề. Host: www.ptit.edu.vn là địa chỉ của máy tính có chứa đối tượng được yêu cầu. Ý nghĩa của trường Connection: close là trình duyệt yêu cầu máy chủ không sử dụng cách kết nối liên tục và yêu cầu máy chủ đóng kết nối lại sau khi đã gửi đi đói tượng được yêu cầu. mặc đù máy khách sử dụng phiên bản HTTP 1.1 nhưng nó không sử dụng kết nối liên tục. Trường User-agent là phần mềm trình duyệt của người sử dụng. Phần mềm trình duyệt ở đây là Mozzil1a, một sản phẩm của hãng Nestcape. Trường này rất quan trọng vì máy chủ có thể gửi các bản khác nhau của cùng một đối tượng đến các trình duyệt khác nhau (các bản đối tượng này đều được xác định qua cùng một địa chỉ URL duy nhất). Cuối cùng là trường Accept language trong ví đụ này người sử dụng yêu cầu bản tiếng Pháp của đối tượng - nếu máy chủ có bản này. Trong trường hợp không có thì máy chủ gửi đi bản mặc định.

Khuôn dạng tổng quát của bản tin có thêm trường Entity Body sau các dòng tiêu đề. Trường này không được sử dụng trong phương thức GET nhưng được sử dụng trong phương thức POST. HTTP máy khách sử dụng phương thức POST khi người dùng điền vào một form - ví dụ khi muốn tìm kiếm qua một máy tìm kiếm như Google. với phương thức POST người dùng vẫn yêu cầu trang web nhưng nội dung cụ thể phụ thuộc vào nội dung điền trong form.

Nếu giá trị của trường method là POST thì phần entity body sẽ chứa nội dung mà người dùng điền vào form. Phương thức HEAD cũng tương tự như phương thức POST. Khi nhận được yêu cầu với phương thức POST, máy chủ sẽ gửi lại bản tin HTTP trả lời nhưng không gửi đối tượng được yêu cầu. Thường người ta sử dụng phương thức HEAD để gỡ lỗi.

Sau đây là một ví dụ về bản tin trả lời, bản tin này có thể là trả lời cho bản tin yêu cầu trên.

Hình 3.4 Khuôn dạng bản tin trả lời

HTTP/1.1 200 OK Connection :close

Date : Thu, 01 Dec 2011 11:00:15 GMT Máy chủ Apache/1. 3. 0 (unix) Last modified :Mon, 14 Nov 2011 19:29:04 GMT Connect length : 8611 Connect type :text/html

( data data . . . )

Bản tin trên gồm có 3 phần : Dòng đầu tiên là dòng trạng thái (status link), 6 dòng tiêu đề và cuối cùng là phần thân (Entity body) chứa đối tượng được yêu cầu (là phần data data... ). Dòng trạng thái có 3 trường : trường phiên bản của giao thức, mã trạng thái và trường trạng thái bản tin trả lời. Trong ví dụ này thì dòng trạng thái cho biết máy chủ sử dụng phiên bản HTTP 1.1 và trạng thái là sẵn sàng (máy chủ đã nhận được yêu cầu và gửi đối tượng được yêu cầu).

Trường Connection: close báo cho máy khách biết máy chủ sẽ đóng kết nối sau khi gửi đi bản tin.

Trường Date: cho biết thời gian khi máy chủ tạo ra bản tin và gửi đi, chú ý rằng đây không phải là thời gian khi đối tượng được tạo ra hay lần cuối cùng đối tượng được cập nhật. Đó là thời điểm mà máy chủ tìm thấy đối tượng trong hệ thống file của mình, chèn đối tượng vào bản tin trả lời và gửi đi.

Trường server cho biết bản tin trả lời này được tạo ra tớ phần mềm Máy chủ web Apache, ý nghĩa của nó giống với trường User agent trong bản tin yêu cầu. Trường Last modified là thời gian cuối cùng đối tượng được cập nhật.

Trường Content lenght: cho biết độ dài của đối tượng được gửi. Content type xác định kiểu của đối tượng là file văn bản HTML ( kiểu của đối tượng được đặt ở đây chứ không phải trong phần mở rộng của tên file).

Khi nhận được một bản tin yêu cầu HTTP 1.0, máy chủ cũng sẽ không sử dụng kết nối liên tục ngay cả khi máy chủ dùng phiên bản 1.1. Máy chủ sẽ đóng

kết nối ngay sau khi gửi đối tượng. Điều này cần thiết vì máy khách sử dụng phiên bản HTTP 1.0 sẽ chờ máy chủ đóng kết nối lại.

Khuôn dạng chung của một bản tin trả lời được minh họa trên hình 2.8. Khuôn dạng này tương thích với ví dụ trên. Tuy nhiên cần phải nói thêm về mã trạng thái (status code) và ý nghĩa của chúng. Mã trạng thái cùng với cụm tớ đi sau cho biết kết quả của yêu cầu. Sau đây là một vài giá trị thông dụng và ý nghĩa của chúng:

200 OK: Yêu cầu được đáp ứng và dữ liệu được yêu cầu nằm trong bản tin

301 Moved permanetly: cho biết đối tượng đã được chuyển và địa chỉ URL mới của đối tượng được đặt trong trường Location: của bản tin trả lời, phần mềm tại máy khách sẽ tự động lấy đối tượng tại địa chỉ URL mới (Đây là hiện tượng chuyển hướng thường gặp khi duyệt web).

400 Bad Request: máy chủ không hiểu được yêu cầu từ máy khách

404 Not found: đối tượng không được lưu trên máy chủ

505 HTTP version not support: máy chủ không hỗ trợ giao thức của máy khách.

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 46 - 49)