Ngu ngơ học làm web (49) - Phân biệt Client-side và Server-side

Tiếp theo của: Ngu ngơ học làm web (48) -  Phân biệt URI, URL và URN
------

Phần 49.       Phân biệt Client-side và Server-side


Tới thời điểm này, không chỉ làm việc trên máy cục bộ, và với trình duyệt nữa, mà phải làm việc với Server, phần mềm Web Server.

Khi người dùng chạy một ứng dụng web (ví dụ openemr), là họ đang sử dụng một ứng dụng theo kiểu Client-Server. Nghĩa là ứng dụng đó sẽ gồm các xử lý ở hai nơi: tại máy của họ (máy Client) và tại máy Server.

Trước khi chuyển qua học ngôn ngữ lập trình PHP, là một ngôn ngữ xử lý tại Server, phần này sẽ tìm hiểu Client-side là gì và Server-side là gì?

Theo wiki, “client-side refers to operations that are performed by the client in a client–server relationship in a computer network. Typically, a client is a computer application, such as a web browser, that runs on a user's local computer or workstation and connects to a server as necessary”.
Tạm hiểu: trong một ứng dụng mạng kiểu Client-Server, Client-side là các hoạt động xảy ra tại trình duyệt của máy Client (máy tính của người dùng).

Cũng theo wiki, “server-side refers to operations that are performed by the server in a client–server relationship in a computer network. Typically, a server is a computer program, such as a web server, that runs on a remote server, reachable from a user's local computer or workstation”.

Tạm hiểu: trong một ứng dụng mạng kiểu Client-Server, Server-side là các hoạt động xảy ra tại Server. Thông thường, Server có thể là một chương trình máy tính, ví dụ phần mềm Web Server chạy trên một máy tính ở xa.


Xem hình minh họa về Client-side và Server-side,



Giải thích hình trên:

- (1) Tại máy tính người dùng, họ nhập địa chỉ của một trang web (hello.php), trình duyệt gửi một request (GET) tới Server, nói “ông Server ơi, cho tôi nội dung của trang hello.php)

- (2) Server nhận được request từ Client, liền thông dịch và thực thi đoạn mã hello.php, kết quả là có một trang HTML (trong này có thể có thêm CSS, JavaScript)

- (3) Server gửi trang HTML kết quả về cho trình duyệt trên máy Client

- (4) Trình duyệt tại máy Client sẽ phân tích mã HTML, mã CSS, thực thi mã JavaScript và kết xuất ra trang web cho người dùng

Như vậy, từ khái niệm Client-side và Server-side, sẽ có một số khái niệm kéo theo,

Ví dụ, lập trình phía Client (Client-side programming) và lập trình phía Server (Server-side programming). Như bài viết này nói rất rõ về nó: http://daonhanit.blogspot.com/2013/07/su-khac-nhau-giua-client-side.html

Vì bài viết có nhiều ý hay, nên chép nguyên về đây để tham khảo:

