用户操作
  1. 用户输入URL或点击URL链接比如www.baidu.com

域名解析
  1. 浏览器从浏览器的DNS缓存中查找www.baidu.com条目。

  2. 从本地主机缓存中查找DNS缓存条目。

  3. 从host中找。

  4. 访问本机设置的首选DNS服务器,通过UDP协议访问DNS服务器53端口。DNS必须返回目标URL的IP地址。首先查自身的DNS缓存。

  5. DNS服务器上会配置所有根域(cn,com,net等)的IP地址。

  6. DNS会请求根域com询问www.baidu.com的IP地址。根域com会告诉DNS我不知道www.baidu.com的IP。但是我知道baidu.com的DNS服务器的IP(域名注册商提供的)。你找他去。然后首选DNS服务器找到域名注册商的DNS服务器询问。一般在这里就会找到。因为我们购买的域名就是从他们这里注册的。

  7. 后续还会有四步尝试,意义不大了。

TCP三次握手
  1. 客户端:服务端老哥你支持TCP协议么?

  2. 服务端:没问题啊老铁!来吧我准备好了!

  3. 客户端:社会我服哥!等着我一会儿就来(ω)

客户端发起http请求
  1. http请求基于TCP协议

web服务器nginx接到http请求
  1. http请求默认端口80

  2. 所以我们的web服务器nginx通常监听80端口,Apache也一样监听80端口。

  3. web服务器是一个socket服务。

静态内容
  1. (html,jpeg,mp3,apk)nginx直接把资源通过http协议返回给浏览器

动态内容
  1. (php)nginx通过fastcgi模块转发给php的fastcgi的管理进程php-fpm。fpm拉起一个work进程处理动态请求。返回http响应给浏览器。

  2. cgi用来规定web服务器和外部程序如何传递信息。

  3. fastcgi是对cgi性能得。升级

  4. php-fpm是一个php的fastcgi

  5. php-fpm有一个master进程用来监听分配请求,然后会有多个work进程来处理任务。

浏览器处理服务器返回http响应信息