看问题要看到本质:从Web服务器说起

从‘非洲比格陵兰大14倍’说起:聊聊Web地图为什么偏爱Web墨卡托投影(EPSG:3857) 本文探讨了Web地图为何普遍采用Web墨卡托投影(EPSG:3857),从格陵兰岛与非洲面积对比的视觉误差切入,分析了该投影在工程效率与全球覆盖上的优势。文章详细解析了Web墨卡托的球体近似、纬度截断和直角坐标系三大特性,对比传统GIS投影的局限性,揭示了现代WebGIS在精度与实用性间的平衡艺术。 阅读详情

这是个很长的故事, 让我们从Web服务器来开始。

Web服务器是个挺简单的东西,工作很简单,在80端口上监听,解析客户端发过来的HTTP的请求, 然后把相对应的HTML文件、Image等返回给客户端就可以了。 像这样:

640?wx_fmt=gif

640?wx_fmt=png

这就是一个静态内容服务器,所谓静态内容,就是服务器端的内容如HTML不会变化,每次请求都是一样的。除非人们手工改了它。

实现这样一个“玩具Web服务器”并不难,只要能了解服务器端Socket编程就可以了, 主要工作是编程处理HTTP协议的细节。

动态内容

但是如果想再往前走一步,让Web服务器能产生动态内容,那就难了。

比如说来了一个HTTP请求,在其中携带者用户名和密码,要求你去数据库做一个查询,看看用户是否存在。

POST  /login

user=xxxx&pwd=xxx

这个静态的Web服务器就搞不定了,它根本,也不应该去查询数据库。

怎么办呢?你可以用某种语言(比如C语言)写个程序, 来查询数据库,假设这个程序的名字叫db-query。

可是你将面对非常棘手的问题:  Web服务器是个进程,db-query也是个进程,这俩货之间怎么通信呢?

(友情提示,下面内容略显枯燥,可跳过)

首先是参数的传递,一种办法是这样:对于每个动态请求,Web服务器进程创建一个db-query的子进程,然后通过环境变量把参数传递过去。

web服务器:

setenv("QUERY_STRING","user=xxxx&pwd=xxx")

db-query子进程 :

param = getenv("QUERY_STRING")。

下一个问题:db-query这个子进程获得了用户名和密码,查询了数据库,怎么把查询结果返回给浏览器?

有个很巧妙的办法!

每个程序都有所谓的标准输出(STDOUT),db-query只要调用printf这个函数,数据就会输出到STDOUT,我们就可以在黑乎乎的控制台上看到了数据输出了。

但是输出到控制台是万万不行的,我们得输出到socket才可以发回浏览器。

每个浏览器和服务器的连接都是一个Socket, 每个socket都有一个文件描述符fd, 如果把查询数据库程序db-query的STDOUT重定向到那个fd,会发生什么?

没错!db-query的所有输出都直接发送的客户端的socket了,Web服务器可以撒手不管了!

当然,如果浏览器要看到的是HTML页面, 那db-query这个程序就需要输出HTML了。

640?wx_fmt=png

640?wx_fmt=gif

这种方式就就是大名鼎鼎的CGI,当你看到网址中有cgi-bin字样的时候,很有可能就是用CGI实现的。  只要遵循CGI协议, 可以用任何语言来实现动态的网站。

这是人类迈出的一大步,有了这一步,才能在网上购物,办公,社交,聊天......  你才能看到我这篇文章(嗯,也许腾讯把微信公众号的文章都静态化了, 请了解详情的同学告知)

但是,CGI是非常复杂和笨拙的, 主要体现在:

第一,对每个请求,都得创建一个子进程去执行,这是个非常大的开销。

第二,对程序员来说,编程极为痛苦,要操作环境变量,还需要直接在编程语言中输出HTML!

640?wx_fmt=gif

640?wx_fmt=png

麻烦不麻烦,难受不难受,上个世纪的程序员苦逼不苦逼?

Servlet

怎么才能跳出苦海?必须得做到关注点的分离!

程序员的关注点是:拿到Http 请求中的数据,执行业务, 然后输出Http 响应。 别的什么环境变量,重定向,别来烦我!

那就简单了,让程序员写个类,里边是业务逻辑, 然后我们想办法构建一个HttpRequest对象和HttpResponse对象,传递给程序员的类让他使用不就行了?

谁来创建这个HttpRequest和Response 对象,  然后调用程序员写的类?

静态Web服务器表示我不愿意,我就想管好我这一亩三分地,把静态内容给大家服务好。

Tomcat已经迫不及待地要上场了,我来我来。码农朋友们,我送给你们一个规范,叫Servlet, 你们按照Servlet的规范来写程序,放到我这里运行,别的什么都不用管了。

640?wx_fmt=gif

640?wx_fmt=png

