Sự khác biệt giữa lập trình phía máy chủ và phía máy khách là gì?


104

Tôi đã thấy các câu hỏi (chủ yếu là về Stack Overflow), thiếu kiến ​​thức cơ bản này. Điểm của câu hỏi này là cung cấp thông tin tốt cho những người tìm kiếm nó và những người tham khảo nó.

Trong bối cảnh lập trình web, sự khác biệt giữa lập trình phía Máy chủ và lập trình phía Máy khách là gì? Những ngôn ngữ thuộc về ngôn ngữ nào, và khi nào bạn sử dụng từng ngôn ngữ?


5
Lập trình phía máy chủ đang viết mã chạy trên máy chủ, sử dụng các ngôn ngữ được máy chủ hỗ trợ (như Java, PHP, C #; có thể viết mã thực thi trên phía máy chủ bằng JavaScript). Lập trình phía máy khách đang viết mã sẽ chạy trên máy khách và được thực hiện bằng các ngôn ngữ có thể được trình duyệt thực thi, chẳng hạn như JavaScript.
Thất vọngWithFormsDesigner


7
Tôi nghĩ bạn nên đưa vào câu hỏi mà bạn chỉ đề cập đến lập trình web, vì ở dạng hiện tại, câu trả lời chưa đầy đủ. Ví dụ, giao tiếp máy chủ-máy khách không cần phải được thực hiện trong HTTP; phía khách hàng có thể không sử dụng trình duyệt, v.v.
K.Steff

@KSteff bạn có thể chỉnh sửa câu hỏi của tôi để thêm câu hỏi đó.
Madara Uchiha

2
Khi web còn trẻ, cách tốt nhất là đặt phần lớn logic của bạn lên phía máy chủ (java / c ++) và giữ logic trình duyệt mỏng một cách có chủ ý - đặc biệt là khi các trình duyệt trở lại chưa sẵn sàng cho thời gian chính. Bây giờ sự nhấn mạnh này đã đảo ngược sao cho các công cụ dựa trên trình duyệt (Angular.js) là nơi mà phần lớn logic ứng dụng web nặng hiện đang tồn tại (tránh khỏi logic phía máy chủ ngày càng bị tước bỏ). Điều này đã được hỗ trợ bởi các trình duyệt sức mạnh công nghiệp hiện đại chạy các công cụ javascript cực nhanh (trong một mức độ lớn của mã gốc).
Scott Stensland

Câu trả lời:


123

Lý lịch

Phát triển web là tất cả về giao tiếp. Trong trường hợp này, giao tiếp giữa hai (2) bên, qua giao thức HTTP:

  • Các máy chủ - đảng này có nhiệm vụ phục vụ trang.
  • Các khách hàng - bên này yêu cầu các trang từ các máy chủ và hiển thị chúng cho người dùng. Trong hầu hết các trường hợp, khách hàng là một trình duyệt web .
    • Các tài khoản - Người dùng sử dụng các khách hàng để lướt web, điền vào biểu mẫu, xem video trực tuyến, vv

Mỗi chương trình, đề cập đến mã chạy ở máy cụ thể, của máy chủ hoặc của máy khách.

Ví dụ cơ bản

  1. Người dùng mở trình duyệt web của mình ( Máy khách ).
  2. Người dùng duyệt đến http://google.com .
  3. Các khách hàng (trên danh nghĩa của các tài khoản ), gửi một yêu cầu đến http://google.com (các máy chủ ), cho trang chủ của họ.
  4. Sau đó, Máy chủ sẽ xác nhận yêu cầu và trả lời máy khách với một số dữ liệu meta (được gọi là tiêu đề ), theo sau là nguồn của trang.
  5. Sau đó, Khách hàng nhận được nguồn của trang và kết xuất nó thành một trang web có thể xem được.
  6. Các tài khoản loại Stack Overflowvào thanh tìm kiếm và bàn làEnter
  7. Các khách hàng nộp dữ liệu đó đến máy chủ .
  8. Các máy chủ xử lý dữ liệu đó, và trả lời với một trang phù hợp với các kết quả tìm kiếm.
  9. Các khách hàng , một lần nữa, làm cho rằng trang cho tài khoản để xem.

Lập trình

Lập trình phía máy chủ

Lập trình phía máy chủ, là tên chung cho các loại chương trình được chạy trên Máy chủ .

Công dụng

  • Quá trình người dùng nhập liệu.
  • Biên dịch các trang.
  • Cấu trúc ứng dụng web.
  • Tương tác với bộ nhớ vĩnh viễn (SQL, tệp).

Ngôn ngữ mẫu

  • PHP
  • Con trăn
  • ASP.Net trong C #, C ++ hoặc Visual Basic.
  • Gần như bất kỳ ngôn ngữ nào (C ++, C #, Java). Chúng không được thiết kế riêng cho nhiệm vụ, nhưng hiện nay thường được sử dụng cho các dịch vụ web cấp ứng dụng.

Lập trình phía khách hàng

Giống như phía máy chủ, lập trình phía Máy khách là tên của tất cả các chương trình được chạy trên Máy khách .

Công dụng

  • Tạo các trang web tương tác.
  • Làm cho công cụ diễn ra linh hoạt trên trang web.
  • Tương tác với lưu trữ tạm thời và lưu trữ cục bộ (Cookies, localStorage).
  • Gửi yêu cầu đến máy chủ và lấy dữ liệu từ nó.
  • Cung cấp dịch vụ từ xa cho các ứng dụng phía khách, như đăng ký phần mềm, phân phối nội dung hoặc chơi trò chơi nhiều người chơi từ xa.

Ngôn ngữ ví dụ

  • JavaScript (chủ yếu)
  • HTML *
  • CSS *
  • Bất kỳ ngôn ngữ nào chạy trên thiết bị khách tương tác với dịch vụ từ xa là ngôn ngữ phía máy khách.

* HTML và CSS không thực sự là "ngôn ngữ lập trình" mỗi lần. Chúng là cú pháp đánh dấu mà Khách hàng sẽ hiển thị trang cho Người dùng .


8
+1 cho một câu trả lời tốt với các ví dụ về việc sử dụng! Chỉ với nitpick: HTML và CSS không thực sự là ngôn ngữ lập trình, vì vậy có lẽ chúng không nên được so sánh với "PHP, ASP và Gần như bất kỳ ngôn ngữ nào (C ++, C #, Java)". ActionScript có thể là một ví dụ điển hình khác về ngôn ngữ phía máy khách.
Thất vọngWithFormsDesigner

5
Bạn không xác định được tại sao máy chủ là máy chủ và máy khách là máy khách. Máy chủ được khách hàng biết đến, nhưng không phải là cách khác. Máy chủ dự kiến ​​sẽ được thực thi mọi lúc, không có sự mong đợi của khách hàng.
Chris McCall

3
Tôi sẽ thêm một thực tế là một môi trường máy chủ được kiểm soát nhiều hơn. Bạn không có ý tưởng gì về khách hàng. Ngoài ra có những lo ngại về bảo mật (cho cả hai bên) khi thực hiện những điều phía khách hàng.
ném đá vào

1
Vì vậy, thêm nó, cảm thấy tự do.
Madara Uchiha

1
Tôi không đồng ý với định nghĩa của @ ChrisMcCall. Có thể có ngoại lệ cho quy tắc đó, chẳng hạn như nơi máy chủ có thể dựa vào máy khách để xử lý dữ liệu hoặc cung cấp dịch vụ cho máy chủ để máy chủ hoàn thành nhiệm vụ. Khách hàng cũng đang chia sẻ số lượng tải ngày càng tăng cho khả năng mở rộng và hiệu suất, chẳng hạn như trong các SPA. Những công nghệ làm mờ định nghĩa đó. Một định nghĩa tốt hơn có thể là người dùng cuối và khách hàng đồng nghĩa với nhau. Dự kiến ​​người dùng cuối tồn tại ở thiết bị khách, trong khi tất cả các nút khác sẽ được coi là phía máy chủ.
RyanJMcGowan

27

Theo cách nói của giáo dân:

Ở đây tôi sẽ chỉ nói về lập trình web.

Lập trình phía máy khách chủ yếu liên quan đến giao diện người dùng mà người dùng tương tác. Trong phát triển web, trình duyệt, trong máy của người dùng chạy mã và chủ yếu được thực hiện bằng javascript, flash, v.v. Mã này phải chạy trong nhiều trình duyệt khác nhau.

Nhiệm vụ chính của nó là:

  • xác thực đầu vào (Xác thực phải được thực hiện trong máy chủ. Xác thực dự phòng trong máy khách có thể được sử dụng để tránh các cuộc gọi của máy chủ khi tốc độ rất quan trọng.)
  • hoạt hình
  • thao tác các yếu tố UI
  • áp dụng phong cách
  • Một số tính toán được thực hiện khi bạn không muốn trang thường xuyên làm mới

Người phụ trách lập trình front end phải biết :

  • javascript
  • css
  • HTML
  • thiết kế đồ họa cơ bản
  • Ajax
  • có thể là Flash
  • một số thư viện javascript của bên thứ 3 như JQuery
  • Thiết kế giao diện người dùng
  • thiết kế thông tin, vv

Lập trình phía máy chủ phải làm với việc tạo nội dung động. Nó chạy trên các máy chủ. Nhiều máy chủ trong số này là "không đầu". Hầu hết các trang web không tĩnh, họ tìm kiếm một cơ sở dữ liệu để hiển thị thông tin cá nhân được cập nhật của người dùng. Mặt này tương tác với mặt sau, như nói, cơ sở dữ liệu.

Chương trình này có thể được thực hiện bằng nhiều ngôn ngữ:

  • PHP
  • Java và jsp
  • asp
  • Perl
  • Con trăn
  • Ruby on Rails, v.v.

Mã này phải làm với:

  • Truy vấn cơ sở dữ liệu
  • Mã hóa dữ liệu thành html
  • Chèn và cập nhật thông tin vào cơ sở dữ liệu
  • Quy tắc và tính toán kinh doanh

Người phụ trách lập trình phía máy chủ phải biết:

  • một số ngôn ngữ được đề cập ở trên
  • HTML
  • SQL,
  • kịch bản shell linux / unix
  • OOP
  • quy tắc kinh doanh, vv

"Người phụ trách lập trình front end phải biết" Phải không? Tôi muốn nói rằng bạn hoàn toàn có thể tồn tại chỉ với HTML, CSS, Javascript và Ajax. Nói rằng lập trình phía máy chủ phải làm với việc tạo nội dung động và không nói tương tự cho phía khách hàng có thể sẽ đưa ra trực giác sai lầm ...
nbro

"Hầu hết các trang web không tĩnh, họ tìm kiếm cơ sở dữ liệu để hiển thị thông tin cá nhân được cập nhật của người dùng. Mặt này tương tác với mặt sau, như giả sử, cơ sở dữ liệu." Tôi sẽ nói lại nó như là: "Trang được tạo ra tự động bằng cách điền vào những phần năng động với nội dung thay đổi đó được lấy thường từ một cơ sở dữ liệu back-end đã là tất cả những gì liên quan đến lập trình server-side, IMO..
nbro

Một lần nữa, nói chung, tôi sẽ nói "... một người nên biết ..." chứ không phải "phải" ...
nbro

@nbro Tại sao bạn không viết câu trả lời của riêng mình?

@ColeTrumbo Kết nối giữa bình luận của tôi và của bạn là gì? Mọi người có thể chỉ trích câu trả lời của người khác để cải thiện chúng không?
nbro

14

Câu trả lời khác đã tập trung vào những gì client-side và lập trình server-side là: những gì ngôn ngữ chủ yếu được sử dụng, những gì nhiệm vụ đã được hoàn thành, vv

Điều này là hoàn toàn đúng, nhưng tôi bỏ lỡ một chút tập trung vào sự khác biệt giữa cả hai loại lập trình, trong bối cảnh lập trình web. Hãy để tôi cố gắng giải quyết điều đó.

Bảo mật và quyền

Trong lập trình phía máy khách, bạn không có quyền truy cập vào toàn bộ hệ thống, vì những lo ngại về bảo mật. Người dùng không nhất thiết phải tin tưởng từng mã được tải xuống từ web và thực thi trên máy của mình và đây là mục tiêu thiết kế chính của môi trường phía máy khách (trình duyệt và công cụ JavaScript): để cung cấp một môi trường biệt lập nơi mã khách hàng có thể thực thi nhưng không thể truy cập bất cứ thứ gì ngoài phạm vi được phép.

Trong lập trình phía máy chủ, bạn cũng nên giới hạn quyền truy cập của từng ứng dụng vào hệ thống cơ bản, nhưng điều này ít được thực thi đối với bạn, vì cuối cùng, bạn hoặc công ty của bạn kiểm soát hệ thống đó. Thiết kế 'lồng cô lập' này không được tích hợp trong các công cụ và ngôn ngữ lập trình phía máy chủ, nhưng được thực hiện thông qua cài đặt cài đặt (sử dụng người dùng chuyên dụng với quyền hạn chế, chọn cổng yêu cầu hoặc không yêu cầu quyền root, v.v.).

Triển khai và nền tảng

Trong lập trình phía máy chủ, việc triển khai phải xảy ra từ bên ngoài mã của bạn, sử dụng một số loại công cụ (ngay cả khi đó là make installhoặc a git clone) và việc triển khai này thường là thủ công - hoặc ít nhất, dự kiến ​​sẽ xảy ra trong một giám sát bán giám sát đường. Hệ thống (có nghĩa là HĐH) mà bạn triển khai thường thống nhất trên một số máy, nhưng nó có thể được tùy chỉnh rất nhiều theo nhu cầu của bạn.

Trong lập trình phía máy khách, việc triển khai diễn ra từ mã phía máy chủ của bạn, phục vụ khách hàng tự động và không có sự giám sát. Hệ thống cơ bản (có nghĩa là chủ yếu là trình duyệt) có thể rất khác nhau trên một số lượng lớn máy hơn nhiều. Để làm cho việc triển khai trở nên khả thi, các tiêu chuẩn phải được giữ nguyên và có một xu hướng mạnh mẽ hơn nhiều đối với một ngôn ngữ và môi trường.

Đây là lý do tại sao sao chép mã phía máy chủ từ máy này sang máy khác có thể mất hàng tuần, trong khi mã phía máy khách thường không quan trọng để thực thi trong các máy khác nhau.

Hiệu ứng nhà nước và thứ cấp

(Tuyên bố miễn trừ trách nhiệm: đây là điểm chủ quan nhất trong tất cả. Có lẽ có nhiều khía cạnh sai trong lập luận của tôi. Đó chỉ là một giả thuyết thú vị, theo quan điểm của tôi.)

Trong lập trình phía máy chủ, trạng thái là mối quan tâm lớn hơn nhiều, có nghĩa là làm thế nào để truy xuất và cập nhật dữ liệu theo yêu cầu của người dùng với khả năng xảy ra xung đột do đồng thời. Ngay cả khi phần lớn sự phức tạp này được giảm tải cho máy chủ cơ sở dữ liệu, thì trách nhiệm của mã phía máy chủ là cho phép cơ sở dữ liệu đảm bảo tính toàn vẹn của dữ liệu bằng cách sử dụng giao diện của nó một cách chính xác (ví dụ: không sử dụng bộ đệm cho các cập nhật không bao giờ được nhìn thấy bởi DB), trong khi đó cũng là mục tiêu của mã phía máy chủ để không làm quá tải cơ sở dữ liệu với công việc và khiến người dùng chờ phản hồi.

Trong lập trình phía khách hàng, việc trình bày kết quả cho người dùng là mối quan tâm lớn hơn nhiều và điều này bao hàm các hiệu ứng phụ (chủ yếu là in ra màn hình). Điều này không có nghĩa là không có trạng thái liên quan (ví dụ: cookie), chỉ có mục tiêu chính của mã là thực sự giao tiếp với người dùng và điều này không thể xảy ra nếu không có hiệu ứng phụ.

Đây là lý do tại sao lập trình phía máy khách thường yêu cầu (tại một số điểm) nhìn vào màn hình bằng bản demo, để kiểm tra xem tất cả màu sắc và bố cục có đúng không, trong khi lập trình phía máy chủ có thể xảy ra hầu như chỉ trong môi trường hướng văn bản, trong đó tự động kiểm tra kiểm tra xem logic vẫn đang làm những gì nó phải làm.


3

Đây không phải là một câu trả lời được chấp nhận; thay vào đó tôi cung cấp nó như là một điểm bổ sung (để trả lời cho when do you use each of themcâu hỏi) vẫn chưa được đề cập trong các câu trả lời khác cho đến nay, cụ thể là:

Bảo vệ sở hữu trí tuệ

Mã nguồn nằm ở phía máy khách (như trong Javascript) có thể dễ dàng đọc và / hoặc có khả năng được thiết kế ngược nếu nó bị che khuất.

Tuy nhiên, mã nguồn nằm ở phía máy chủ có thể bảo vệ các thuật toán độc quyền một cách an toàn và chỉ trả về kết quả; một hộp đen các loại.


Vâng, nhưng đó không thực sự là điểm quan trọng nhất, máy chủ ở đó đến máy chủ và máy khách ở đó để nhận. Một số logic được thực hiện tốt nhất trên máy khách (như giỏ hàng, bạn không để siêu thị theo dõi giỏ hàng của mình mọi lúc, phải không?), Và một số được thực hiện tốt nhất trên máy chủ (lấy thông tin từ cơ sở dữ liệu)
Madara Uchiha

@MadaraUchiha, do đó lời mở đầu: "Điều này không có nghĩa là một câu trả lời được chấp nhận, thay vào đó tôi cung cấp nó như một điểm bổ sung"
Kosta Kontos

Không phải đây là một phần của bài viết khác sao? Tôi mới ở đây, nhưng không nên có một câu trả lời hoàn chỉnh hơn câu trả lời rải rác?
Julix 18/8/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.