1、DNS解析
计算机在整个互联网中的整个标识就是ip地址,
dns就是输入URL寻找ip地址
dns缓存--浏览器是否访问过
操作系统host解析(C:\Windows\System32\drivers\etc)
分级查询:本地dns服务器、根域名服务器、org/com顶级域名服务器、google.com域名服务器(二级域)
客户端—————本地dns服务器---www.baidu.com的ip是多少
本地dns服务器----根域名服务器---wxx.baidu.com的ip是多少
根域名服务器---本地dns服务器---在.com服务管理器中
2、tcp链接
传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
客户端-----服务器 SYN=1,请求建议链接,seq=n(序列号) 客户端具有发送信息的能力
服务端-----客户端 SYN=1(服务同意建立链接),收到序列号 ack=n+1,seq=x(服务端的序列号) 服务端接收、发送能力
客户端-----服务端 SYN=0(开始发送信息) ack=x+1(确认收到信息) seq=n+1 客户端具有接收信息能力
syn攻击是黑客常用的攻击手段, SYN攻击大量发送伪造源IP的第一次握手SYN包,服务器每接收到一个SYN包就会为这个连接信息分配核心内存并放入半连接队列(syn队列中),当攻击的SYN包超过半连接队列的最大值时,正常的客户发送SYN数据包请求连接就会被服务器丢弃。导致正常的连接请求无法成功。 严重者引起网络堵塞甚至系统瘫痪。
3、发送http请求
HTTP/1.1
HTTP1.0 GET POST HEAD
HTTP1.1 新增OPTIONS PUT PATCH DELETE TRACE CONNECT
1 GET <!--请求指定的页面信息,并返回实体主体。-->
2 HEAD <!--类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头-->
3 POST <!--向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。-->
4 PUT <!--从客户端向服务器传送的数据取代指定的文档的内容。-->
5 DELETE <!--请求服务器删除指定的页面。-->
6 CONNECT <!--HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。-->
7 OPTIONS <!--允许客户端查看服务器的性能。-->
8 TRACE <!--回显服务器收到的请求,主要用于测试或诊断。-->
9 PATCH <!--是对 PUT 方法的补充,用来对已知资源进行局部更新 。-->
4、服务端处理请求、返回http报文(以下七点)
一 接受客户端连接
二 接收请求报文
三 处理请求
四 对资源的映射及访问
进行目录解析
\1. 返回一个错误。
\2. 不返回目录,返回一个特殊的默认“索引文件” 如果请求的是一个目录的URL,而且这个目录中有一个名为index.html(或index.htm)的文件,服务器就会返回那个文件的内容。
\3. 扫描目录,返回一个包含目录内容的HTML页面
五 构建响应
从上到下依次为:
响应行:相应的协议、状态码、响应状态描述
响应头:
server:服务器信息
cache control:private 发起请求的服务器才可以缓存 public 返回内容所经过的任何路径都可以缓存 no-cache 每次发请求都要去验证,服务器同意才可进行缓存
响应体:内容
六 、发送响应 响应报文返回给客户端
常用:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,如:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
七 、记录日志
当事务结束时,Web服务器会在日志文件中添加一个条目,如:log文件夹,来描述已执行的事务。
5、浏览器解析渲染页面
HTML自上而下加载、下载|渲染同步进行
css并行请求文件 图片是异步请求
js挂起,先加载完,继续渲染HTML文档
1、HTML渲染出来后是DOM树 +2、加载CSS后出现CSSOM树 =3、合起来 render树渲染树
4、布局树
5、绘制
详细可参考DOM树和CSSOM树的构建和渲染_LuckySoong的博客-CSDN博客_cssom树
6、链接结束(四次挥手)
发完了、收到发完、收完了、知道收完了(一点一点发)
客户端---服务端:FIN=1、seq=m
服务端---客户端:ack=1,ackseq=m+1
所有数据传输完毕.......
客户端---服务端:fin=1,seq=n
服务端---客户端:ack=1,ackseq=n+1