以下内容主要来自知乎https://www.zhihu.com/question/22689579 用户@张秋怡 的回答:
## 1. 网站访问过程:
本地发送请求 --> 网站服务器接收请求 --> 从数据库中查询数据(html页面,用户信息等) --> 服务器接收数据,返回给浏览器 --> 浏览器解析渲染html文件
## 2. HTML, CSS, 与JavaScript
HTML是标记语言,主要用来标注文件结构。CSS则是用来修改和美化页面格式。Javascript可以添加动态效果,向服务器发送请求,不用刷新界面便能实现与服务器的交互(也就是AJAX,异步的JavaScript和XML)。
## 3. HTTP协议
规定了浏览器和服务器之间请求和响应的通用写法。HTTP响应大概包括head和body,head里包括状态码(如200 OK,404 NOT FOUND等)、Content-Type(文本?动画?音频?...)、Content-Encoding等。body则一般是需要览器渲染的html文件。
## 4. Web Server
客户端与服务器的交互的主体、客体、载体是五花八门的
- 有时候不是传生成好的 HTML 或者其他服务器上已经有的文件,而是传输经过一定逻辑处理后生成的字符串或者其他各种封装好的数据
要让这些形形色色的机器能够通过网络进行交互,我们就需要指明一种协议(比如 HTTP/HTTPS)和一种数据封装格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是这种协议+格式的交流体系。不过 Web Service 的生态系统和 HTML 的标准不一样,用户可以选择的协议和数据封装格式更多,普通的网站访问用的 HTTP + HTML 只是其中一种,一些封闭系统内的交流还可以自己定义一个协议和格式来用(比如 QQ)。
除了提供 Web Service, Web Server 还会兼顾很多功能,包括提供缓存,平衡负载,这样在访问量比较大的时候能有有条不紊地接客。常见的现成的 Web Server 有开源的 Apache、Nginx和微软的IIS,你也可以用一些工具(比如 Node.js )自己定制一个。因为 Web Server 需要比较好的性能,所以投产时用的 Web Server 通常是C/C++/Java写的
## 5. 服务器脚本
服务器这边也有代码,就是服务器脚本,不仅可以用来接收请求发送文件,还可以处理上传过来的文件,根据不同请求操作服务器本地的文件或数据库等。
> PHP 就是一种常见的用来写服务器脚本的语言,其实只要是能拿来写大家传输数据的通用接口(CGI)的语言都可以用来写服务器脚本(也就是说几乎所有编程语言都可以写)
> 为了方便,我们在写服务器脚本的时候,通常还会用个同语言写的 Web Framework 来处理各种细节
## 6. 服务器端语言
早年常见的服务器端语言有:
- 开源的 PHP
- Sun 公司的 JSP 中使用的 Java
- 微软的 ASP 中使用的 VBScript
现在在这方面的应用热起来的语言有:
- Python,对应常见的 Framework 包括知乎和Quora有用到的 Tornado(其实是自带 Framework 的 Web Server),社区很成熟的 Django (用户包括 Instagram、Pinterest)等
- Ruby,一般都用 Rails 这个 Framework,用户包括 Github、早期的 Twitter 等
- 逆天的 JavaScript,有了 Node.js 这个平台,Web Server、服务器脚本和浏览器脚本全都可以用JavaScript 来写……Node.js上最常用的 Framework是Express
- 微软家的则跟着 ASP.NET 转移到了C# 或者 Visual BasicErlang,擅长大规模的并发,不少游戏公司拿来写服务器,靠几十个工程师支撑几亿用户的WhatsApp也是用的这个~
几种常见的架构包括:
- LAMP = Linux + Apache + MySQL + PHP(P还可能是Python或Perl。有时候L会改成W=Windows。),也就是服务器上的操作系统是 Linux,Web Server 用 Apache,数据库用 MySQL,服务器脚本用 PHP,这些都是开源技术,网站起步时用起来的成本会比较低,所以是普通网站里非常常见的架构(虽然对于发展得很大的网站会遇到很多瓶颈),Facebook就是这种,淘宝也曾经是。
- J2EE,Java 世界的架构,通常是企业用的(银行、大型公司,.etc),比较常见地还会搭配一种 UNIX 做操作系统,Apache 做 Web Server,Tomcat 转换 JSP 到 Java 给服务器程序用(其实它也自带 Web Server),Oracle 数据库等等。不一定拿来建站,常常用来提供企业里的各种需要用到网络的业务。我们学校教务系统就是用J2EE做的=。= 淘宝现在也是从LAMP转型到了这个。
- ASP.NET,微软家的架构,通常会搭配 Windows Server 操作系统,SQL Server 数据库,IIS 做 Web Server。StackOverflow和京东(曾经)就是这个架构。
- 神奇的MEAN架构,MongoDB做数据库,Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于编写 Web Server。神奇之处在于这几个东西的语言都是 JavaScript (MongoDB的实现不是,但与外界沟通用的语言是)。因为是比较新的架构,还有待时间的考验,不过被很多人(尤其是靠 JavaScript 吃饭的前端程序猿们)热切关注。
- 一般来说重点不在技术而且在乎成本的新网站比较喜欢用 LAMP,重视安全稳定和速度的企业和机构喜欢 J2EE,想省事的网站喜欢ASP.NET,比较 Geek 的网站和创业公司喜欢折腾各种 Python、Ruby、Node.js世界的东西,Google 这样现成的技术都解决不了需求的超大型网站就自己折腾解决方案。