-----
Phần 97. Stateless,
stateful, connectionless
Hiểu nôm na, từ đầu đến giờ, để làm một ứng dụng web sẽ gồm
hai phần:
- Lập trình front-end: dùng HTML để định hình cấu trúc của
một trang web, dùng CSS để định dạng việc hiển thị, dùng JavaScript để xử lý
các hành động tại phía client. Các đoạn mã này được trình duyệt biên dịch và
thực thi tại máy client (client-side).
- Lập trình back-end: dùng PHP để thực hiện các xử lý tại
server (server-side), thao tác với cơ sở dữ liệu.
Trong cùng một tập tin mã nguồn sẽ có những đoạn mã được xử
lý tại server, có những đoạn mã được xử lý tại client. Có những dữ liệu được
nhập và xử lý tại client, có những dữ liệu được nhập và xử lý tại server. Vậy
sẽ có những tình huống cần chuyển dữ liệu giữa client-side qua server-side và
ngược lại? Cơ chế nào để thực hiện việc này?
Nhiều lúc, nhìn trên mã nguồn thì thấy dữ liệu thuộc
client-side ngay phía trên đó, mà chẳng thể lấy xuống để xử lý tại phần
server-side được mà phải gửi qua/lại dựa trên hạ tầng mạng, đường đi xa, tốn
thời gian.
Tới thời điểm này, đã biết hai phương thức được sử dụng để
gửi dữ liệu qua/lại giữa client-side và server-side: đó là phương thức GET và
POST của giao thức HTTP.
Đọc bài viết ngắn, rất hay này, liên quan đến vấn đề truyền
dữ liệu giữa client-side và server-side, qua đó hiểu được khái niệm stateless
và stateful: http://laptrinh.vn/d/3652-stateless-va-stateful-la-gi.html
Tóm tắt một số ý từ bài viết trên:
- Stateless là một kiểu thiết kế mà nó không lưu dữ liệu của
client lên server, nghĩa là sau khi client gửi yêu cầu (request) lên server,
server xử lý xong, trả về kết quả cho client. Sau đó mối quan hệ giữa client và
server sẽ bị cắt đứt, server không lưu lại bất kì dữ liệu nào của client.
- Stateful là một kiểu thiết kế khác, mà nó có lưu dữ liệu của
client lên server, nghĩa là sau mỗi request, vẫn còn duy trì ràng buộc giữa
client và server. Dữ liệu lưu lại tại server có thể làm đầu vào (input
parameters) cho lần xử lý kế tiếp, cho các xử lý nghiệp vụ khác.
HTTP là một giao thức dạng stateless.
Mà ứng dụng web lại dựa trên giao thức HTTP.
Trong một ứng dụng web, HTML được sử dụng để làm giao diện
người dùng. Mà đã là một ứng dụng thì phải lấy được dữ liệu từ giao diện, xử
lý, và xuất lại kết quả.
Các nhà làm ứng dụng web đã thiết kế bốn cách sau để gửi dữ
liệu từ client (từ giao diện) lên server (phần xử lý), cả bốn cách đều có chung
ý tưởng là lưu dữ liệu theo kiểu key/value:
- 1. Lưu trong các link (liên kết): sử dụng URL rewriter,
HTML là ngôn ngữ định dạng tài liệu, nó không phải là ngôn ngữ lập trình nên
không thể sử dụng các biến để lưu dữ liệu. Tuy nhiên, dữ liệu có thể được viết
vào các link, và như thế khi người dùng bấm vào link thì dữ liệu sẽ được gửi
lên server. Phần lớn dữ liệu được viết vào phần query của một URL, viết dưới
dạng các cặp key=value (tên biến=giá trị). Một vài trường hợp có thể đưa dữ
liệu vào phần path của URL hoặc ngay trong các biến của JavaScript. HTTP method
được sử dụng ở đây là GET. GET là loại truy vấn cho phép đọc (read). Dữ liệu
được lưu trong header của HTTP message.
- 2. Sử dụng các thành phần của form: hidden form, thay vì
lưu dữ liệu vào đường link, sẽ lưu dữ liệu vào các thành phần của form và type
của các thành phần này là hidden. Như vậy, mọi hành động của người dùng
(action) sẽ gọi đến chức năng gửi form đó lên server (post), khi đó dữ liệu cần
lưu ở lần trước đó sẽ được gửi lại. HTTP method được sử dụng ở đây là POST.
POST là loại truy vấn cho phép ghi (write). Dữ liệu được lưu trong phần body
của HTTP message.
- 3. Sử dụng cookie: trình duyệt cho phép mỗi web
application lưu khoảng 4KB dữ liệu dưới dạng key/value. Như vậy, nếu lưu dữ
liệu của lần truy vấn trước đó vào cookie thì giá trị này sẽ được gửi lên
server trong mỗi request. Cookie là một phần trong header của HTTP message.
- 4. Sử dụng HTTP session: các web server cho phép mỗi
client lưu một dung lượng nhỏ dữ liệu trên đó. Dữ liệu được lưu dưới dạng
key/value và sẽ bị hủy (expire) nếu quá thời gian cho phép (timeout).
Connectionless
HTTP là giao thức phi kết nối (connectionless). Tuy nhiên
lưu ý là: HTTP hoạt động dựa trên giao thức TCP/IP, mà TCP là giao thức hướng
kết nối (oriented-connection).
Tham khảo tại đây: https://www.tutorialspoint.com/http/http_overview.htm
Nghĩa là, HTTP client (trình duyệt) sẽ khởi tạo một HTTP
request, gửi tới server, sau đó ngắt kết nối với server và chờ kết quả trả về
từ server (chờ response). Phía server sẽ nhận request, xử lý request và thiết
lập lại một kết nối khác tới client để gửi gói trả lời (response).
-----------
Cập nhật [7/2/2018][23/12/2016]
-----------