程序员很高兴,只需要写简单的Servlet就行了,HttpRequest和HttpResponse对象由Tomcat来创建,可以从HttpRequest中获得Header, Cookie, QueryString 等信息, 从HttpResponse中获得输出流,直接向浏览器输出结果, 简单又直接。

Tomcat还郑重向大家声明:对于每个请求,我只会用一个线程来出来,线程的开销可比进程小多了。

对于那个在代码中混杂HTML的问题怎么处理?

 Tomcat也有办法, 可以在HTML混杂代码!这就是JSP。执行期其实会被编译成Servlet。

(码农翻身注:请移步《JSP:一个装配工的没落》)

你看,责任分离了,每个人只要办好自己的事情就好。

(注:实际上,我们不会在Servlet中写业务逻辑, Servlet现在通常是一个通往框架的入口。)

WSGI

CGI表示不服:遵循我的协议,任何语言都可以来实现动态网站,你Servlet只是Java规范,不管别的语言了?

Servlet规范确实没法跨语言实现,那要是Python也想做动态Web网站,该怎么办?

既然已经认识到动态网站的本质了, 可以采用类似的思想来处理嘛! 我们为Python也定义一个规范,叫做WSGI (Web Service Gateway Interface)。

让程序员写个类或者函数(称为wsgi application),在其中实现逻辑。让某个动态服务器(称为wsgi server)把Http Request和Response传递给它,就可以执行了。

但是Python表示:我不喜欢你们Java 那一套啰里啰嗦的类,HttpRequest 不就是一些key value吗?放到我钟爱的dict中多好 !我把它叫做enviroment, HttpResponse也没必要,直接用函数的返回值(确切说是一个可迭代对象)就好。

640?wx_fmt=gif

640?wx_fmt=png

看看,是不是和Java 的Servlet 很像?(当然,忽略了很多细节。)

从本质上来说,都是为了关注点的分离:

1. 用一个动态内容服务器(wsgi server,Tomcat等)来接受并且封装HTTP 请求,降低程序员的负担。

2. 程序员只需要遵循约定(servlet,wsgi)就可以轻松实现自己的业务,不用关注系统的处理细节。

如果你先学的Java,通过Servlet理解了动态内容网站的本质和解决问题思路,再看到Python的wsgi,一眼就能看透,学起来飞快,反过来也是如此。

Web服务器的例子还比较简单,但是也体现出了这个道理:遇到问题要深度思考,努力看到本质,这样才能举一反三。


640?wx_fmt=gif


码农翻身公众号开放投稿,可能是全网最高片酬:

用故事讲技术 ,稿费1000

技术/职场/感悟/面试等,稿费700

翻译类文章,每千字200

详情猛戳: 可能是全网最高片酬,速来!

640?wx_fmt=jpeg

1.03---去中心化的本质到底是什么?从中心服务器说起 【摘要】本文深入解析Web3去中心化本质,澄清常见误区,对比Web2与Web3架构差异。从中心服务器切入,剖析去中心化的技术支柱(P2P网络、共识机制、链式结构),提供去中心化程度评估框架,并指导Web2开发者思维迁移。文章强调去中心化不是技术优化而是信任重构,揭露伪去中心化特征,提出"不信平台,只信代码"的核心理念。通过架构对比、机制原理和代码思维迁移,帮助开发者建立Web3信任模型的技术认知。 阅读详情

相关推荐

postgreSQL配置

postgreSQL配置postgreSQL配置postgreSQL配置

为什么需要Web 服务器?底层原理是什么?

底层原理是,当客户端向 Web 服务器发起 HTTP 请求时,Web 服务器会根据请求的 URL 路径或者文件扩展名等信息,决定如何处理请求。如果请求的是静态资源,Web 服务器会直接返回文件内容;如果配置了负载均衡,Web 服务器会根据一定的算法将请求分发给后端服务器处理,并将后端服务器的响应返回给客户端。分发静态资源:Web 服务器可以处理并分发静态资源(如 HTML、CSS、JS、图片等),而不需要借助动态脚本语言(如 PHP、Python、Ruby 等)。这样可以提高访问速度和节省服务器资源。

长风破浪会有时的博客 957

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

什么是服务器?(Powercert animated videos)

服务器本质上是一个用于为用户提供服务的专用电脑,比如一个普通的桌面电脑或者是一个工作站,所以服务器是一台许多用户可以通过互联网或者是本地网络连接的中心设备,用户一般为了某种特定服务连接服务器,比如检索网站去获取数据或者收发邮件。 一台服务器可以用于专门只提供一种服务。你可以让一个服务器专门用于登录网站,一个专门用于储存数据,一个专门用于收发邮件。这种模型就是通常一个大型组织所使用的。或者你也可以搭建一个服务器去处理所有的这些服务在同一个服务器上。

