浏览器和服务器基础(一)

http和https

  1. http明文传输,数据都是未加密的,安全性较差。https是构建在SSL/TLS基础上的http协议,可以进行加密传输,身份认证等。
  2. 连接方式不一样,端口也不一样。http是80,https是443。
  3. https是需要ca证书的,因此也需要花费一些费用。

url请求到页面展示

主要可以分为三个阶段:

http请求阶段

  1. 浏览器解析url
  2. DNS服务器发送域名解析请求
    • 浏览器会先检查自己缓存中是否有被解析过的这个域名对应的ip地址。有的话,就结束,如果没有,
    • 会继续检查操作系统中有没有对应的已解析的结果。
    • 如果还没有,就会请求本地的域名服务器(LDNS)解析这个域名。
    • 如果还没有,则是去root server => 最终到这个网站注册的域名服务器寻找。
    • 找到之后,就把目标ip返给LDNS,LDNS缓存之后,把这个ip返回给用户,缓存到本地系统中。最终结束解析。
  3. 和域名解析对应的ip地址建立tcp/ip连接
    • cookie 和 session : cookie存放在客户端浏览器,session存放在服务器上。
  4. 发送http请求报文,请求获取页面。
    • Host | referer | user-agent | accept | Connection | Accept-Language | …

http响应阶段

  1. 服务器响应报文
    • Cache-Control | Content-Encoding | date | etag | expries | last-modified | …
  2. 客户端收到服务器响应的页面

浏览器渲染阶段

  1. 浏览器在内存分配一块栈内存,开始执行代码
  2. 遇到js、css、图片等静态资源的时候,会创建一个新的进程来加载,主进程继续执行代码 。但是当遇到的是外部的js时候,html解析会停下来,等js执行完在继续解析html。防止js修改已经完成的dom树。
  3. 由上到下解析html,生成DOM树
  4. 样式资源加载完毕后,生成cssOM(css对象模型)树
  5. cssOM树和DOM树结合,构建出一个render tree(渲染树)。
  6. 渲染树构建好之后,浏览器会计算元素的大小以及绝对位置。
  7. 布局计算完成之后,浏览器会在页面渲染元素,经过渲染引擎处理之后,整个页码就显示出来了。

TCP的三次握手和四次挥手

TCP(传输控制协议)。

URG 紧急指针是否有效。为1,表示某一位需要被优先处理
ACK 确认号是否有效,一般置为1。
PSH 提示接收端应用程序立即从TCP缓冲区把数据读走。
RST 对方要求重新建立连接,复位。
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
FIN 希望断开连接

tcp连接

三次握手

  1. 第一次握手,建立连接,客户端发送syn(同步序列编号)(syn = x)包到服务器,并进入SYN_SENT状态,等到服务器确认。
  2. 第二次握手,服务器收到syn包,必须确认客户端的syn(ack = x + 1),同时也发送一个自己的syn包,即syn+ack包,此时服务器进入 SYN_RECV状态。
  3. 第三次握手,客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack = y + 1),发送完毕后,客户端和服务器就进入连接成功状态(ESTABLISHED)状态。完成三次握手。

四次挥手

  1. 第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN(希望断开连接)=1,其序列号为seq=u,客户端进入FIN_WAIT_1状态。
  2. 第二次挥手: 服务器收到连接释放报文,发出确认报文,ACK(确认号是否有效,一般置为1)=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文。
  3. 第三次挥手: 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  4. 第四次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

四次挥手

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享