当前位置: 首页 > 后端技术 > PHP

PHPer也来聊聊HTTP

时间:2023-03-29 14:47:32 PHP

前言三月份即将结束,这个月的目标是把http的基础知识做一个落地。直入正题,我们沿着以下思路对http的基础知识做一个总结:五层网络协议的概念HTTPMethodHTTPStatusHTTPHeaderCookie/SessionHTTPsWebsocketHTTP2概念什么是http?HypertextTransferProtocol,超文本传输??(transfer)协议,是客户端和服务器端开发的传输文本的协议。说到http协议,就不得不说到WWW。http是构建WWW的三大技术之一。具体三种技术如下:WWW:万维网、万维网HTML:超文本标记语言、超文本标记语言HTTP:超文本传输??协议、超文本传输??(传输)协议URL:UniformResourceLocator、UniformResourceLocatorURI:UniformResourceIdentitier,统一资源标识符,URL是URI的子集五层网络协议应用层(http/https/websocket/ftp...)=>定义:文本传输协议|传输层(tcp/udp)=>定义:端口|网络层(ip) =>定义:IP|LinkLayer(mac&packet)=>定义:数据包,MAC地址|physicallayer(opticalcable/cable/switch/routing/terminal...)=>definition:physicalTCP/IP:说到网络协议,自然要提到TCP/IP协议,它有两种类型解释如下.解释1:分别代表tcp协议和ip协议。解释2:如果按照五层网络架构,TCP/IP代表除应用层以外的所有协议簇的统称。TCP/IPconnect:TCP/IP的三次握手:standardPacketwithsyn-------------->Packetmarkedwithsyn/ackclient<-------------serverPacketmarkedwithack------------->TCP/IPfinish:TCP/IP四次握手:fin<--------------ackclient(orserver)------------->server(orclient)fin-------------->ack<------------Keep-Alive:HTTP协议开始时,每次连接后都会断开TCP连接结束,然后HEADER连接字段定义了Keep-Alive(HTTP1.1默认是 持久连接),意思是如果双方都没有主动断开连接,TCP连接就不会断开,减少了每次TCP连接的消耗建立HTTP连接HTTPMethodget:获取资源,url传参,大小2KBpost:传输资源,httpbody,大小默认8M,输入变量1000put:传输资源,httpbody,资源更新delete:删除资源patch:传输资源,httpbody,现有资源partialupdatehead:Gethttpheaderoptions:getsupportedmethodtrace:track,返回请求环回信息connect:建立隧道通信HTTPStatus200:ok301:Permanentredirection302:Temporaryredirection303:Temporaryredirection,requestresourcewithgetrequest304:notmodified,returnscache,has与重定向无关307:临时重定向,严格来说不是从post到get400:参数错误401:http认证失败403:禁止,未授权404:未找到,资源不存在500:互联网服务器错误,代码错误502:网关错误,fastcgiwebserver返回的内容不理解503:serviceunavailable,serviceunavailable504:gatewaytimeout,fastcgiresponsetimeout接口选择httpstatus作为响应码是不错的选择HTTPHeaderFieldscommoncommonheaderPartCache-Control:no-cache:不缓存过期缓存no-store:不缓存Pragma:no-cache,不使用缓存,http1.1之前的history字段Connection:ControlisnotforwardedtotheproxyHeaderdoesnotfieldKeep-Alive/Close:持久连接Date:创建http消息的日期CommonrequestheadersAccept:媒体类型和优先级可以处理Host:目标主机的域名Referer:发起请求的原始资源URIUser-Agent:创建请求的用户代理的名称Cookie:cookie信息公共响应头Location:重定向地址Server:请求的服务web服务器信息Set-Cookie:要设置的cookie信息NAME:要设置的键值对expires:cookie过期时间path:指定发送cookie的目录domain:指定发发送cookies的域名Secure:指定后,只有https会发送cookieHostOnly:指定后,javascript无法读取cookieCookie/SessionCookie:工作机制为用户识别和状态管理。服务器为了管理用户的状态,会通过客户端将一些临时的数据写入到设备中的Set-Cookie中。当用户访问服务时,服务可以通过通信获取之前存储的cookieSession: 由于http是无状态的,请求之间无法维护上下文,所以出现了session作为会话控制,服务端存储用户的会话信息。HTTPs概念:在http协议上增加ssl(securesocketlayer)层。SSL层|应用层|传输层|网络层|链路层|物理层HTTPS认证流程请求------------------------>  server颁发证书<--------------------------服务器证书数字签名(用证书颁发机构的公钥加??密)------------------------>  certificateauthoritycertificate数字签名验证通过客户端(内置证书颁发机构证书)<--------------------------证书颁发机构公钥加密随机密码字符串(未来共享密钥)---------------------------->  服务器私钥解密(非对称加密)SSL协议结束 HTTP协议开始<------------------------服务器(symmetricencryption)sharedsecretkeyencryptionHTTP---------------------------->  server(对称加密)校验证书certificate:thepublic证书颁发机构的密钥验证证书的数字签名。协议为websocket全双工通信,客户端建立连接HTTP2多路复用:多个请求共享一个tcp连接全双工通信必须附上https://头压缩二进制传输五层协议详细总结:从上到下,越高越接近用户,越低越接近硬件应用层:指定应用的数据格式【HEAD(以太网头)【HEAD(IPheader)[HEAD(TCPheader)Header)DATA(应用层数据包)]]]transportlayer(port-to-portcommunication):port:0到65535的整数(2^16)进程使用的编号网卡的通过IP+mac来确定主机,只要是主机+端口(socket套接字),程序之间就可以进行通信UDP协议:在数据包中添加依赖于端口的新协议包[HEAD(send,receivemac)[HEAD(send,receiveip)[HEAD(send,receiveip)Receiveport)DATA]]]简单,可靠性差,不知道对方是否接受数据包TCP协议:UDP协议有确认机制复杂、难实现、耗资源网络层(主机到主机通信):IPprotocolipv4:32个二进制位,由网络部分和主机部分组成,子网掩码:网络部分为1,主机部分为0,目的是判断ip的网络部分,如255.255.255.0(11111111.11111111.11111111.00000000)IP数据包:HeaderHead+dataData,放入以太网包的Data部分[HEAD[HEADDATA]]IP包传输:不在同一个网络:无法获取mac地址,向网关发送数据,以及网关处理ARP(AddressResolutionProtocol):解析地址协议,在同一网络通过ip解析mac地址:mac地址填FF:FF:FF:FF:FF:FF:FF,广播数据,比较带ip,不满足丢包链路层:定义数据包(帧Frame)包头(Head):数据包的一些描述项,如发送方,接收方,数据类型数据(Data):具体内容datapacket数据包:[HEADDATA]定义了网卡和网卡的唯一mac地址EthernetI规定所有接入网络的终端都要有一个网卡接口,数据包必须是从一个网卡的mac地址到另一个网卡接口的mac地址。网卡序列号向网络中的所有设备广播和发送数据。对比接收端的mac地址,不是丢包,而是物理层:终端(pc,phone,pad...)的物理连接(光缆,cable),路由...,负责传递0和1信号