ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

web通信协议篇(三次握手,四次挥手)

2022-07-12 21:36:00  阅读:226  来源: 互联网

标签:web HTTP http 请求 通信协议 TCP 四次 服务器 客户端


web通信协议篇

web通信流程

1、浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP
2、通过IP地址找到对应的服务器后,建立TCP连接
3、浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包
4、服务器调用自身服务,返回HTTP Response(响应)包
5、客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开服务器之间的TCP连接

web服务器工作原理

web服务器的工作原理可以归纳为:
1、客户端通过TCP/IP协议建立到服务器的TCP协议
2、客户端向服务端发送HTTP协议请求包,请求服务器里的资源文档
3、服务器向客户端发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务端会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
4、客户端与服务端断开,由客户端解释HTML文档,在客户端屏幕上渲染图形结果

客户端请求到达服务端流程

1、当客户端拿到服务端域名对应的ip后,浏览器会以一个随机端口(1024<随机端口<65535)向服务器的web程序(nginx、apache)的80端口发起tcp连接请求。
2、该请求经过复杂的网络环境后到达服务端,进入到服务器的对应的网卡,再进入到linux内核的tcp/ip协议栈,一层一层的解开数据包,甚至经过防火墙,最终到达nginx程序,确认tcp/ip连接。
3、确认tcp连接之后,客户端继续发起http请求,如常见的get、post请求方法。

TCP/IP协议

概念
TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。 
TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网络接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。 
目的
提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。

OSI七层模型

七层模型从上到下依次是:

1、应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
2、表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等
3、会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
4、传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
5、网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
6、数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
7、物理层:建立、维护、断开物理连接。

TCP/IP三次握手

安装Wreshark
官方网址
https://www.wireshark.org/download.html

学习参考博客
https://blog.csdn.net/qq_46429858/article/details/109272182

http://apecome.com:9495/02-%E7%BD%91%E7%AB%99%E9%83%A8%E7%BD%B2%E7%AF%87/22-web%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE%E7%AF%87.html

TCP 和 UDP 的传输层协议。

udp
用户数据报协议 UDP(User Datagram Protocol):

UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认。
虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等
TCP
传输控制协议 TCP(Transmission Control Protocol):

TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、流量控制、拥塞控制机制,在数据传完后,还会四次挥手断开连接用来节约系统资源),这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。

TCP数据报文首部格式

关于TCP首部重要字段的解释

源端口、目的端口

各占 2 个字节,分别写入源端口和目的端口。IP 地址 + 端口号就可以确定一个进程地址
序号/序列号(Sequense Number)

在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。该字段表示本报文段所发送的数据的第一个字节的序号。
例如,一报文段的序号是 101,共有 100 字节的数据。(seq=101)
这就表明:本报文段的数据的第一个字节的序号是 101,最后一个字节的序号是 200。
显然,下一个报文段的数据序号应当从 201 开始,即下一个报文段的序号字段值应为 201。(seq=201)

确认号 ack(注意大小写)

期望收到对方下一个报文段的第一个数据字节的序号。
若确认号为ack=N,则表明:到序号 N-1 为止的所有数据都已正确收到。

Wireshark抓包分析TCP三次握手

1)TCP三次握手连接建立过程

Step1:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;

Step2:服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;

Step3:服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。

wireshark抓包获取访问指定服务端数据包
Step1:启动wireshark抓包,打开浏览器输入www.huawei.com。
Step2:使用ping www.huawei.com获取IP。

Step3:输入过滤条件获取待分析数据包列表 ip.addr == 211.162.2.183

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的
第一次握手数据包
客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图。

数据包的关键属性如下:

SYN :标志位,表示请求建立连接

Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据

Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据
第二次握手的数据包
服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

数据包的关键属性如下:

Seq = 0 :初始建立值为0,表示当前还没有发送数据

Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)
————————————————
版权声明:本文为CSDN博主「宾宾叔叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46429858/article/details/109272182
第三次握手的数据包

数据包的关键属性如下:

ACK :标志位,表示已经收到记录

Seq = 1 :表示当前已经发送1个数据

Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

就这样通过了TCP三次握手,建立了连接。开始进行数据交互
————————————————
版权声明:本文为CSDN博主「宾宾叔叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46429858/article/details/109272182
图解三次握手