Renee的博客 1431

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4404

手把手教你配置UFS的PSA状态机:WRITE/UNMAP命令实战与LBA映射避雷

本文详细解析了UFS PSA状态机的配置流程,重点探讨了在Pre-soldering状态下WRITE命令的原子性操作原则与单次写入LBA的重要性。通过实战代码示例,指导开发者如何正确初始化PSA环境、切换状态机,并深入剖析了使用UNMAP命令清理LBA映射时的常见陷阱与避雷指南,确保量产数据安全与良率。

weixin_29213525的博客 420

web服务器理解和重要性

服务器是什么?服务器与客户端之间通讯原理?程序员做项目如何应用出来?

weixin_46412999的博客 456

图像传感器与信号处理——SFR算法/ISO 12233解读

图像传感器与信号处理——SFR算法图像传感器与信号处理——SFR算法1. 前言2. 基于视觉的分辨率测量方法3. 基于边界的SFR算法4. 基于正弦波的SFR算法 图像传感器与信号处理——SFR算法 SFR的全称是Spatial Frequency Response,空间频率响应。介绍SFR算法的参考文献主要是ISO 12233这篇英文文档。和读一般的论文感觉不同,文档读起来更加晦涩难懂,可能是因...

weixin_44580210的博客 1万+

【11.0】前端基础之阶段性复习

【11.0】前端基础之阶段性复习 【一】HTML 【1】什么是HTML 超文本标记语言,就是一堆标签,每个标签具有特定的意义,是浏览器展示页面所公用的一套标准 HTML是一种用于构建网页的标记语言,全称为"Hypertext Markup Language"(超文本标记语言)。 它由一系列标签(tag)组成,这些标签描述了网页中的内容和结构。 HTML不是一种编程语言,而是一种描述性的标记语...

Chimengmeng的博客 996

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

温升试验详解

温升试验是电子设备可靠性验证的重要手段,用于评估器件在正常工作或极限条件下的热稳定性。试验通过测量器件表面或关键点温度与环境温度的差值(ΔT),判断是否存在过热风险。主要依据行业标准,采用热电偶、热像仪等设备测量稳态温度。热阻分析可建立温升与功耗的关系,指导器件选型、PCB热设计和散热结构优化。典型应用包括电源模块和LED电路测试。温升试验通过系统性热分析,能有效提升产品在高负载、高温环境下的可靠性和安全性,对现代小型化、高密度电子设备尤为重要。

硬核科技 1331

什么是 Web 服务器?底层原理是什么?

在底层,Web服务器的原理是通过网络协议(例如HTTP、HTTPS等)接收来自客户端的请求,处理请求并返回相应的内容。Web服务器会读取这个请求,查找所需的资源,并将其返回给浏览器。Web服务器是一种特殊的服务器,用于托管和提供网页、图片、视频和其他静态或动态内容。Web服务器还可以与其他组件和服务一起工作,例如数据库服务器、负载均衡器、安全证书和防火墙等,以便提供高质量的服务和安全性。总之,Web服务器是提供Web服务的关键组件之一,它通过网络协议接收和处理请求,并提供Web资源和服务。

长风破浪会有时的博客 313

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

刷新页面会中断web socket吗_看问题要看到本质:从Web服务器说起

这是个很长的故事, 让我们从Web服务器来开始。Web服务器是个挺简单的东西,工作很简单,在80端口上监听,解析客户端发过来的HTTP的请求, 然后把相对应的HTML文件、Image等返回给客户端就可以了。像这样:这就是一个静态内容服务器,所谓静态内容,就是服务器端的内容如HTML不会变化,每次请求都是一样的。除非人们手工改了它。实现这样一个“玩具Web服务器”并不难,只要能了解服务器...

weixin_39611930的博客 446

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

perseverance51博客 5786

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

服务器怎么控制忽略样式_看问题要看到本质:从Web服务器说起

这是个很长的故事, 让我们从Web服务器来开始。Web服务器是个挺简单的东西,工作很简单,在80端口上监听,解析客户端发过来的HTTP的请求, 然后把相对应的HTML文件、Image等返回给客户端就可以了。像这样:这就是一个静态内容服务器,所谓静态内容,就是服务器端的内容如HTML不会变化,每次请求都是一样的。除非人们手工改了它。实现这样一个“玩具Web服务器”并不难,只要能了解服务器...

weixin_39815925的博客 76

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

服务器本质不是机器,而是服务契约

服务器在技术语境中常被泛化为硬件设备或云资源,但其根本是支撑业务连续性的服务契约。从网络共享打印机的原始场景出发,服务器的核心在于响应请求、履行承诺、保障SLA,而非CPU主频或硬盘容量。这一契约驱动了从物理机、虚拟化到云服务器的三次演进,并催生BMC远程管理、RAID数据冗余、双电源容灾等工程实践。在DevOps与Serverless趋势下,‘服务器’概念正逐步隐去,但对服务状态、稳定性边界和故障响应逻辑的理解,仍是Web部署、高并发优化及线上问题排查的技术基石。

