电脑拿到一个HTML文件,接下来通过<link>,@import等加载过来css样式。先生成一个DOM树,再生成一个css样式的树。
浏览器会将这两个树进行结合,生成最终的渲染树,根据这个树把页面画出来。
网页之间需要建立一套标准,规定可以写什么标签种类,标签又可以设置哪些属性等等。
HTML5: 一个比较新的标准
XHTML: HTML与近亲xml杂交的品种,对语法要求严格,为了兼容XML,语法跟HTML有不同。
浏览器给服务器发请求,服务器进行响应,都需要一个通用写法(即需要一个协议)——http协议
e.g. 状态码200 OK ,卸载响应里,代表这个东西我有
状态码404 NOT Found ,代表服务器中没找到你要的东西
由header + body 构成。
header中要说明type,及发过来文件的类型,是文本还是图片,还是视频
写header内容的工作是Web Server
body内容即为HTML文件内容,当服务器找到你要的页面之后直接拿来放在body中。
首先,Server,即有实体的
Web Server的最主要工作:提供Web Service
Service,即不是实体,是一种服务,一种协议+格式标准体系,用来与各种服务器之间进行交互。
客户端 与 服务器 的交互的主体,客体,载体五花八门,所以需要一种统一的service格式
·服务器可以使大型主机也可以使自己的小电脑,只要能跑相应的服务端程序就可以
·客户端可以是各种APP,可以运行在电脑,手机·····
·有的时候交互不仅仅是传已有的HTML文件,还需要经过一定逻辑处理之后生成的字符串、封装的数据
除了提供Web Service,Web Server还提供缓存,平衡负载等功能
常见的Web Server:Apache,Nginx,IIS (这些都是大公司做好的可以直接用它们的)
也可以用工具定制一个,例如node.js
由于Web Server需要较好的性能,所以一般还是用C/C++/JAVA更多一些
现代服务器除了可以完成 “接请求——发文件” 这种最基本的工作以外,还可以处理用户上传的文件,并且接收用户的请求
对服务器里的文件进行操作。
所以—— 服务器端也需要有代码啦,这就是服务器脚本
其实之前讲的Web Server中的功能,也主要由服务器脚本程序来做
e.g. 同一个网站,用户登录前与登陆后,网页显示会有不同,例如会加载出用户头像啊,名称啊之类的绘制在页面上
这就是服务器脚本处理的结果
实际上,服务器脚本就是写了一个通用接口(CGI)程序,但是这种接口程序可以用各种各样的编程语言来实现,
PHP就是一种常见的用来写服务器脚本的语言。其他的还有ASP.NET,还有JSP
为了方便,在写服务器脚本的时候,还会一起连着写一个同语言的Web FrameWork 来处理细节,防御攻击,提供一些
跨站的接口之类的,Web FrameWork也有很多现成的可以直接拿来用,举例见后文“一些名词”。
下图是一个最基本的访问过程,实际上还会在这个流程中,各个部分中继续添加一些新的技术,具体见后文
前端:HTML+css+JS (很固定)
后端:服务器脚本+Web FrameWork+数据库 (每种都有n多选择,可以任意搭配)
服务器脚本 Web FramenWork 数据库 PythonQuora / Tornado / DjangoMy SQL / MangoDBRubyRails Node.jsExpress
① LAMP = Linux + Apache + MySQL + PHP (最常见最普通的搭配)
P还可能是Python或Perl。有时候L会改成W=Windows。也就是服务器上的操作系统是 Linux,Web Server 用 Apache,数据库用 MySQL,服务器脚本用 PHP,这些都是开源技术,网站起步时用起来的成本会比较低,所以是普通网站里非常常见的架构。 ② J2EE = UNIX + Apache + Tomcat (将JSP转换成Java)+ Oracle(数据库,可选) 专供Java,企业级,稳定 ③ASP.NET = Windows Server + SQL Server +IIS 全套都是微软开发的,省事儿,构件化,可以拖拽组件来创建web页面 ④MEAN = Angular(前端的框架,具体见“框架”) + Node.js + Express + MongoDB 是一种新型的,特点,除了数据库MongoDB以外,其他所有都是用js写的
是一种设计理念,分为
Model:封装数据+数据处理方法
View:HTML展现
Controller:响应请求,协调Model与View
在普通的服务器脚本中加入框架,使各部分代码分工更加明确清晰
e.g. Ruby + Rails
Python + Django
前端框架:Angular/Backbone
现在,对于一个前端功能、交互复杂的SPA,JavaScript代码很容易膨胀(超过10万行)。很自然地,像服务端从JSP向MVC框架转换的过程一样,前端开发也出现了大量的MVC框架,比较典型的包括BackboneJS, AngularJS, EmberJS, KnockoutJS。总的来说,MV*框架的提出是为了解决前端开发的复杂度,提供一套规则组织代码、分层(MVC),通过合理的组织和分层,前端的代码职责明确、清晰,便于开发与测试。 这种模式下,前后端的分工非常清晰,前后端的关键协作点是 Ajax 接口,规定好交互接口后,前后端工程师就可以根据约定,分头开工,开发环境中通过Mock等方式进行测试,同时在特定时间节点进行前后端集成测试。Node.js的出现,JavaScript开始拥有在服务端运行的能力
这对前端工程师来说可是一个好消息,精通JavaScript的他们也能够做服务端开发了!虽然现实中并不是这样美好(服务端开发涉及的不仅仅是语言层面),但一种新的开发模式也因此兴起:浏览器端处理展现层逻辑、而服务端Controller这一层以及相关的模板渲染、路由、数据接口以及Session/Cookie先关处理实际上交给了Nodejs来做。通过Nodejs, 意味着前后端很多代码可以复用 各大浏览器的竞争,使其引擎的性能不断提升,至今Google V8引擎的性能已经足以运行大型Javascript程序。在V8之上加以网络、文件系统等内置模块,形成了如今的Node.js。