【88.4】HTTP权威指南

什么是WEB
WEB 最核心的部分是HTTP。
HTTP 实际上是负责数据请求和相应,真正的数据经由其他的网络层处理。
TCP/IP 网络协议成熟之后,世界上任何设备只要支持TCP/IP 就会成为互联网上的一个终端。

1.3 网络模型
【88.4】HTTP权威指南_第1张图片

HTTP 是应用层协议,应用层协议是TCP/IP的一部分。
图中©的五层协议也经常被描述成四层协议,应用层、传输层和网络层不变,把“数据链路层”和“物理层”统一称之为“主机到网络层”。
Socket位于TCP/IP协议的传输控制层。

这个协议的流程可以比喻成两个人打电话。
打电话我们怎么打:
首先要先知道对方的电话号码
拨打电话听到“嘟嘟”的声音说明打出去了,
通过电话号选择一条最优的传输路径
最终人的语言通过网卡、电话线传输给了对方。

两台电脑想打电话类似的:
1.首先要先知道对方的 IP地址
2. 确保连接上对方的TCP
3. 通过IP 选择一条最优的传输路径
4.最终通过终端、网络设备传输给对方。

网络协议
TCP 是一种面向连接的、基于字节流的传输层通信协议。在互联网协议簇中,TCP 层位于IP层之上、应用层之下的中间层。
而UDP是基于非连接的。
【88.4】HTTP权威指南_第2张图片

TCP通道在建立以前,需要三次握手:
    a. 客户端发送一个包含SYN标志的TCP报文, 同步报文指明客户端所需要的端口号和TCP连接的初始序列号,是一种链接请求数据,俗称SYN包。(怎么记忆呢 孙一宁包),请求询问能否建立连接
    b. 服务器收到SYN报文之后,返回一个SYN+ ACK报文,表示客户端请求被接受,TCP初始序列号加1,也就是返回一个(艾克包)
    c.客户端也返回一个确认报文ACK给服务器,同样TCP序列号加1
    d. 如果服务器端没有收到客户端的确认报文ACK,则处于等待状态,将该客户IP加入等待队列,然后轮询发送SYN+ACK报文

三次握手是为了解决网络信道不可靠的问题。
一包数据会拆解成多包发送,这些数据
为了解决丢包问题和乱序问题,tcp连接为每个连接建立了一个发送缓冲区,建立连接的第一个字节的序列号为0.后面每个序列的字节号会加一。发送数据时,从发送缓冲区取出一部分,在其tcp协议头中会附带序列号和长度。接收端接收到报文后,需要回复一个ack包,ack 包 =序列号+长度=下一个包需要发送的起始序列号。这样一发一答的方式能够使发送端数据已经被对方收到。发送端也可以一次发送连续多包数据。接收端只需要回复一次ack就可以了。这样发送端可以切割发送,接收端根据序列号和长度重组。假如丢失了某一段序列号的数据,则接收端可以要求客户端重新发送,tcp不分客户端和服务端,tcp连接是全双工的,
【88.4】HTTP权威指南_第3张图片

假设客户端主动发起连接关闭请求,客户端需要向服务端发送FIN包。表示要关闭连接,自己使用终止等待状态。服务端向客户端发送ack包,告诉客户端,自己在关闭等待状态。

【88.4】HTTP权威指南_第4张图片
【88.4】HTTP权威指南_第5张图片

502 解决方案:可能跟php-fpm的配置有关,调查数据进程是否有大量的locked进程,锁机制是否出问题。
504 网关超时 可能跟服务器的nigx 的配置有关。

405 错误在实际操作过程中,比如在宝塔安装过phpadmin 然后之后,又切换了php版本之后可能就会出现这个问题。

一些状态码

参考书籍:
[1] HTTP 权威指南
[2]深入浅出HTTPS:从原理到实战 蓝色文本来自这本书
[3] 代码精进之路 从码农到工匠 微信读书591 页
[4] 一次完整的HTTP请求过程是怎么样的呢?【图文详解】https://blog.csdn.net/dianxin113/article/details/104351670.

你可能感兴趣的:(http,golang,微信小程序,架构)