http请求流程

客户端/浏览器/linux命令——访问指定网站域名——进行域名解析——访问到web服务器——web服务器返回资料给用户。

tcp/ip协议

protocol协议

  • icmp 网络控制报文协议,tcp/ip的子协议。用于在服务器之间,网络设备之间进行消息传递。
  • dns 建立在UDP和TCP协议之上,默认使用53端口通信,用来进行域名解析。
  • FTP file transfer protocol,文件传输协议。主要是两部分,client和server
  • nfs rpc协议+nfs协议,运行于网络共享文件系统
  • snmp 管理网络节点,应用层协议。预先告警网络设备的问题
  • http 简单的请求响应,运行在TCP/IP协议之上,指定了客户端能够给服务器发送什么形式的请求

ip协议

ip协议的作用是把数据包发送到指定的目的地,这里最重要的是IP地址和MAC地址。

  • IP地址 是指定了一个服务器在网络中的一个地址信息
  • MAC地址 是指服务器网卡硬件设备的设备号

ip和ARP的关系

ARP协议就是把IP地址和MAC地址进行解析的一个协议
数据包的传递过程,就好比是快递中转站的过程

三次握手

image.png

URL和URI

URI(Uniform Resource Identifer)中文名字是统一资源标识符
用来标识某一个互联网资源的资产,在世界互联网范围内,标识定位某一个唯一的资源信息。

  1. www.baidu.com/aaa.jpg


URL主要用于各种www服务器,url可以用一个统一的格式来描述各种静态资源信息,包括图片,视频,txt,htm文件等等
URL组成解释

  • http:/∥协议
  • pythonav.cn,主机名,网站的域名,通过dns的解析成服务器的ip地址
  • 端口号80是http协议的默认端口443端口加密的http协议也叫做https协议
  • 文件资源的具体地址目录

    静态网页

    在网页设计中,纯HTML的网页文件(HTML文件中,包含的只有图片,视频,js代码,css代码,gif等等)就会被称为是一个静态网页(静态网页没有和数据库打交道,仅仅是从服务器磁盘上,读取数据,返回给用户查看)
    1. 静态网页的特点
    2. 开发人员写好了什么样,用户看到的就是固定的什么样,一旦静态网页编写完成,就不会有任何的改变了
    3. 静态网页主要用于更新较少的展示型的网站功能

静态网页资源,对应的文件后缀一般如下:

  • 纯文本文件,.htm.html .xml .js.css
  • 图片类型文件,.jpg .png .gif .bmp .ppt
  • 视频类型文件,.mp4.avi.flv

静态网页特性

  • 静态网页一般都有固定的URL地址,url地址中不包含任何的?&等等特殊符号
  • 静态网页,一般发布到服务器,网页文件内容是单独的一个文件,保存在服务器上。
  • 静态网页内容一般固定不变,非常容易被搜索引擎收录(.html.htm)
  • 静态网页没有数据库支撑,在网站制作上,维护较难(缺点)
  • 静态网页交互性很吵,缺少程序的动态功能加载(缺点)
  • 客户端在解析网址的时候,由于静态网页不需要和数据库交互,因此服务器能够承载更高的并发数,请求到来的时候,直接去磁盘上读取即可。

动态网页

包含了静态网页的内容,以及能够和数据库交互,有后台程序,可以和用户交互的网页

  1. 动态网页和静态网页一般都是相对而言
  2. 动态网页常见特点是后缀,一般是.asp .aspx .php.js .cgi 这样的后缀,一般都是动态请求并且动态请求的ur1,常见会有?&=等等特殊符号

动态网页的特性

  • 动态网页主要以数据库为支撑,能够大大减少网页内容的维护工作
  • 动态网页能够实现比静态网页更多的事情,登录,注册,投票,点赞,用户管理,网站后台程序等等
  • 搜索引擎一般不会抓取网页url携带?等特殊符号的站点,因此企业一般都做伪静态,让一个动态网页,模拟成以.html为后缀的静态网页

网站压力

并发模型

进程是linux的资源单位
线程是由进程发起的工作单位

单进程模式

单进程和单线程是一个概念,因为一个进程单位必须有一个线程单位在工作。
当大量请求进入服务器的时候,单线程(银行只有一个处理业务的窗口)情况下一个一个去处理请求,请求很容易积压,得不到响应。这是一种没有并发概念的模式