三次握手的原文是 three-way handshake,整个名词的可以翻译为:需要三个步骤才能建立握手/连接的机制。当然,三次握手也可以叫 three-message handshake,通过三条消息来建立的握手/连接。

进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的 初始化序列号(Init Sequense Number, ISN) 为后面的可靠性传输做准备。

TCP/IP四次挥手

图解四次挥手

TCP连接状态报文
CLOSE 没有任何连接状态
LISTEN 监听状态、等待来自TCP的连接请求
SYN-SENT 发送连接请求后,等待对方确认
SYN-RECEIVED 收到、发送一个连接请求后,等待对方确认
ESTABLISHED   代表传输连接已经建立,双方进入数据传输状态
FIN-WAIT-1         主动关闭1,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2        主动关闭2,主机已收到对方关闭传输连接的确认,等待对方发送关闭传输连接请求

TIME-WAIT 完成双向传输连接关闭,等待服务端最终确认
CLOSE-WAIT 被动关闭连接,收到对方发来的关闭连接请求,且已经确认。
LAST-ACK  被动关闭,等待最后一个关闭传输连接的确认。
CLOSE        双方同时确认了关闭传输连接

常用端口号

应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL
熟知端口 21,20 69 23 25 53 80 22 3306
传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP

TCP与套接字(socket)

两个机器的连接,指的是tcp/ip协议的连接,本质上是两个socket的通信

socket套接字就是 ip+port的具象化

比如部署nginx服务,运行在 10.0.0.7:80 端口,这就是一个socket
通过本地去访问这个socket,浏览器随机指定的端口,发出请求

10.0.0.1:61145   这个也是一个socket

网络套接字的应用

上面说了socket套接字,就是ip+port,具体的表现为如

mysql服务的运行

172.16.1.51:3306

nginx服务的运行

172.16.1.7:80

或者

比如 http协议的交互

10.0.0.1:61145  >   10.0.0.7:80

马上学习nginx反向代理,远程部署

lb-5
10.0.0.5:80      

↓

web-7
10.0.0.7:9000 (php-fpm)

叫做远程的socket通信


简单说就是你部署 10.0.0.5:80   这个服务,还会和远程的另一个服务通过网络通信 
10.0.0.7:9000
两端进行数据交互



专业名词就叫做socket通信

本地套接字的应用

=======================================
套接字存在的意义,在于让两端进行数据交互,数据传输

php
10.0.0.7:9000

mysql(10.0.0.7:3306  这是一个ip:port形式的 socket)

mysql -uroot -p -h10.0.0.7



================================================================================
另一个形式是,也就是文件形式的本地socket
(因为本地内存文件socket形式,比网络socket传输效率更高,)
在后面高级部分,我教大家企业常用的python后端部署

socket的都是具象化证明服务的确运行了,可以对外提供访问了,可以交互了
mysql运行在 /tmp/mysql.sock

这个文件存在,则表示mysql运行
你可以通过这个/tmp/mysql.sock去登录mysql数据库

咱们暂时部署形式都是 网络socket形式,将程序部署在 ip:port的形式。。

或者

例如mysql服务端的启动,有两种方式形式

1.远程的通过网络连接TCP/IP  ,进行 如123.206.16.61:3306访问

2.本地进程连接,比TCP更快,使用unix domain socket作为通信载体。

这个等学习mysql时候,于超老师再进行讲解。本次理解概念即可。

HTTP协议

http协议是基于TCP/IP协议之上的应用层协议。
HTTP协议概述
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。

1、通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。

2、我们称这个客户端为用户代理程序(user agent)。

3、应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。

4、在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

5、通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。
6、HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP协议采用了请求/响应模型。

客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP 请求/响应的步骤
1. 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.yuchaoit.cn

2. 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。


4. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

5. 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、浏览器将该 html 文本并显示内容;  
6、释放 TCP连接;
请求-响应的模式
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。

换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应
HTTP无状态
HTTP是一种不保存状态,即无状态(stateless)协议。

HTTP协议 自身不对请求和响应之间的通信状态进行保存。

也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。

这种无状态设计是为了保证HTTP可以处理大量的请求响应;
如果HTTP完全无状态,你登录到淘宝网后,点击电子产品的跳转链接,它又提示你需要登录了,这就是一个无状态的实际效果。