weixin_33508411的博客 270

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CSRF漏洞本质与实战防御:从浏览器自动携Cookie说起

CSRF(跨站请求伪造)是一种基于Web身份认证机制缺陷的攻击方式,其核心原理在于浏览器对同源Cookie的自动携带行为与服务端‘只认凭证、不验意图’的信任模型之间的错配。它不依赖用户点击恶意链接,而是利用已登录态发起看似合法的请求,导致未授权操作。技术价值体现在对认证边界设计的深刻警示——安全不能仅靠前端隔离,必须由服务端实施意图验证。典型应用场景包括传统Web表单提交、后台管理接口、SPA应用中的JWT Cookie混用等。本文聚焦零基础可复现的CSRF构造逻辑与工程级防御方案,涵盖CSRF Token

weixin_33695450的博客 575

从服务器构建说起(一).企业服务器综述

从服务器构建说起(一).企业服务器综述注:本文转载于《服务器的主要性能特点》来源不详,作者不详,此文是鲜有的精品,十分系统的介绍了服务器的相关概念,略有修改。草木瓜整理 20070401一、简介    服务器英文名称为“Server”,指的是在网络环境中为客户机(Client)提供各种服务的、特殊的专用计算机。在网络中,服务器承担着数据的存储、转发、发布等关键任务,是各类基于客户机

草木瓜 3897

从刷抖音说起:你每天都在 “用” 服务器,却可能不认识它

写了这么多,其实想告诉大家:服务器工程师不是 “修电脑的”,而是数字世界的 “隐形守护者”—— 我们搭建的服务器集群,是支撑微信、抖音、淘宝这些 APP 运行的 “基建”;我们做的运维和优化,是保证你刷视频不卡、下单不崩的 “后盾”。这个岗位不轻松 —— 要熬夜处理故障,要不断学习新技术,要承受业务中断的压力;但也很有成就感 —— 当你看到自己搭建的服务器集群扛住了双 11 的流量,当你快速解决故障让业务恢复正常,当你用自动化工具解放了重复劳动,你会觉得所有的辛苦都值得。

欢迎来到我的博客! 1941

【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】

socketWeb服务器本质。

Io32IgcL1的博客 228

从Nginx弃用listen http2参数说起:聊聊HTTP/2、HTTP/3与Web服务器配置的演进

本文探讨了Nginx弃用listen http2参数的技术背景及其对Web服务器配置的影响。随着HTTP/2到HTTP/3的演进,Nginx通过分离协议配置与端口绑定,为多协议并存场景做好准备。文章详细解析了配置模型变革的优势,并提供了面向未来的最佳实践建议,帮助开发者适应Web协议的持续演进。

weixin_33749242的博客 409

centos7 如何重启web服务_Web应用是如何提供服务的(一)?

随着编程经验的不断丰富,我们也需要扩大自己的知识边界。知识边界就像是你的护城河,护城河越宽,你在职场上就更加安全。在之前的一篇文章SSM框架的执行流程中,我讲解了一道常见的面试题目:SSM框架是如何处理用户请求的?细心的读者会发现,在那篇文章中,我把用户请求和系统的交互边界定义在了前端控制器DispatcherServlet上,而在那之前的部分我并没有提及。今天,我们就来扩大这个边界、以更广阔的视...

weixin_42300525的博客 817

【超值分享】为何写服务器程序需要自己管理内存,从改造std::string字符串操作说起。。。

比如无处不在的HTTP协议,基于请求—应答的超文本协议,一问一答非常简单,请求头和响应头都是非二进制的字符串。 当服务端收到客户端的GET或POST请求时,服务器程序要先构造一个响应头并拼接响应体,如下: // 构造响应头 string strHttpResponse; strHttpResponse += "HTTP/1.1 200 OK\r\n"; strHttpResponse += "Server: HttpServer \r\n"; strHttpResponse += "Content

lgsoftlee的博客 353

[Web网页] Web 基础

本文介绍了Web技术的基础知识,包括Internet与Web的区别、BS架构的优势、Web开发的三大支柱(HTML/CSS/JS)、服务器端技术和数据库的作用。重点讲解了域名系统、静态与动态网页的区别、HTTP协议的工作原理和版本演进,以及Web1.0到Web2.0的发展历程。文章为初学者梳理了完整的Web知识框架,帮助建立对Web技术的系统性理解,为后续深入学习打下基础。

kura_tsuki的博客 1065
上一篇: 通过女票的淘宝历程,大白话讲解大数据各个方向的分工
下一篇: JavaScript会是Web开发的未来吗?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值