多进程

银行的柜台,窗口(进程单位)
柜台后干活的工作人员(线程资源)
服务器的多进程工作模式,也就是有多个进程可以处理客户端的请求。
主进程(请求分配)
子进程1(干活的进程)
子进程2(干活的进程)
子进程3(干活的进程)
子进程4(干活的进程)
子进程5(干活的进程)

复用的IO模型

一个进程响应个请求,但是不是单纯的一个单进程,而是背后生成了多个线程去工作

HTTP请求与响应

  1. 客户端和服务器建立连接,客户端发出请求,服务器进行三次握手身份确认
  2. 服务器接收到请求,linux内核根据(客户端的请求)socket进程通信管道把发给HTTP应用程序去解析(Apache,Nginx)
  3. HTTP服务器开始处理请求,对用户的请求报文进行解析,明确客户端需要的资源和请求方式等等
  4. HTTP在存储系统上,请求资源,内核去本地文件系统上读取数据
  5. HTTP服务构造响应体,应用程序创建响应报文
  6. liux内核发出HTTP服务器构造的响应报文,发送客户端
  7. HTTP服务器会进行事务记录,记录这个流程的日志

事务

在计算机领域中
事务是指程序中一系列严密的逻辑性操作,并且必须保证素有的操作都能够成功的完成,如果出错,那么得保证每个操作中的更改动作,都会被撤销。
简单理解:
多件事情当做一件事情来处理,好比大家都在同一条船,要么一起前进,存活,要么一个隔屁。
比如转账的事务:

  1. A用户从自己的账号中,转出了1000元给B的账户,那么当这个A用户从转账开始,到B用户收款成功后,这一些列的过程,称
  2. 之为是一个事务。
  3. 转账,要么一起成功(A用户扣钱,B用户加钱,过程正确了),要么事务一起失败(A用户钱没转出去,回归原本的状态,B
  4. 户也没有增加金额,还是原本的状态),原子性操作。

事务的一些特性:

  • 原子性:执行命令,要么全部成功,要么全部失败,只要有一个环节出错,那么其他指令都要进行数据回滚,回滚到执行命令之前的操作。
  • 一致性:事务的执行使得数据从一个状态,进入另一个状态,但是对于的数据完整性,还是保持稳定。
  • 隔离性:指的是,比如当多个用户并发访问数据库的时候,共同操作一张数据表,数据库它会为每一个用户开启事务,不能被其他的事务所干扰,多个并发的事务操作,要进行隔离。
  • 持久性:当事务正确完成后,对数据的修改是永久性的。

    HTTP事务原理

    image.png

在浏览器中输入网站直到最终看到页面的整个过程

1.dns解析

  1. 1.www.baidu.com 浏览器会解析域名对应的IP地址
  2. 2.浏览器去客户端本地机器寻找DNS缓存,是否存在即系记录
  3. 3.浏览器继续读取客户端本地的hosts文件,是否写死了,该域名对应的ip地址
  4. 4,浏览器会再向本地配置的DNS服务器地址,进行解析请求发送,公网的DNS服务器对该域名解析,解析到IP地址之后,浏览器会访问该IP地址

2.客户端此时和服务器端建立TCP小P三次握手

  1. 1.客户端解析到服务器的ip之后,客户端的user-agent是正常的浏览器,谷歌浏览器,等等浏览器,浏览器会以(1024端口<端口<65535)向服务器的80端口进行请求发送,进行三次握手
  2. 2.该客户端请求,经过成TP/1P的四层封包周,请求组中进入到服务器的应用程序,完成解包的过程,最终和客户端建立
  3. TCP连接
  4. 3.此时TCP连接上了之后,开始三次握手
  5. 第一次握手;客户端发送syn包(syn=x)发送给服务器,客户端进入syn send状态,等待服务器响应
  6. 第二次握手:服务器收到客户端的syn包,并且要确认客户端的sYN(ack=x+l),同时服务器再发出一个sYN包(syn=k),服务器一共发送的是syn+ack数据包,服务器进入syn_recv状态
  7. 第三次握手:客户端收到服务器发来的syn+ack包,客户端再向服务器发送ACK(k+1),此时服务端和客户端已经正确建立了连接,完成三次握手
  8. 客户端和服务器的断开,也需要进行一个四次挥手的过程,也就是服务器再次和客户端进行信号数据包发送,确认对方都要进
  9. TCP断开
  10. 客户端发送SYN x 客户端进入等待接收状态
  11. 服务端接收到SYN 确认客户端的包SYN ack=x+1 再向客户端发送一个SYN SYN=K 发送SYN+ACK 此时服务端进入等待接收状态
  12. 客户端接收到两个包 并向服务端发送 ACK k+1 此时确认连接

