重点: 需要理解从用户在浏览器点击一条链接开始,到我们的服务器返回结果给浏览器,中间发生了哪些过程,需要哪些技术.
概述
互联网的网络架构已从传统的C/S架构转变为了B/S架构.
B/S架构的优点:
- 客户端: 使用统一的浏览器(Browser),使得用户可以很便捷的使用互联网服务.
- 服务端: (Server)基于统一的HTTP,使得开发者可以采用相对规范的开发模式,且可以直接使用基于HTTP的服务器,无需单独开发.
B/S架构设计需要满足:
- 海量用户的访问请求
- 保持用户请求的快速响应
B/S架构图:
HTTP解析
HTTP概念
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
常见的HTTP请求头与响应头:
-
Host: 当客户端发送请求时,用来指定服务器的域名.
- Content-Length: HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为 HTTP body 的边界.
常见的HTTP状态码:
对调试发现错误很有帮助.
GET与POST
GET请求
- GET 的语义是请求获取指定的资源。
- GET请求的请求参数通常写在URL中。
- GET 方法是安全、幂等、可被缓存的。
POST请求
- POST 的语义是根据请求负荷(报文主体)对指定的资源做出处理。
- POST 请求的请求参数一般是写在报文 body 中,body 中的数据可以是任意格式的数据,而且浏览器不会对 body 大小做限制。
- POST 不安全,不幂等,(大部分实现)不可缓存。
HTTP缓存机制
强制缓存
强制缓存是利用下面这两个 HTTP 响应头部字段实现的,它们都用来表示资源在客户端缓存的有效期:
- Cache-Control: 记录相对时间
- Expires: 记录绝对时间
- 如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话,Cache-Control 的优先级高于 Expires 。
协商缓存
协商缓存就是与服务端协商之后,通过协商结果来判断是否使用本地缓存, 协商缓存可以基于两种头部来实现。
- Last-Modified: 请求头部中的
If-Modified-Since
字段与响应头部中的Last-Modified
字段 - ETag: 请求头部中的
If-None-Match
字段与响应头部中的ETag
字段
两种缓存的工作流程
协商缓存的两个字段都需要配合强制缓存中 Cache-Control 字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。
DNS域名解析
域名的层级关系
DNS 中的域名都是用.来分隔的,比如 www.baidu.com.
,这里的句点代表了不同层次之间的界限。
在域名中,越靠右的位置表示其层级越高。
所以域名的层级关系类似一个树状结构:
- 根 DNS 服务器(.)
- 顶级域 DNS 服务器(.com)
- 权威 DNS 服务器(server.com)