因此此类需要保持用户身份信息的业务,必须要保存用户的状态。

于是引入了Cookie技术,能够保持用户的身份信息,下一次客户端发出请求,服务端能记忆客户端的身份。
HTTP请求方法
HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据

HEAD
与GET方法一样,都是向服务器发出指定资源的请求。
只请求响应报文中的HTTP头部。
它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
如注册、登录等请求。

PUT
向指定资源位置上传其最新内容。
如更新用户信息


DELETE
请求服务器删除Request-URI所标识的资源。

TRACE
回显服务器收到的请求,主要用于测试或诊断。

OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。
HTTP请求报文

Accept 就是告诉服务器端,我接受那些MIME类型

Accept-Encoding 这个看起来是接受那些压缩方式的文件

Accept-Lanague 告诉服务器能够发送哪些语言

Connection 告诉服务器支持keep-alive特性

Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端

Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多

虚拟主机.那这里就是用来标识要访问那个虚拟主机。

User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜引擎的蜘蛛等

If-Modified-Since 是浏览器向服务器端询问某个资源文件如果自从什么时间修

过,那么重新发给我,这样就保证服务器端资源.文件更新时,浏览器再次去

求,而不是使用缓存中的文件。

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;
报文格式 报文信息
请求行 请求方法
请求URL
请求协议
请求头 字段1 : 值1
字段2 : 值2
空白行
请求报文主体 GET方法不提交数据,没有报文主体
POST方法提交数据,携带报文主体
抓包HTTP请求

HTTP响应报文

响应头解释
Connection            使用keep-alive特性
Content-Encoding      使用gzip方式对资源压缩
Content-Length: 主体的长度
Content-type          MIME类型为html类型,字符集是 UTF-8
Date                  响应的日期
Server                使用的WEB服务器
Last-Modified:最后一次修改的时间
Server:            服务器程序软件名称和版本
报文格式 报文信息
起始行 协议版本号
数字状态码
响应头部 字段1:值1
字段2:值2
响应报文主体 <html>于超老师带你学IT,牛啊牛啊</html>
抓包HTTP响应

HTTP常见响应状态码
状态代码的第一个数字代表当前响应的类型:

1、1xx消息——请求已被服务器接收,继续处理
2、2xx成功——请求已成功被服务器接收、理解、并接受
3、3xx重定向——需要后续操作才能完成这一请求
4、4xx请求错误——请求含有词法错误或者无法被执行(客户端的错误)
5、5xx服务器错误——服务器在处理某个正确请求时发生错误(服务端的错误)
常见状态码
一些常见HTTP状态码为:
200 – 服务器成功返回网页
404 – 请求的网页不存在
503 – 服务不可用

常见HTTP状态码大全