3.数据传输,发起http请求

查看用户发出的请求:

  1. tail -l /opt/ngx112/logs/access.log #access.log是nginx的日志文件

常见的http请求方法
get 向服务器获取数据,资源
post 向服务器提交数据,比如登录,注册
head 获取URL的响应头信息,不要响应体信息(只要脑袋,不要身体数据)put将请求主体发送给服务器
delete 除服务器指定的一整资源
trace 追求请求到达服务器的一些列变动

http状态码
HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码。
HTTP请求态如何,用状态码表示结果
状态码类别

  1. 1xx信息状态码,服务器收到请求,需要客户端继续操作
  2. 表示临时响应并需要请求者继续执行操作的状态代码。
  3. 2xx操作成功
  4. 表示成功处理了请求的状态代码。代码说明
  5. http状态码200 (成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页,
  6. http状态码201 (已创建)请求成功并且服务器创建了新的资源」
  7. http状态码202 (已接受)服务器已接受请求,但尚未处理
  8. http状态码203 (非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。
  9. http状态码204 (无内容)服务器成功处理了请求,但没有返回任何内容。
  10. http状态码205 (重置内容)服务器成功处理了请求,但没有返回任何内容。
  11. http状态码206 (部分内容)服务器成功处理了部分GET请求。
  12. 3xx重定向状态码。需要进一步的操作
  13. 表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
  14. 代码说明
  15. http状态码300 (多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作
  16. http状态码301 (永久移动)请求的网页已永久移动到新位置。
  17. http状态码302 (临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  18. http状态码303 (查看其他位置)请求者应当对不同的位置使用单独的GT请求来检索响应时,服务器返回此代码
  19. http状态码304 (未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
  20. http状态码305 (使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理
  21. http状态码307 (临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求,
  22. 4xx客户端错误,请求语法错误等
  23. httD状态码400 (错误请求)服务器不理解请求的语
  24. http状态码401 (未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应
  25. http状态码403 (禁止)服务器拒绝请求
  26. http状态码404 (未找到)服务器找不到请求的网页。http状态码405(方法禁用)禁用请求中指定的方法。
  27. http状态码406 (不接受)无法使用请求的内容特性响应请求的网页。http状态码407(需要代理授权)此状态代码与401(未授权)类似,但指定请求者应当授权使用代理。
  28. http状态码408 (请求超时)服务器等候请求时发生超时
  29. http状态码409 (冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息.
  30. http状态码410 (已别除)如果请求的资源已永久删除,服务器就会返回此响应.ttp状态码411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
  31. http状态码412 (未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件,
  32. http状态码413 (请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
  33. http状态码414 (请求的URI过长)请求的URI(通常为网址)过长,服务器无法处理
  34. http状态码415 (不支持的媒体类型)请求的格式不受请求页面的支持http状态码416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码,
  35. http状态码417 (未满足期望值)服务器未满足”期望”请求标头字段的要求。
  36. 5xx服务端错误,服务器处理过程中出错了
  37. http状态码500 (服务器内部错误)服务器遇到错误,无法完成请求
  38. http状态码501 (尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
  39. http状态码502 (错误网关)服务器作为网关或代理,从上游服务器收到无效响应
  40. http状态码503 (服务不可用)服务器目前无法使用(由于超载或停机雄护)。通常,这只是暂时状态
  41. http状态码504 (网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  42. http状态码505 (HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本

浏览器渲染流程

  1. dns解析
  2. 发起tcp三次握手
  3. 建立tcp连接后发起http请求
  4. 服务器响应http请求,返回html资源
  5. 浏览器解析htmL代码,请求htmL中的其他静态资源浏览器渲染页面,呈现画面