Hypertext Transfer Protocol (HTTP) là một giao thức không trạng thái (stateless) nằm ở tầng ứng dụng, đảm nhiệm việc giao tiếp giữa các hệ thống phân tán với nhau, và nó là nền tảng của web. Là một web developer, chúng ta nên hiểu rõ giao thức này.
Cơ bản về HTTP
HTTP cho phép giao tiếp giữa rất nhiều loại server/client với nhau, chủ yếu thông qua TCP/IP, tuy nhiên bất kỳ giao thức đáng tin cậy nào khác cũng có thể được dùng. Cổng giao tiếp chuẩn là 80, tuy nhiên có thể dùng bất kỳ cổng khác. Giao tiếp giữa client và server dựa vào một cặp request/response. Client khởi tạo HTTP request và nhận HTTP response từ server gửi về.
HTTP request bao gồm hai thành phần quan trọng là URL và Verb (phương thức), được gửi từ client. Ở phía ngược lại, server trả về HTTP response trong đó chứa Status code và Message body.
Định dạng HTTP request và HTTP resonse
Một HTTP request hoặc response có dạng như sau:
message = <start-line> *(<message-header>) CRLF [<message-body>] <start-line> = Request-Line | Status-Line
trong đó:
- start-line
- đối với request start-line là Request-Line
Request-Line = Verb URL HTTP-Version
erb là GET, POST, PUT, DELETE, OPTIONS, HEAD hoặc TRACE
URL là đường dẫn tới địa chỉ yêu cầu
HTTP-Version là “HTTP/1.1″
- đối với response là Status-Line
Status-Line = HTTP-Version Status-Code Reason-Phrase
HTTP-Version là “HTTP/1.1″
Status-Code là mã kết quả trả về
Reason-Phrase là mô tả của Status-Code
- message-header
<message-header> = Field-Name ':' Field-Value
danh sách các trường trong header bạn có thể xem chi tiết ở đây
- giữa message-header và message-body là ký hiện xuống dòng bắt buộc.
Verb
Client gửi request tới server bằng một số các phương thức thường dùng như:
- GET: được thiết kế để truy vấn dữ liệu, tài nguyên trên server, với các tham số và giá trị nằm ngay trên URL.
- POST: được dùng trong các trường hợp tạo ra sự thay đổi về dữ liệu, tài nguyên trên server như upload một file hoặc submit một web form.
- PUT: được thiết kế để cập nhật dữ liệu, tài nguyên trên server.
- DELETE: được thiết kế để xóa dữ liệu, tài nguyên trên server.
Ngoài ra còn có một số phương thức khác ít được sử dụng như HEAD, TRACE, OPTIONS.
URL
Chắc hẳn URL đã quá quen thuộc với chúng ta, nó là một cấu trúc đơn giản thường bao gồm:
- protocol: http hoặc https
- host: tên miền server
- port: mặc định là 80
- resource path: đường dẫn tới resource trên server
- query: truy vấn
Status code
Status code là thông tin quan trọng server trả về cho client, cho biết kết quả xử lý request của server. Các loại status code thường gặp:
1xx: Informational Messages
Loại status code này được mô tả ở HTTP/1.1 và hoàn toàn mang tính chất tạm thời, client có thể bỏ qua chúng.
2xx: Successful
Server trả về status dạng này khi đã xử lý thành công request của client. Đối với GET request, dữ liệu trả về nằm trong message body. Phổ biến nhất là mã 200 OK. Ngoài ra còn có:
- 202 Accepted: request từ client đã được chấp nhận nhưng có thể server không trả về kết quả cho client. Điều này hữu dụng trong trường hợp xử lý bất đồng bộ phía server: server thông báo cho client không phải tiếp tục chờ đợi cho tới khi quá trình xử lý trên server hoàn tất.
- 204 No content: không có phần message body trong response.
- 205 Reset content: tương tự như 204, nhưng mã trả về này yêu cầu client reset document view.
- 206 Partial content: server chỉ gửi về một phần dữ liệu phụ thuộc và giá trị range header client gửi lên. Giá trị này được sử dụng bởi các tool hỗ trợ download như wget, IDM để phân mảnh dữ liệu thành nhiều phần nhằm tải về đồng thời hoặc hỗ trợ tiếp tục download khi bị ngắt giữa chừng.
3xx: Redirection
Server thông báo cho client phải thực hiện thêm action để hoàn thành request.
- 301 Moved Permanently: resource đã được chuyển hoàn toàn tới địa chỉ trong trường Location của response.
- 303 See Other: resource được chuyển tạm thời tới địa chỉ trong trường Location của response.
- 304 Not Modified: resource không thay đổi từ lần cuối cùng client gửi request, và client nên sử dụng dữ liệu đã lưu trong bộ nhớ cache. Điều này được thực hiện bằng cách khi gửi request, client gửi đi trường ETag là định danh của phần dữ liệu đã request lần trước, server so sánh với trường ETag ứng với dữ liệu của nó để kiểu tra sự thay đổi.
4xx: Client Error
- 400 Bad Request: request không đúng định dạng, cú pháp.
- 401 Unauthorized: client chưa xác thực.
- 403 Forbidden: client không có quyền truy cập.
- 404 Not Found: không tìm thấy resource.
- 405 Method Not Allowed: phương thức (HTTP verb) không được server hỗ trợ.
5xx: Server Error
Có lỗi xảy ra trong quá trình xử lý của server. Mã 500 Internal Server Error là phổ biến nhất.
- 501 Not Implemented: server không hỗ trợ chức năng client yêu cầu.
- 503 Service Unavailable: một thành phần xử lý trên server bị lỗi hoặc server bị quá tải.
Công cụ hỗ trợ phân tích HTTP request và response
Có rất nhiều công cụ nhưng tiện lợi nhất là Inspector có sẵn trên Chrome hoặc addon Firebug của Firefox.
Chrome Inspector: Xem chi tiết request và response trong mục Network
Tính năng tương tự trên Firebug
(còn tiếp )
Theo tek.eten.vn