web、客户端、服务器端的含义

接入与开发

用一页把 Web、客户端、服务器端三个词的分工讲清,给刚入门的人一套能自己判断代码该跑在哪的对照方法。

刚学开发的人常卡在一句话上:这段逻辑到底写在浏览器里还是写在服务器上?分不清就会出现把密钥塞进前端、把重活压在客户端、或者把该缓存的请求每次都打到后端的问题。这篇不背定义,直接给你一套按「谁在跑、跑在哪、谁能看见」来分的判断顺序,再补上常见误区和排查清单,看完你能自己给一段代码归位。

刚学开发的人常卡在一句话上:这段逻辑到底写在浏览器里还是写在服务器上。分不清就容易出三种问题,把密钥塞进前端、把重活压在客户端、或者该缓存的请求每次都打到后端。这篇不背定义,给你一套按「谁在跑、跑在哪、谁能看见」来判断的顺序。

三个词听着像同一层的东西,其实各回答一个不同的问题。把它们当成三种身份来看,比背概念有用得多。下面逐节拆开,每节末尾都给你能直接用的判断办法,看完你能自己给一段代码归位。

三个词其实在回答三个不同的问题

别急着找「标准定义」,先看它们在句子里通常替代什么。Web 替代的是「怎么访问」,客户端替代的是「谁发起、谁面对用户」,服务器端替代的是「谁常驻、谁被很多人共用」。三个问题的答案可以互相组合,也可以互相独立。

Web
一种访问方式:通过浏览器和 HTTP 这套约定去拿资源,是入口形态,不是某一台机器
客户端
发起请求并面对用户的那一端,负责界面、交互和展示结果
服务器端
常驻运行、被多个用户共用、不直接给人看界面的那一端,负责处理请求和读写数据

三者的关系不是并列,而是嵌套。Web 是客户端与服务器端通信的一种常见方式;客户端和服务器端是一对角色,同一台机器在不同场景里可以扮演其中之一。你本机起的那个服务进程,对浏览器来说就是服务器端。

  • 同一套后端,网页、桌面程序、手机 App 都能访问,它们只是入口不同,后端代码基本不用改
  • 本地开发时你的电脑同时是客户端和服务器端,别被「端」这个字骗了
  • 判断一段代码属于哪一类,先问它的输入从哪来、输出给谁看,而不是先问它写在哪里
  • 命令行工具也是客户端,只是它没有图形界面

一段代码该放哪:四步判断顺序

这一节给的是执行顺序,从头往下问,问到哪一步有答案就停。顺序本身比单条结论重要,因为很多判断是「先排除再定」的。

  1. 第一步:看数据能不能让用户看到密钥、数据库账号、别人的数据、计费逻辑,一律放服务器端。验证办法很简单,打开浏览器的开发者工具,如果能在网络请求或源码里翻到它,它就不该放在客户端。
  2. 第二步:看要不要跨用户共享需要共享状态、需要写库、需要排队和限流,放服务器端;只影响当前这台设备显示效果的,放客户端。验证方式是把同一段逻辑跑在两台设备上,看结果是否必须一致。
  3. 第三步:看网络往返值不值每敲一个字就发请求去校验的表单,先在客户端做一遍粗筛,最终判定再交给服务器端。验证办法是断网试一次,粗筛还该正常工作,终判应该失败。
  4. 第四步:看环境依赖要访问本地文件、摄像头、剪贴板、本地缓存,只能在客户端;要长时间跑、要按计划定时执行,只能在服务器端。拿不准时先问「这段代码的输入是谁给的、输出给谁看」,答案通常就出来了。
典型场景放客户端放服务器端
表单格式校验先做粗筛提示最终判定与落库
接口密钥绝不出现持有并调用
列表排序与筛选对已取到的数据做对全量数据做
定时跑的任务不适合合适
读本地文件只能放这不行

新手最常踩的四个混淆点

这四个点不是理论辨析,每一个都对应线上真会出问题的地方。看完对号入座,能省掉不少返工。

  • 把「网页」当成「Web 的全部」:Web 是访问方式,网页只是最常见的一种界面形态,接口、静态资源、WebSocket 都在这套体系里
  • 把「前端」和「客户端」画等号:前端是职责划分,客户端是运行位置,一个桌面端软件也可能有它的前端层
  • 以为服务器端一定在远端机房:本地起的一个服务进程,对浏览器来说同样是服务器端,位置不是重点,角色才是
  • 把接口鉴权当成客户端的事:客户端只负责带上凭证,校验和权限判定必须落在服务器端,客户端做的任何校验都只是体验优化

补充一个判断尺度:凡是「可以被绕过」的检查,都只能算体验优化,不能算安全措施。这条尺度能把上面四点一次性串起来。

上手前的自查清单与出错时的排查顺序

写代码前先过自查清单,出错后按排查顺序走。顺序别乱,先确认通不通,再判断是谁的问题,能少走很多弯路。

检查项问自己
密钥代码里有没有硬编码的密钥或账号
越权这个判断被绕过会有什么后果
压力这个请求一秒会来多少次
状态这个状态是不是只有当前用户需要

排查顺序是:先确认请求有没有真的发出去,看浏览器开发者工具的网络面板或客户端日志;再看是客户端拼错了地址,还是服务器端没接住;再看鉴权是客户端没带凭证,还是服务器端拒了;最后才怀疑业务逻辑。这个顺序的原因是从外往里收,避免一上来就钻业务代码。

报错分不清是谁的问题时,先看客户端能不能连通。到 接口测速(/tools/speed-test) 量一遍延迟基线,通不通和快不快是两件事。如果连接本身就不稳定,先别急着改业务代码。

下一步把三个词放回你自己的代码里对一遍,比继续看定义有用。想横向对比不同服务端的实际表现,可以去价格追踪页看当时的数字。

常见问题

浏览器里跑的代码,别人能看到吗?

能看到。发到客户端的一切都算公开,压缩和混淆只是增加阅读成本,不算保护。所以密钥、内部接口地址、权限判断这些不能只放在客户端。反过来,界面渲染、输入格式提示这类放客户端完全没问题,因为它们不涉及秘密。

服务器端一定要买云主机吗?

不一定。角色由「谁常驻、谁被请求」决定,不由机器位置决定。你在自己电脑上起一个本地服务,浏览器去访问它,那台电脑此刻就是服务器端。团队规模小的时候,先用一台轻量机器把服务跑起来是常见做法,等访问量真上来了再谈扩容。

命令行工具和桌面软件算客户端还是服务器端?

算客户端。它们的共同点是发起请求、面向某个具体使用者。区别只在界面形态:命令行用文本交互,桌面软件用图形界面,手机 App 用触屏。判断标准是「它主动去问别人要东西」还是「它等着别人来问它」,前者是客户端,后者是服务器端。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。