1. URL/URN/URI
-URL(Uniform Resource Locator):
统一资源定位符,根据这个地址能找到对应的资源
-URL(Uniform Resource Name):
统一资源名称,一般指国际上通用的(标准的)一些名字(例如:国际统一发版的编号)
-URL(Uniform Resource Identifier):
统一资源标识符,URL和URN是URI的子集
2.一个完整的URL所包含的内容
https://www.nowcoder.com:80/discuss/resume-review/index.html?form=wx&lx=1#zhenyu
-
协议(http://): 传输协议,就是能够把客户端和服务端通信的信息进行传输的工具(类似于快递小哥);
- http: 超文本传输协议(除了传递文本,还可以传递媒体资源文件(或者文件流)以及XML格式数据)
- https: 更加安全的http,一般涉及支付的网站都要采用https协议(s: ssl加密传输)
- ftp:文件传输协议(一般应用于把本地资源上传到服务端)
-
域名(www.nowcoder.com): 一个让用户方便记忆的名字(不通过域名,直接通过服务器的外网IP也能访问到服务器,但是外网IP很难被记住)
- 顶级域名 eg: qq.com
- 一级域名 eg: www.qq.com
- 二级域名 eg: sports.qq.com
- 三级域名 eg: kbs.sports.qq.com
- .com 国际域名
- .cn 中文域名
- .com.cn
- .edu 教育
- .gov 政府
- .io 博客
- .org 官方
- .net 系统累
-
端口号(:80): 端口号的取值范围:0~65535,用端口号来区分同一台服务器上的不同项目
- http默认端口号:80
- https默认端口号:443
- ftp默认端口号:21
- 如果项目采用的就是默认端口号,我们在书写地址的时候,不用加端口号,浏览器在发送请求的时候会帮我们默认加上
-
请求资源路径名称(/discuss/resume-review/index.html)
- 默认的路径或者名称(xxx.com/stu/ 不指定资源名,服务器会找到默认资源,一般默认资源名是default.html、index.html…当然这些可以在服务器端自己配置)
- 注意伪URL地址处理(URL重写技术是为了增加seo搜索引擎优化的,动态的网址一般不能被搜索引擎收录,所以我们要把动态网址静态化,此时需要的是重写URL,后台重写)
-
问号传参信息(?form=wx&lx=1)
- 客户端想把信息传递给服务器,有很多种方式
- URL地址问号传参
- 请求报文传输(请求头和请求主体)
- 也可以不同页面之间的信息交互,例如:从列表到详情
- 客户端想把信息传递给服务器,有很多种方式
-
HASH值(#zhenyu)
- 也能充当信息传输的方式
- 锚点定位
- 基于HASH实现路由管控(不同的HASH值,展示不同的组件和模块信息)
3.请求地址中出现非有效的UNICODE编码内容,现代版浏览器会默认的进行编码
- 基于encodeURI编码, 基于decodeURI解码,我们一般用encodeURI编码的是整个URL,这样整个URL中的特殊字符都会自动编译
- encodeURIComponent/decodeURIComponent它相对于encodeURI来说,不用于给整个URL编码,而是给URL部分信息进行编码(一般都是问号传参的 值编码)
客户端和服务端进行信息传递的时候,如果需要把请求的地址信息进行编码,我们给予以上两种方式处理,服务器端也存在这些方法,这样就可以统一编码解码了
- 客户端还存在一种方式,针对于中文的编码方式escape/unescape,这种方式一般应用于客户端页面之间自己的处理,例如;从列表跳转到详情,我们可以把传递的中文信息基于这个编码,详情页获取编码后信息再解码,再比如我们在客户端中的cookie信息,如果信息是中文,我们也基于这种办法编码…
4.DNS服务器域名解析
DNS服务器:域名解析服务器,在服务器上存储着 域名<=>服务器外网IP的相关记录
而我们发送请求时候所谓的DNS解析,其实就是根据域名,在DNS服务器上查找对应服务器的外网IP
** DNS优化 **
- DNS缓存(一般浏览器会在第一次解析后,默认建立缓存,时间很短,只有一分钟左右)
- 减少DNS解析次数(一个网站中我们需要发送请求的域名和服务器尽可能减少)
- DNS预获取(dns-prefetch):在页面加载开始的时候,就把当前页面中需要访问其他域名(服务器)的信息进行提前DNS解析,以后加载到具体内容部分就不用解析了
5.HTTP报文
- 请求报文:所有经过传输协议,客户端传递给服务器的内容,都被称为请求报文
- 起始行
- 请求头(首部)
- 请求主体
- 响应报文:所有经过传输协议,服务器传递给客户端的内容,都被称为响应报文
- HTTP状态吗
- 响应头
- 响应主体
- HTTP报文:请求报文 + 响应报文
6.构建web服务器
- 网站前后端都已经开发好了
- 购买服务器(阿里云ECS<=>独立主机)【外网IP】
- 服务器部署
- 购买域名,并且进行DNS域名解析
- 到工信部备案(基于第三方平台可代理备案)
7. http状态码
》1~5开头,三位数字
- 200 OK:成功
- 201 Created: 一般应用于告诉服务器创建一个新文件,最后服务器创建成功后返回的状态吗
- 204 No Content: 对于某些请求(例如:PUT或者 DETETE),服务器不想处理,可以返回空的内容,并且用204状态码告知
- 301 Moved Permanently: 永久重定向(永久转移)
- 302 Move Temporarily: 临时转移,很早以前基本用302来做,但是现在主要用307来处理这个事情,307的意思就是临时重定向Temporarily Redirect => 主要用于:服务器的负载均衡等
- 304 Not Modified:设置HTTP的协商缓存
- 400 Bad Request: 传递给服务器的参数错误
- 401 Unauthorized: 无权限访问
- 404 Not Found: 请求地址错误
- 500 Internal Server Error: 未知服务器错误
- 503 Service Unavailable: 服务器超负荷
8. 浏览器渲染
最新的Chrome浏览器包括:1个浏览器主进程,一个GPU进程,一个网络进程,多个渲染进程和多个插件进程
浏览器进程:主要负责界面显示、用户交互、子进程管理、同时提供存储等功能
渲染进程:核心任务将HTML、CSS和JavaScript转化为用户可以交互的网页,排版引擎Blink和JavaScript引擎V8都是运行在该线程。默认情况下,Chrome浏览器为每个标签页创建一个渲染进程,但从一个页面打开另一个页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染流程。
GPU进程:GPU的初衷是为了使用3D CSS效果,随后网页、Chrome的UI界面都采用了GPU来绘制,使得GPU成为浏览器普遍的需求,Chrome在其多进程架构上也引入了GPU进程。
网络进程:主要负责页面的网络资源加载。
插件进程:主要负责插件的运行,因插件容易崩溃,所以需要通过插件进程来隔离,保证插件进程崩溃不会对浏览器和页面造成影响。
完整的渲染流程大致总结如下:
-
渲染引擎将HTML内容转换为DOM树结构
-
渲染引擎将CSS样式表转化为浏览器理解的styleSheets,计算DOM节点样式
-
创建布局树,计算元素的布局信息
-
对布局树进行分层,生成分层树
-
对每个图层生成绘制列表,并将其提交到合成线程
-
合成线程将图层分成图块,并在栅格化线程池中将图块转换成位图
-
合成线程发送绘制图块命令DrawQuad给浏览器进程
-
浏览器进程根据DrawQuad生成页面,显示在显示器上
====》时间紧,先到这,待补充