[Có một điểm chung là dù cho lập trình ở phía Client hay phía Server thì các lập trình viên sẽ sử dụng các ngôn ngữ kịch bản (scripting language) để tạo ra những xử lý. Các ngôn ngữ kịch bản cho phép máy tính tạo ra các phản hồi phức hợp để gửi đi trên mạng.

Client Side Programming:

- Những kịch bản xử lý được viết ở đây sẽ chạy một cách cục bộ trên trình duyệt và hệ điều hành trên máy tính của bạn. Ngôn ngữ kịch bản thông dụng để lập trình ở phía Client là JavaScript và máy tính của bạn cần phải có trình thông dịch của JavaScript  để có thể làm việc với những kịch bản này.

- Khi trình duyệt tải trang web xuống thì những kịch bản này cũng có thể đi theo như là một phần của trang web, nó giúp cho việc lướt web của bạn được cải thiện hơn. Ví dụ: trong quá trình xử lý tác vụ của bạn, trang web cần thực hiện một phép tính, thì kịch bản xử lý này sẽ thực hiện phép tính đó ngay trên máy tính của bạn thay vì phải gửi dữ liệu lên Server và ngồi chờ kết quả được trả về.

- Vấn đề của các kịch bản này đó là nó giới hạn trong việc xử lý (có nghĩa là chỉ có thể dùng cho một vài xử lý nhất định mà thôi) và phụ thuộc rất nhiều vào hệ điều hành và trình duyệt của máy người dùng. Bởi vì phát triển một Website liên quan tới người dùng với vô số tùy chọn về phần mềm  là rất khó khăn cho các lập trình viên có thể kiểm soát được những lỗi có thể phát sinh và  vấn đề tương thích với trình duyệt.

Server Side Programming:

- Những kịch bản xử lý ở phía này sẽ được thực thi trên máy Server và sẽ gửi trả kết quả về cho Client qua mạng. Các ngôn ngữ kịch bản thông dụng dùng để lập trình bên phía Server là: PHP, C#, VB.NET. Những kịch bản xử lý này giảm thiểu số lượng các lỗi cũng như vấn đề tương thích bởi vì những dòng mã trong kịch bản sẽ chạy trên một Server sử dụng một ngôn ngữ nhất định và một phần mềm hosting (lưu trữ Website) nhất định, do đó khi chọn Server để hosting website của bạn điều quan trọng là xem xét Server đó có được cài đặt sẵn và hỗ trợ ngôn ngữ mà bạn dùng hay không.

- Những kịch bản phía Server được dùng để truy cập những xử lý hoặc tài nguyên có trên Server, ví dụ như là cơ sở dữ liệu. Khi bạn muốn lấy truy cập dữ liệu của Server thì những yêu cầu của bạn sẽ được chuyển tới cho những kịch bản xử lý này để chúng thực hiện các truy vấn cơ sở dữ liệu và sẽ trả về cho trình duyệt của bạn kết quả của truy vấn đó.

- Ưu điểm lớn nhất của các kịch bản xử lý phía Server là sự bảo mật hơn hẳn các kịch bản ở Client. Ví dụ: khi bạn truy cập vào tài khoản ngân hàng trực tuyến, các kịch bản xử lý phía Server sẽ giao tiếp với Client bằng những thông điệp được mã hóa. Trong khi kịch bản phía Client chỉ là những văn bản đơn giản, chạy trên máy cục bộ. Bất cứ một "kẻ xấu" nào cũng có thể xem mã, nghe trộm và ăn cắp thông tin cá nhân từ máy tính của bạn.

- Một ưu điểm khác đáng chú ý về kịch bản xử lý phía Server đó là tính tương thích với các trình duyệt của người dùng. Đa số trình duyệt hiện nay cho phép người dùng "tắt" thực thi các kịch bản xử lý phía Client (ví dụ JavaScript) để ngăn chặn hacker tấn công, tuy nhiên chính điều này gây nên vấn đề cho các lập trình viên, những người muốn JavaScript chạy trên máy tính người dùng để ứng dụng Web của họ có thể được tải xuống hoàn toàn. Còn đối với kịch bản phía Server thì không hề có bất cứ sự giới hạn nào.

- Nhược điểm chủ yếu của kịch bản xử lý phía Server là tốn thời gian cũng như chi phí để nhận truy vấn từ người dùng. Thêm vào đó là các lỗi trong kịch bản có thể làm treo toàn bộ hế thống Server.

Tóm lại, với những ưu điểm và nhược điểm của hai loại kịch bản này mà hiện nay giải pháp được nhiều lập trình viên sử dụng đó là kết hợp cả hai cái, tận dụng những ưu điểm của từng loại và giảm thiểu tối đa những khuyết điểm của chúng.]

Xem clip nói về mô hình Client-Server: https://www.youtube.com/watch?v=L5BlpPU_muY

Ghi lại một số ý từ clip,

- Mô hình Client-Server là mô hình xử lý tập trung, các máy tính được chia thành hai nhóm: nhóm tạo yêu cầu (requester) và nhóm đáp ứng (response provider).

- Nhóm tạo yêu cầu là các Client, nhóm đáp ứng là các Server.

- Client có thể là một máy tính, hoặc một chương trình, được sử dụng để tạo ra các yêu cầu.


- Server là một chương trình, luôn lắng nghe và đáp ứng lại các yêu cầu.
-----------
Cập nhật [20/10/2017][2/11/2016]
-----------