浏览器输入一个url到底经历了什么?


写在前面:以一个python后台的角度来看

1 dns ->  2  tcp握手  -> 3 HTTP请求 -> 4 反向代理nginx  -> 5 uwsgi/gunicorn -> 6 web app响应 -> tcp挥手

1: 其实进行dns查询之前会首先查看网址是不是在dns缓存里面, 如果不在dns缓存和host文件里的话,才会向本地服务器发起dns查询。如果本地查询没有查询到的话,则继续向上层dns服务器进行查询(递归) 最后获取到了url的 IP地址。

2 TCP三次握手和服务器建立连接。

3 发送应用层的HTTP请求。

4 Nginx(进行负载均衡, 反向代理)     ps: Nginx 把请求分发给不同的服务器。

5 请求发送给WSGI服务器。      ps:WSGI (Web Server Gateway Interface) 是一个接口,或者协议它规定了服务器怎么把请求信息告诉给应用,应用怎么把执行情况回传给服务器。

6 之后达到web框架层            进行层删改查之类的

7 进行tcp的四次挥手

tcp的三次握手

     

四次挥手

TCP 和 UDP的区别

   TCP: 面向连接、可靠的、基于字节流。    ps: 基于字节流 : TCP有缓冲区,应用层使用socket发送来的数据,可以存在缓冲区里面,然后从缓冲区里面读取数据。

   UDP: 无连接、 不可靠、面向报文。