-
06/07/2013
-
797
-
1.308 bài viết
HTTP và định dạng các HTTP message
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.
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:
trong đó:
Verb 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″
HTTP-Version là “HTTP/1.1″
Status-Code là mã kết quả trả về
Reason-Phrase là mô tả của Status-Code
Danh sách các trường trong header bạn có thể xem chi tiết ở đây.
Verb
Client gửi request tới server bằng một số các phương thức thường dùng như:
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:
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ó:
Server thông báo cho client phải thực hiện thêm action để hoàn thành request.
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.
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:
Mã:
message =
*()
CRLF
[]
= Request-Line | Status-Line
trong đó:
- start-line
- đối với request start-line là Request-Line
Mã:
Request-Line = Verb URL HTTP-Version
Verb 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
Mã:
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
Mã:
= Field-Name ':' Field-Value
Danh sách các trường trong header bạn có thể xem chi tiết ở đây.
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.
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 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.
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.
- 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ợ.
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.
Chỉnh sửa lần cuối bởi người điều hành: