什么是服务端编程,以及需求哪些技术??
大多数的大型网站选用服务器端编程来在需求的时分动态展现不同的信息,这些信息一般会从服务器上的数据库中取出,然后发送给客户端,并经过一些代码(比方 HTML 和 Javascript)展现在客户端。
或许服务器端编程的最大优点在于它答应你对不同的用户个别展现不同的网站信息。动态网站能够高亮依据用户喜好和习气的与用户相关度更高的内容。经过存储用户的偏好设置和个人信息使得网站愈加易于运用——比方经过重复运用信用卡的详细信息来简化后续付款流程。
它答应在页面中与用户进行交互,比方经过邮件或许其他途径发送告诉和更新信息。服务器端的一切的这些能力使得网站能够与用户有更深的联系。
在现代的 web 开发中,学习服务器端编程是很被推荐的。
服务器端编程是什么?
Web 阅读器经过超文本传输协议(HTTP)来和 Web 服务器
进行通讯。当你在网页上点击一个链接,或提交一个表单,再或进行一次查找时,一个 HTTP 恳求就从你的阅读器发送到了方针服务器。
这个恳求包括一个标识所恳求资源的 URL,一个界说所需操作的办法 (比方获取,删去或许发布资源),还能够包括编码在 URL 参数中的附加信息。附加信息以键值对(参数和它的值)的方式,经过一个查询字符串
,作为 POST 数据(由HTTP POST 办法
发送)或存放在与之相关联的Cookie
中。
Web 服务器等待客户端的恳求信息,在它们抵达的时分处理它们,而且回复 Web 阅读器一个 HTTP 呼应信息。这个呼应包括一个表明该恳求是否成功的状况行(比方“HTTP/1.1 200 OK”代表恳求成功)。
相应一个恳求的成功回应包括被恳求的资源(比方一个新的 HTML 页面,或许图片等),然后这些会被展现在客户端的 Web 阅读器上。
静态网站
下面这张图展现了一个静态网站的基本架构。(静态网站是指无论何时当一个特定资源被恳求的时分都回来相同的被硬编码的内容)当用户想要导航到某个页面时,阅读器会发送一个指定到这个页面的 URL 的 HTTP“GET”恳求。服务器从它的文件体系中检索被恳求的文件,然后回来一个 HTTP 回应,该回应包括被恳求的文件和一个状况码
(一般 200 代表操作成功)。假如出于某些原因被恳求的文件无法检索到,就会回来过错码。(具体能够参照 客户端过错回应
和 服务器过错回应
)
动态网站
动态网站是指,一些呼应内容只要在被需求的时分才会生发的网站。在一个动态网站上,页面一般是经过将数据库的数据植入到 HTML 模板中的占位符中而发生的(这是一种比运用静态网站有用得多的存储许多内容的方式)。
动态网站能够依据用户供给的个人信息或许偏好设置来回来不同的数据,而且能够展现作为回来一个回应的内容的一部分的其他操作(比方发送告诉)。
大多数支撑动态网站的代码必须运转在服务器上。编写这些代码便是所谓的“服务器端编程”(有些时分也称“后端脚本编写”)。
下面的图表展现了一个动态网站的简略架构。就像之前的图表那样,阅读器发送 HTTP 恳求给服务器,然后服务器处理恳求而且回来合适的 HTTP 呼应。
动态网站关于静态资源的恳求的处理方式和静态网站是相同的(静态资源是指那些不会改变的文件——最典型的便是:CSS,Javascript,图片,预先生成的 PDF 文件等)。
关于动态资源的恳求则会指向(2)服务器端代码 (在图中显现为 Web Application(Web 运用))。在处理“动态恳求”时,服务器会首要解释恳求,从数据库中读取被恳求的信息,然后将这些被检索的信息组合到 HTML 模板中(4),最后回来一个包括所生成的 HTML 页面的回应(5,6)。
服务器端编程和客户端编程是相同的吗?
让咱们将注意力转向涉及服务器端编程和客户端编程的代码。在每一个情况下,代码都是显然不同的:
- 它们有不同的意图和关注点。
- 它们一般不会运用相同的编程言语(Javascript 是一个特例,它既能够被用在服务器端也能够被用在客户端)。
- 它们在不同的操作体系环境中运转。
在阅读器端运转的代码被称为客户端代码,而且首要涉及所出现的网页的外观和行为的改进。这就包括挑选和设计 UI 元素、布局、导航、表单验证等。相反的,服务器端网站编程首要涉及,关于相应的恳求,挑选所要回来给阅读器的内容。服务器端代码处理这样一些问题,比方验证提交的数据和恳求、运用数据库来存储和检索信息及发送给用户正如他们所恳求的的正确内容。
客户端代码运用 HTML
、CSS
和 JavaScript
来编写——这些代码直接在 Web 阅读器中运转,而且几乎没有拜访底层操作体系的途径(包括对文件体系拜访的约束)。
web 开发者无法操控用户或许会运用哪一种阅读器来阅读网站——阅读器对客户端代码的兼容性支撑水平不一致,客户端编程的一部分应战便是怎么高雅地处理阅读器兼容性问题。
服务器端代码能够用任何一种编程言语进行编写——比较受欢迎的服务器端编程言语包括 PHP、Python、Ruby 和 C#。服务器端代码有充沛的权限拜访服务器的操作体系,而且开发者能够挑选他们期望运用的编程言语(和特定版本的言语)。
开发者们一般会运用 web 结构来编写他们的代码。web 结构是一个各种函数、目标、办法和其他代码结构的集合体,web 结构被设计用来处理一些遍及问题,然后加速开发,而且简化在一个特定领域中面临的不同类型的使命。
相同的,当客户端和服务器端代码运用结构时,它们的领域是不同的,因此结构也会不同。客户端 web 结构简化布局和演示使命,可是服务器端 web 结构供给许多的一般 Web 服务功用,否则的话你或许需求自己来实现这些功用(比方支撑会话、支撑用户和身份验证、简略的数据拜访、模板库等)。
补白: 客户端结构一般被用来协助加速客户端代码的开发,可是你也能够挑选手写一切的代码;事实上,假如你只需求一个小型的、简略的网站 UI,手写自己的代码或许更快而且更高效。
相反的,你应该从来没有考虑过不运用结构而直接编写 web 运用程序的服务器端组件——实现一个重要的功用比方 HTTP 服务器真的很难直接从头开始用 Python 言语构建,可是一些用 Python 言语写的 web 结构,比方 Django 供给了开箱即用的功用,同时还包括其他许多有用的东西。
你能够在服务器端做什么?
服务器端编程对错常有用的,因为它答应咱们高效地分发为个人用户制定的信息,然后创造了更佳的用户体会。
一些公司比方亚马逊运用服务器端编程来生成产品的查找成果、依据客户的偏好和曩昔的购买习气来推荐方针产品、简化购物流程等。
银行运用服务器端编程来存储帐号信息,而且仅答应授权的用户检查和进行买卖。Facebook、Twitter、Instagram 和 Wikipedia,运用服务器端编程来杰出、共享和操控对风趣内容的拜访。
服务器端编程的遍及运用和优点被罗列在了下方。你会发现二者有一些是重叠的!
信息的高效存储和传输
幻想一下,在亚马逊上供给着多少产品,在脸书上发布了多少帖子?为每一个产品和帖子都创立一个独立的静态页面将是完全不切实际的。
服务器端编程则答应咱们在数据库中存储信息,而且答应咱们动态地创立和回来 HTML 和其他类型的文件(比方,PDF 文件和图片等)。咱们也能够简略地传输数据(JSON
、XML
等),来让合适的客户端结构出现(这样就减少了服务器的处理压力和需求被传输的数据总量)。
服务器的工作内容不仅限于从数据库发送信息,或许还会挑选性地回来软件东西的成果,或许来自聊天服务的数据。内容乃至能够被定位到接受它的信息的客户端设备的类型。
因为数据被放在数据库中,因此愈加简单被共享和更新到其他商业体系(比方,当产品在网上或许实体店卖掉之后,商店能够更新它的存货清单数据库)
补白: 你不必很难就能够想到服务器端代码关于高效存储和传输信息的优点:
- 翻开
亚马逊
或许其他一些电子商务网站。 - 查找一系列关键词,然后注意到页面结构并没有发生改变,尽管查找成果发生了改变。
- 翻开两到三个不同的产品。注意到它们是怎么拥有一个类似的结构和布局的,可是不同产品的内容是从不同数据库中获取的。
关于一个一般的查找词条(比方“鱼”),你会看到数百万的回来值。运用数据库答应这些数据被高效地存储和共享,而且使得信息的展现就被操控在那一个特定的当地。
定制用户体会
服务器能够存储和运用客户的相关信息来供给一个定制化的用户体会。比方,许多网站存储信用卡信息来使得用户不必再次输入细节信息。有些网站,比方,谷歌地图运用家庭或许当前位置来供给途径信息,然后在查找成果中杰出本地商业。
对用户习气的更深层剖析能够被用来猜测用户的爱好和愈加深度地定制化回应和告诉,比方,供给一张清单来展现从前去过的当地,或许在地图上标识你或许想去的非常受欢迎的地址。
补白: 谷歌地图会保存你的查找,阅读的历史记录。频频地阅读或许频频地查找地址将会使得它愈加的醒目。
谷歌查找成果依据之前的查找进行优化。
1.拜访谷歌查找
2.查找“足球”
3.现在在查找框中输入“喜爱” ,你就会观察到查找会自动补全
真的是巧合嘛?这算不上什么!
操控对内容的拜访
服务器端编程答应网站约束合法用户的权限,而且只供给用户被答应检查的信息。
实在世界的比方有:
- 社交网站,比方 Facebook 答运用户完全操控他们自己的数据,可是只答应他们的朋友和家人检查和谈论这些数据。用户决议谁能够看到他们的数据,而且经过扩展,决议谁的数据出现在他们的反应里边——授权是用户体会里边的一个中心部分!
- 此时此刻您所拜访的网站也操控着内容拜访:文章对一切人都是可视的,可是只要现已登录的用户能够修正内容。为了实验一下,你能够点击一下页面上方的修正按钮——假如你现已登录了的话,将会展现出修正界面;假如你还没有登录,你会被导航到注册界面。
补白: 想想其他实在的约束了内容拜访比方。比方,假如你直接拜访你银行的网页,你能够看到什么?用你的帐号登录之后——你能够看到和修正什么额外的信息呢?有些什么信息是你只能够看到的而只要银行能够修正的?
存储会话和状况信息
服务器端编程答应开发者们充沛利用会话——简略来说便是一种机制,这种机制答应服务器存储一个网站现有用户信息,而且依据那些信息发送不同呼应。
这也就答应,比方说,一个网站知道一个用户从前登录过而且展现他们邮箱的链接或许订单历史,或许或许存储一个简略游戏的状况来保证用户能够再次拜访网站然后从上次留下来的当地继续。
补白: 拜访一个具有订阅模式的新闻网站,而且翻开一系列标签(比方The Age)。几个小时或许几天之后再来拜访这个网站。最后你将开始被重定向到一个向你解释怎么订阅的页面上,而且你将无法拜访文章。这个信息便是一个 session 信息被存储在 cookie 中的比方
告诉和通讯
服务器能够发送面向全体的或许面向指定用户的告诉,经过网站本身或许经过邮箱、SMS、即时音讯、视频会话或许其他的通讯服务。
几个比方:
- Facebook 和 Twitter 发送邮件或许 SMS 音讯来告诉你一些新的攀谈。
- 亚马逊定期的向你发送产品邮件而且向你推荐和你从前买过的产品很类似的产品或许是他们觉得你或许感爱好的产品。
- 一个网站的服务器或许向网站管理员发送正告音讯来正告他们服务器内存不足或许可疑的用户行为。
补白: 最一般的一种告诉类型便是“注册认证”。挑选任何一个你感爱好的大型网站(谷歌、亚马逊、Instagram 等)而且用你的邮箱创立一个新的帐号。你很快会收到一封验证你的注册的邮件,或许需求你去激活帐号。
数据剖析
一个网站能够收集到有关用户的许多的信息:他们查找什么?他们买什么?他们共享什么?他们在每一个页面停留多久?服务器端编程能够被用来依据这些数据的剖析而细化回应。
比方,亚马逊和谷歌都依据曩昔的查找(和购物)信息来为产品打广告。
补白: 假如你运用 Facebook,去看看你的 main feed,然后看一下帖子流。注意到其间一些帖子不是依照数字进行摆放的 – 拥有更多“喜爱”的帖子在列表中一般高于最近的帖子。
也能够看一下你收到的广告是什么类型的——你或许会看到你在其他网站检查的商品。Facebook 为杰出内容和广告的算法或许还很令人疑惑,可是很明显的,它是依据你的喜好、品味和习气的!
总结
你现已了解到的便是,服务器端代码在服务器上运转,它的首要角色是操控什么信息应该发送给用户(可是客户端代码只要处理给用户的数据的结构和展现)。
你也应该理解服务器端代码对错常有用的,因为它答应咱们创立,能够高效地向个别用户传输定制化的信息的,网站。另外,你还应该知道当你是一个服务器端程序员时或许能够做的一些工作。
最后你应该理解服务器端代码能够用许多种编程言语进行编写,而且你应该运用一个 web 结构来使得这个进程愈加简单一点。
在接下来的文章中咱们会协助你挑选一个关于你的第一个网站来说最好的 web 结构;可是,再接下来咱们略微详细一点地带你过一遍首要的客户端 – 服务器交互行为。