1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明
http状态码 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
http状态码 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)
表示成功处理了请求的状态代码。
代码 说明
http状态码 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
http状态码 201 (已创建) 请求成功并且服务器创建了新的资源。
http状态码 202 (已接受) 服务器已接受请求,但尚未处理。
http状态码 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
http状态码 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 206 (部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码 说明
http状态码 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
http状态码 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
http状态码 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
http状态码 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
http状态码 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
http状态码 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
http状态码 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明
http状态码 400 (错误请求) 服务器不理解请求的语法。
http状态码 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
http状态码 403 (禁止) 服务器拒绝请求。
http状态码 404 (未找到) 服务器找不到请求的网页。
http状态码 405 (方法禁用) 禁用请求中指定的方法。
http状态码 406 (不接受) 无法使用请求的内容特性响应请求的网页。
http状态码 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
http状态码 408 (请求超时) 服务器等候请求时发生超时。
http状态码 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
http状态码 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
http状态码 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
http状态码 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
http状态码 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
http状态码 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
http状态码 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
http状态码 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
http状态码 417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明
http状态码 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
http状态码 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
http状态码 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
http状态码 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
http状态码 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
http状态码 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

URL/URI理解

统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。

例如身份证号,定位唯一的一个人,绝对不会重复,身份证号就好比是URI

统一资源定位符URL 定位到这个人,他在哪

住址协议://地球/中国/北京/昌平/沙河/于超老师

等于↓

http://yuchaoit.cn/upload/2022/05/Xnip2022-05-01_16-32-30-b82235c9b62c42af8ea25e0313ca42f7.jpg

url中文叫“统一资源标识符”,是一个用于标识某一互联网资源名称的字符串,在世界范围内标识定位某一个唯一信息资源。
url主要用在各种www客户端和服务器程序上,url可以用一种统一的格式来描述各种信息资源,包括文件,服务器地址和目录等

【url组成】

协议
主机ip或域名
端口
文件资源具体地址
第一部分用"://"隔开,第二部分用"/"符号隔开

web服务器与前端静态资源

html
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。

http服务器响应体,一般就是如下的html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>chaoge.linux</title>
</head>
<body>
    <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p>
</body>
</html>
css
CSS 指层叠样式表 (Cascading Style Sheets)

CSS作用是定义如何显示HTML元素样式
js
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。

JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

静态资源理解

在网页设计中,纯HTMl格式的网页(包含图片,视频,JS,CSS等样式)通常被称作“静态网页”。

静态网页是相对于动态网页而言的,是指没有后台数据库,不包含程序,不可交互的网页。
静态网页资源对应文件扩展名为

1、纯文本文件,如.htm .html .xml .js .css
2、图片或数据文档,如 .jpg .gif .bmp .txt .ppt
3、视频类文件 .mp4 .avi .flv 等
静态网页重要特性

1、每个页面有一个固定的url地址,url地址不含有问号"?"或"&"等符号
2、网页一经发布到服务器,网页内容是保存在服务器文件系统上的,每个网页都是独立的一个文件
3、网页内容固定不变,容易被搜索引擎收录(优点)
4、网页没有数据库支撑,在网站制作和维护上工作量很大(缺点)
5、网页的交互性很差,缺少程序的功能实现(缺点)
6、客户端解析网址时,由于不需要读取数据库,因此服务器端可以接受更高的并发访问。请求到来时,直接从磁盘上返回数据。(优点)

动态资源理解

服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果
动态网页是和静态网页相对而言的,动态网页的url后缀一般是.asp  .aspx  .php .js .cgi 
并且动态网页都有标志性的符号"? &",后端都有数据库的支持。
动态网页资源特点

1、网页以数据库技术为支撑,大大降低网站维护的工作量
2、动态网页技术的网站可以实现更多的功能,如用户注册,用户登录,投票,用户管理,博客管理等
3、动态网页不是独立存在服务器上的网页文件,用户请求动态程序时,服务器解析程序并且可能读取数据库返回一个完整的网页内容
4、搜索引擎(爬虫)一般不会抓取网址中的“?”后面的内容,因此企业都会做伪静态技术页面

面试背诵

1.dns篇
用户访问域名www.yuchaoit.cn
↓
浏览器跳转
↓
浏览器缓存(disk cache)
↓
Hosts文件
↓
本地DNS服务器(递归查询 > 迭代查询)
↓
client 向 server发起查询(递归查询)
server 向 server发起查询(迭代查询)


2.TCP/IP协议篇(三次握手)
client > SYN报文,请求连接 
server > SYN,ACK报文 响应client
client  > ACK,建立连接 


3.客户端发起http请求
- 请求方法是什么、get、post、delete
- 请求主机是什么、www.yuchaoit.cn
- 请求资源是什么 、 http://yuchaoit.cn:8090/upload/2022/05/Xnip2022-05-01_16-32-30-b82235c9b62c42af8ea25e0313ca42f7.jpg
- 请求端口是什么、默认http是80、https是443
- 请求参数是什么、请求头部信息(资源类型、是否压缩、cookie、浏览器客户端等)
- 请求信息最后的换行

4.服务端响应的内容
- server信息(web服务器软件类型)
- 响应文件类型
- 响应头部信息(是否压缩,语言编码,是否保持连接等)

5.客户端发起TCP四次挥手断开连接。
client > 发起断开请求 FIN=1 
server  > 响应断开   FIN、ACK
server  > 发起断开请求 FIN=1
client > 确认断开连接 ACK

标签:web,HTTP,http,请求,通信协议,TCP,四次,服务器,客户端
来源: https://www.cnblogs.com/Xafei/p/16471856.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有