- 计算机网络一共有5层:应用层、传输层、网络层、数据链路层、物理层
- 应用层:程序直接面对的,数据中包含DNS协议(查域名)、HTTP协议(请求和应答)
- 传输层:用TCP/UDP调度数据的传输(可靠传输、流量控制、拥塞避免)
- 网络层:向导
- 数据链路层:传输方法(封装成帧、透明传输、差错检测)
- 物理层:带宽、速率、电缆材质
- URL输入→DNS解析→TCP连接→发送HTTP请求→服务器处理请求→服务器响应请求→浏览器解析渲染界面→连接结束
- URL输入:
- DNS解析:网址到IP地址的转换,查找顺序:浏览器缓存→操作系统缓存→本地host文件→路由器缓存→互联网服务提供商DNS缓存→顶级DNS服务器/根DNS服务器
- 建立TCP连接:浏览器以一个随机端口向服务器的WEB程序80端口发起TCP的连接请求(三次握手防止服务器端一直等待)
- 发送HTTP请求:客户端向服务器发起HTTP请求的请求信息包含:请求方法URI 协议/版本、请求头、正文
- 服务器处理请求:后端从特定端口收到HTTP报文,对HTTP协议进行解析,进一步封装成HTTP Request对象
- 服务器响应请求:服务器返回一个HTTP响应,包含:协议/版本 状态码 状态描述、响应头、正文
- 浏览器解析渲染界面:构建dom树→构建render树→布局render树→绘制render树
- 连接结束:标签页关闭的时候,四次握手关闭连接
|
应用层 |
乘客 |
|
传输层 |
指挥调度 |
|
网络层 |
向导 |
|
数据链路层 |
交通工具 |
|
物理层 |
道路 |
从输入URL到页面展示发生了什么
|
protocol |
://hostname |
:port |
/path |
:parameters |
?query |
#fragment |
|
协议 |
主机名 |
端口号 |
路径 |
参数 |
查询 |
信息片段 |
反向代理
- 什么是反向代理?
- 反向代理的好处
- 当网站访问量非常大,网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
- 其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
客户端本来可以直接通过HTTP协议访问某网站应用服务器,但是网站管理员在中间设置一个nginx,这样客户端先请求到nginx,nginx再请求应用服务器然后将结果返回给客户端,实现反向代理。
301 服务器永久重定向
- 301什么意思?
Redirect a page to another page, 301 is HTTP status code of redirected page.
- 为什么服务器一定要重定向而不是直接发送用户想看的网页内容呢?
其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像http://www.yy.com/和http://yy.com/,搜索引擎会认为它们是两个网站,结果造成每个搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。还有就是用不同的地址会造成缓存友好性变差,当一个页面有好几个名字时,它可能会在缓存里出现好几次。
- 301和302的区别
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 SEO302好于301
- 重定向原因
- 网站调整(如改变网页目录结构);
- 网页被移到一个新地址;
- 网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
- 什么时候进行301或者302跳转呢?
当一个网站或者网页24—48小时内临时移动到一个新的位置,这时候就要进行302跳转,而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的。清晰明确而言:使用301跳转的大概场景如下:
- 域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
- 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
- 空间服务器不稳定,换空间的时候。
HTTP状态码
- 1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。
- 100 Continue
- 101 Switching Protocols
- 2xx:成功状态码,表示服务器已成功接收到请求并进行处理。
- 200 OK 表示客户端请求成功
- 204 No Content 成功,但不返回任何实体的主体部分
- 206 Partial Content 成功执行了一个范围(Range)请求
- 3xx: 重定向状态码,表示服务器要求客户端重定向。
- 301 Moved Permanently 永久性重定向,响应报文的Location首部应该有该资源的新URL
- 302 Found 临时性重定向,响应报文的Location首部给出的URL用来临时定位资源
- 303 See Other 请求的资源存在着另一个URI,客户端应使用GET方法定向获取请求的资源
- 304 Not Modified 服务器内容没有更新,可以直接读取浏览器缓存
- 307 Temporary Redirect 临时重定向。与302 Found含义一样。302禁止POST变换为GET,但实际使用时并不一定,307则更多浏览器可能会遵循这一标准,但也依赖于浏览器具体实现
- 4xx:客户端错误状态码,表示客户端的请求有非法内容。
- 400 Bad Request 表示客户端请求有语法错误,不能被服务器所理解
- 401 Unauthonzed 表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用
- 403 Forbidden 表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因
- 404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。
- 500 Internel Server Error 表示服务器发生不可预期的错误,导致无法完成客户端的请求
- 503 Service Unavailable 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常