Một HTTP khách (HTTP client), chẳng hạn một trình duyệt web (web browser), dùng HTTP để truy vấn một tài liệu HTML, khi nhận được trả lời từ HTTP chủ (HTTP server), chẳng hạn máy chủ Apache (Apache HTTP server : httpd), nó sẽ định dạng (format) rồi hiển thị tài liệu này cho người dùng. HTTP được sử dụng để truyền tải không chỉ HTML, tuy nhiên HTML là ngôn ngữ giao tiếp (lingua franca) của web và ứng dụng web.
Truy vấn HTTP
Một truy vấn HTTP (HTTP request) bao gồm một phương thức truy vấn (request method), URL truy vấn (request URL), phần đầu (header) và phần thân (body) truy vấn; phần thân có thể rỗng. Trong đó phương thức là một lệnh chỉ rõ loại truy vấn, HTTP 1.1 định nghĩa các phương thức truy vấn sau :
- GET : phương thức hay dùng nhất để lấy tài nguyên (resource) từ URL truy vấn. Khi truy vấn dùng phương thức này, các tham số (parameter) được nối thẳng vào URL. Phương thức GET này không có phần thân hay phần thân rỗng
- HEAD : lấy phần đầu (header) của truy vấn, tức thông tin về tài nguyên.
- POST : gởi dữ liệu với độ dài không giới hạn tới máy chủ web (web server). Khác với phương thức GET, phương thức POST dùng phần thân của câu truy vấn để gởi dữ liệu đến máy chủ web.
- PUT : thay thế hoặc thêm tài nguyên vào máy chủ web theo URL cung cấp.
- DELETE : xoá tài nguyên ở máy chủ web định vị bởi URL.
- OPTIONS : trả về các phương thức HTTP máy chủ cung cấp cho một URL xác định.
- TRACE : trả về thông tin truy vấn mà máy chủ nhận được. Phương thức này cho phép theo dõi một truy vấn để xem có những thay đổi hay thêm thắt nào nếu có do những máy chủ trung gian (intermediate server) thực hiện.
Trả lời HTTP
Một trả lời HTTP bao gồm một mã kết quả (result code) hay mã trạng thái (status code), phần đầu (header) và phần thân (body).
Các mã trạng thái có thể tham khảo tại Status Code Definitions trên trang w3.org
Ví dụ:
* Phương thức GET
- Câu truy vấn
GET http://localhost:8080/Servlet/logon?username=toan&password=servlet [no cookies] Request headers : Connection: keep-alive Host: localhost:8080 User-Agent: Apache-HttpClient/4.2.3 (java 1.5)Trong đó :
+ User-Agent : Chứa thông tin về user agent gửi truy vấn. Một đại diện người dùng (user agent) là một phần mềm thực thi tác vụ nhân danh người dùng. Ở đây câu truy vấn được gởi từ JMeter nên thông tin này là "Apache-HttpClient/4.2.3 (java 1.5)". Nếu ta gõ trực tiếp câu truy vấn GET này, tức "http://localhost:8080/Servlet/logon?username=toan&password=servlet" từ firefox chẳng hạn. User-Agent có thể là "Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0"
+ Connection : xác định dạng kết nối user agent muốn xài. Trong trường hợp này giá trị "keep-alive" cho biết là user agent không muốn cắt kết nối và muốn giữ nó mở sau khi nhận được trả lời để tiếp tục sử dụng cho các truy vấn tiếp theo.
+ Host : xác định địa chỉ internet và cổng (port) của máy chủ web mà user agent muốn truy vấn. Ở đây máy chủ web và user agent (JMeter hay trình duyệt web) cùng ở chung một máy vật lý nên giá trị là localhost:8080. Nếu giá trị của Host không có thông tin về cổng (chẳng hạn "Host : localhost"), thì cổng được hiểu là cổng mặc định của máy chủ web HTTP tức cổng 80.
- Câu trả lời
Phần đầu (reponse headers)
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=618C115C19691146500ECD29F37F5FF0; Path=/Servlet/; HttpOnly Content-Type: text/html;charset=ISO-8859-1 Content-Length: 213 Date: Wed, 17 Apr 2013 15:00:56 GMTTrong đó :
+ HTTP/1.1 200 OK : cho biết máy chủ web hỗ trợ giao thức HTTP phiên bản 1.1 và mã trạng thái (status code) là 200 tức trả lời thành công. OK là giải thích ngắn gọn của mã 200.
+ Server : chứa thông tin về phần mềm máy chủ sử dụng để xử lý truy vấn. Ở phía máy chủ (server), ta dùng Apache Tomcat nên giá trị này là "Apache-Coyote/1.1". Nên lưu ý, Tomcat là một bộ chứa web (web container) hay chính xác hơn là một bộ chứa Servlet/JSP (Servlet/JSP container) và không được xem là một máy chủ web (web server) thực thụ. Trình kết nối (connector) Coyote HTTP/1.1 mà Tomcat sử dụng, như thông tin cho thấy, cho phép nó hoạt động như một máy chủ web độc lập.
+ Set-Cookie : là chỉ dẫn máy chủ gửi, yêu cầu user agent lưu cookie để gửi nó lại cho máy chủ trong các truy vấn tiếp theo (với điều kiện là user agent có hỗ trợ cookie và hỗ trợ này được kích hoạt, ngoài ra cookie cũng phải chưa hết hạn khi được gởi lại).
+ Content-Type : xác định dạng thức trung gian (media type) qua đó máy chủ gửi thông tin đến nơi nhận. Chẳng hạn thông tin có thể gửi đến trình duyệt web dưới dạng một tài liệu html, xml, pdf, word, excel hay dạng hình ảnh, âm thanh, video ... Ở đây giá trị "text/html;charset=ISO-8859-1" cho biết thông tin trả lời được gửi đưới dạng văn bản html dùng hệ mã hoá kí tự (character encoding) ISO-8859-1. Một số giá trị khác : "text/plain" (trả về văn bản .txt), "application/xml" (trả về tài liệu xml), "application/json" (trả về là một đối tượng json), "application/vnd.ms-excel" (trả về tài liệu excel), "application/pdf" (trả về tài liệu pdf).
+ Content-Length : cho biết kích thước phần thân câu trả lời, đơn vị octet (tức 8 bit).
+ Date: cho biết ngày giờ thông điệp được gởi.
Phần thân (body) : Thông điệp trả lời trong trường hợp này được gởi đưới dạng html
<html> <head> <title>Log on</title> </head> <body bgcolor="white"> Welcome toan <br /> <form name="logoffForm" method="post" action="/Servlet/logon"> <input type="submit" name="logoff" value="Log out"> </form> </body> </html>
* Phương thức POST
- Câu truy vấn
POST http://localhost:8080/Servlet/logon POST data: username=toan&password=servlet [no cookies] Request headers : Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 30 Host: localhost:8080 User-Agent: Apache-HttpClient/4.2.3 (java 1.5)Trong đó :
+ username=toan&password=servlet : phần thân của câu truy vấn.
+ Content-Type mang giá trị mặc định "application/x-www-form-urlencoded" : cho biết cách mã hoá dữ liệu để gởi đi bằng phương thức POST.
- Câu trả lời
Phần đầu
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=D7EBCF21A626499FD7BAB51017EDC07C; Path=/Servlet/; HttpOnly Content-Type: text/html;charset=ISO-8859-1 Content-Length: 213 Date: Wed, 17 Apr 2013 15:00:56 GMT
Phần thân
<html> <head> <title>Log on</title> </head> <body bgcolor="white"> Welcome toan <br /> <form name="logoffForm" method="post" action="/Servlet/logon"> <input type="submit" name="logoff" value="Log out"> </form> </body> </html>
Không có nhận xét nào:
Đăng nhận xét