我见过一些问题(主要是关于Stack Overflow的问题),这些问题缺乏基本的知识。这个问题的重点是为寻求它的人和引用它的人提供良好的信息。


在Web编程的上下文中,Server之间有什么区别编程和客户端编程?哪些语言属于哪种语言,何时使用它们?

评论

服务器端编程是使用服务器支持的语言(例如Java,PHP,C#;可以在JavaScript中在服务器端执行的代码)编写在服务器上运行的代码。客户端编程正在编写将在客户端上运行的代码,并以可被浏览器执行的语言(例如JavaScript)完成。

这是一个很好的东西:programmers.stackexchange.com/questions/138561/…

我认为您应该在仅涉及Web编程的问题中加入答案,因为按照目前的形式,答案并不完整。例如,服务器与客户端之间的通信不需要使用HTTP进行;客户端可能不使用浏览器等。

@KSteff,欢迎您编辑我的问题以添加该内容。

当网络还很年轻时,最好将大部分逻辑放在服务器端(java / c ++)上,并有意使浏览器逻辑变薄-尤其是因为那时的浏览器还没有准备好迎接黄金时间。现在,这种强调已经发生了逆转,以致基于浏览器的工具(Angular.js)成为了如今大量Web应用程序繁重逻辑所驻留的地方(远离了日益减少的服务器端逻辑)。运行非常快速的javascript引擎(在本机代码的数量级内)的现代工业强度浏览器已对此提供了便利。

#1 楼

背景

Web开发只涉及通信。在这种情况下,两方(2)之间通过HTTP协议进行通信:


服务器-此方负责提供页面。
客户端-此方请求服务器上的页面,并显示给用户。在大多数情况下,客户端是Web浏览器。


用户-用户使用客户端浏览网络,填写表格,在线观看视频等。



每个方面的编程均指在特定计算机(服务器或客户端)上运行的代码。

基本示例


用户打开自己的网络浏览器(客户端)。
用户浏览到http://google.com。
客户端(代表用户)发送一个请求http://google.com(服务器)以获取其主页。
服务器随后确认该请求,并向客户端提供一些元数据(称为标头)以及页面源。
然后客户接收页面的来源,并将其呈现到人类可见的网站中。数据发送到服务器。
服务器处理该数据,并用匹配搜索结果的页面进行答复。
T客户端再次将页面呈现给用户查看。

编程

服务器端编程

服务器端编程是在服务器上运行的各种程序的通用名称。

使用


处理用户输入。
编译页面。
>结构化Web应用程序。
与永久存储(SQL,文件)进行交互。

示例语言


PHP
Python
>使用C#,C ++或Visual Basic的ASP.Net。
几乎没有任何语言(C ++,C#,Java)。这些不是专门为该任务设计的,但现在经常用于应用程序级Web服务。

客户端编程

与服务器端类似,客户端编程是在客户端上运行的所有程序的名称。

使用


制作交互式网页。
使网页上的内容动态发生。
与临时存储和本地存储(Cookies,localStorage)进行交互。
向服务器发送请求,并从中检索数据
为客户端应用程序提供远程服务,例如软件注册,内容交付或远程多人游戏。

示例语言


JavaScript(主要)
HTML *
CSS *
在客户端设备上运行的与远程服务交互的任何语言都是客户端语言。

* HTML和CSS本身并不是真正的“编程语言”。它们是客户端用来为用户呈现页面的标记语法。

评论


+1给出使用示例的好答案!只是挑剔:HTML和CSS实际上不是编程语言,因此可能不应该将它们与“ PHP,ASP和几乎任何语言(C ++,C#,Java)”进行比较。 ActionScript可能是客户端语言的另一个很好的示例。

– FrustratedWithFormsDesigner
2012年10月24日14:25



您无法确定为什么服务器是服务器而客户端是客户端。客户端知道服务器,但是反之则不然。服务器应始终处于执行状态,没有客户期望。

–克里斯·麦考尔(Chris McCall)
2012年10月24日15:04

我将添加一个事实,即服务器环境受到更多控制。您不知道客户是什么。在客户端执行操作时,也存在(针对双方)安全问题。

–石金属
2012年10月24日16:28

因此,添加它,随意。

–马达拉的幽灵
2012年10月24日17:07

我在某种程度上不同意@ChrisMcCall的定义。该规则可能会有例外,例如服务器可能依赖客户端来处理数据或向服务器提供服务以使服务器完成任务。客户也正在为SPA中的可伸缩性和性能分担越来越多的负载。这些技术模糊了这个定义。更好的定义可能是最终用户和客户端是同义词。预计最终用户将存在于客户端设备上,而所有其他节点都将被视为服务器端。

– RyanJMcGowan
2013年9月1日上午8:32

#2 楼

用外行的话来说:

这里我只谈论Web编程。

客户端编程主要与用户界面有关,用户与之交互。在Web开发中,运行代码的是浏览器,即用户计算机中的浏览器,它主要是通过javascript,Flash等完成的。此代码必须在各种浏览器中运行。

其主要任务是:


验证输入(必须在服务器中进行验证。当速度非常关键时,可以在客户端中使用冗余验证来避免服务器调用。)
动画
操作UI元素
应用样式
当您不希望页面刷新得如此频繁时,就会进行一些计算

前端编程负责人必须知道:


javascript
css
HTML
基本图形设计
Ajax
也许是Flash
一些第三方的javascript诸如JQuery
UI设计
信息设计之类的库。

服务器端编程与生成动态内容有关。它在服务器上运行。这些服务器中许多都是“无头的”。大多数网页不是静态的,它们搜索数据库以向用户显示更新的个性化信息。这些方面与后端(例如数据库)进行交互。

可以使用多种语言来完成此编程: Java和jsp
asp
Perl
Python
Ruby on Rails等。

此代码与:


查询数据库
将数据编码为html
将信息插入并更新到数据库中
业务规则和计算

服务器负责人边编程必须知道:


上面提到的某些语言
HTML
SQL,
linux / unix shell脚本
OOP
业务规则等。


评论


“前端编程负责人必须知道”必须吗?我要说的是,仅使用HTML,CSS,Javascript和Ajax,您就可以完美生存。说服务器端编程与生成动态内容有关,而不是对客户端说相同的内容可能会给出错误的直觉...

–nbro
16-2-29在20:52



“大多数网页不是静态的,它们搜索数据库是为了向用户显示更新的个性化信息。这两个方面与后端(例如数据库)交互。”我将其改写为:“通过动态部分填充通常从数据库中获取的可变内容来动态生成页面。后端已经是与服务器端编程(IMO)有关的所有内容。

–nbro
16-2-29在20:54



再说一次,总的来说,我会说“……一个人应该知道……”而不是“必须”……

–nbro
16年2月29日在20:59

@nbro为什么不自己写答案呢?

–user243367
16年9月9日在17:46

@ColeTrumbo我的评论与您的​​评论之间有什么联系?人们可以批评别人的答案以改善答案吗?

–nbro
16年9月9日17:56

#3 楼

其他答案集中在什么是客户端和服务器端编程上:最常使用哪种语言,必须完成哪些任务等。

这是绝对正确的,但是我想念一下在网络编程的背景下,重点关注两种编程类型之间的区别。让我尝试解决这个问题。

安全性和权限

在客户端编程中,出于安全考虑,您无权访问整个系统。用户不必一定会信任从Web下载并在其计算机上执行的每段代码,这是客户端环境(浏览器和JavaScript引擎)的主要设计目标:提供隔离的环境客户端代码可以执行,但不能访问允许范围之外的任何内容。强制执行,因为最终您或您的公司将控制该系统。这种“隔离的框架”设计不是内置于服务器端编程工具和语言中,而是通过安装设置(使用具有受限权限的专用用户,选择需要或不需要root权限的端口等)来完成的。 br />
部署和平台

在服务器端编程中,必须使用某种工具(即使是make installgit clone)从代码外部进行部署,并且此部署通常是手动的,或者至少可以半监督的方式进行。您在其上部署的系统(即OS)通常在许多计算机上是统一的,但是可以根据您的需要进行大量自定义。

在客户端编程中,部署是从服务器端代码进行的,服务器端代码自动为客户端提供服务,而无需监督。底层系统(主要是浏览器)在大量计算机上可能有很大不同。为了使部署完全可行,必须保持标准,并且单一语言和环境的趋势越来越强。

这就是为什么将服务器端代码从一台机器复制到另一台机器的原因可能需要花费数周的时间,而客户端代码通常很难在不同的机器上执行。

状态和次要效果

(免责声明:这是迄今为止最主观的全部。我的论证可能有很多错误的方面。我认为,这只是一个有趣的假设。根据用户的请求更新数据,并发会导致冲突。即使大部分复杂性都转移到了数据库服务器上,服务器端代码也有责任允许数据库通过正确使用其接口来保持其对数据完整性的保证(例如,不使用高速缓存来进行更新,而这些更新从未被用户看到)。 DB),这也是服务器端代码的目标,即不要使数据库超负荷工作并使用户等待响应。

在客户端编程中,将结果呈现给客户端用户是一个更大的问题,这意味着存在次要效果(主要是打印到屏幕上)。这并不是说不涉及任何状态(例如cookie),只是代码的主要目标是实际与用户进行交互,并且没有次要影响就不会发生。

这就是为什么客户端编程通常需要(在某个时候)通过演示查看屏幕,以检查所有颜色和布局是否正确,而服务器端编程几乎只能在面向文本的环境中进行,因为在这种情况下,自动化测试检查逻辑是否仍在执行应做的事情。

#4 楼

这绝不是要接受的答案。而是我将其作为补充点(针对when do you use each of them问题),到目前为止,尚未在其他答案中提到:

知识产权保护

位于客户端的源代码(例如Javascript中的代码)易于阅读和/或能够进行反向工程(如果被混淆了)。

位于服务器端的源代码-但是,一方可以安全地保护专有算法,并且只能返回结果;一个黑匣子。

评论


是的,但这并不是最重要的一点,服务器在服务器之间,而客户端在那儿可以接收。某些逻辑最好在客户端上完成(例如,购物车,您不要让超市一直跟踪您的购物车,对吗?),而某些逻辑最好在服务器上完成(从数据库中获取信息)

–马达拉的幽灵
16 Mar 17 '16 at 8:06

@MadaraUchiha,因此引言是:“这绝不是要被接受的答案;相反,我将其作为补充要点”

– Kosta Kontos
16年6月9日在8:38

那不应该是另一篇文章的一部分吗?我是新来的,但是拥有一个完整的答案比散落的答案更可取吗?

– Julix
16年8月18日在6:48