软件测试——HTTP协议

HTTP协议—由浅到深

  • HTTP(Hypertext Transfer Protocol)协议:超文本传输协议。这仅仅是字面上的意思,往深了讲还可以进行分割,它是范围大小的一个关系,最里面是超文本,再是传输,最后是协议。
  • 什么是超文本
    • 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。现时超文本普遍以电子文档方式存在,其中的文字包含有可以链结到其他位置或者文档的连结,允许从当前阅读位置直接切换到超文本连结所指向的位置。超文本的格式有很多,最常使用的是超文本标记语言(标准通用标记语言下的一个应用)及富文本格式。
  • 什么是传输
    • 传输就是两台计算机进行通信时,我们存储的超文本会被解析为计算机识别的二进制数据包,通过传输载体传输到另外一台电计算机上,这个过程就称为传输,通常在发送请求的一方称为请求方,接收一方称为应答方。通俗理解就是我们两个人讲话通过空气载体传输到我们耳朵里这个过程称为传输,讲话的是请求方,倾听的一方为应答方。
  • 什么是协议
    • 网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。
      没有网络协议的互联网是混乱的,在互联网中的端系统也不能自己想发什么发什么,也是需要受到通信协议约束的。

所以HTTP协议就是计算机中传输各类超文本数据的约定规范。它是Web应用程序使用的基本通信协议,用于在客户端和服务器之间传递数据。HTTP使用TCP/IP作为其传输协议,通过发送请求和接收响应来进行通信。

  • HTTP协议的主要特点包括:
    • 简单:HTTP使用简单的方法(GET、POST等)来请求和响应资源。
    • 无连接:每个HTTP请求/响应都是无状态的,即服务器不会保留之前的请求/响应信息。
    • 无状态:服务器不会在不同的请求之间保持对客户端的状态跟踪。
    • 可扩展:HTTP允许通过头字段传递自定义信息,以支持各种应用需求。

5.1 HTTP协议的相关协议

HTTP相关的协议包括TCP/IP、DNS、URI、HTTPS等。HTTP是一个传输协议,它依赖于TCP/IP协议进行数据的传输,而DNS协议用于将域名解析为IP地址,URI则是统一资源标识符,用于标识互联网上的资源,而HTTPS是基于HTTP协议的安全传输协议。

5.1.1 TCP/IP协议族

  • TCP/IP(Transmission Control Protocol/Internet Protocol)是一种网络协议套件,它定义了网络中数据传输的规则和格式。它是互联网的基础协议,被用于在不同计算机之间进行通信。
  • TCP/IP协议族是一系列构成互联网基础的网络协议。它包括了以下几个主要协议
    • IP协议:是TCP/IP协议的核心,负责在网络中传输数据。它将数据分割成小的数据包,并通过网络传输到目标地址。
    • TCP协议:是一种可靠的传输协议,它在IP协议的基础上提供了可靠的数据传输机制。TCP协议通过建立连接、数据分段和重传等机制,确保数据的准确传输。
    • UDP协议:是一种无连接的传输协议,它在IP协议的基础上提供了简单的数据传输机制。UDP协议不保证数据的可靠传输,但传输效率较高,适用于一些实时性要求较高的应用。
    • ICMP协议:是一种用于网络管理和错误报告的协议。它用于在网络中传递有关网络状态、错误情况和可达性等信息。
    • IGMP协议:是一种用于在多播网络中管理组播组的协议。它允许主机加入或离开一个多播组,并通过发送和接收组播数据包来实现多播通信。
      我们这里讲几个重要一点的。

5.1.1.1 TCP协议

  • TCP(Transmission Control Protocol:传输控制协议)是一种可靠的传输协议,它提供了面向连接的、可靠的数据传输。TCP将数据分割成小的数据包,并在发送和接收时进行流量控制、拥塞控制和错误纠正,以保证数据的完整性和可靠性。
  • TCP包头:
    • Source Port(源端口):表示发送端应用程序的端口号。
    • Destination Port(目的端口):表示接收端应用程序的端口号。
    • Sequence Number(序列号):表示数据包中的数据字节序列号,用于确认和重传丢失的数据包。
    • Acknowledgment Number(确认号):表示接收端已经成功接收的数据包的最大序列号,用于确认和防止数据包丢失。
    • Data offset(数据偏移量):表示TCP包头的长度,即16位。
    • Reserved(保留字段):预留字段,通常设置为0。
    • Options(选项):可选字段,用于扩展TCP的功能。
    • Checksum(校验和):计算数据包中所有字节的校验和,用于检测数据包在传输过程中的错误。
    • URG(紧急指针):指示紧急数据的偏移量。
    • ECN-Echo(ECN回显):指示是否使用了以太网拥塞控制字段。 11.窗口大小:指示接收端可以接收的数据量大小。
    • Checksum(校验和):计算数据包中所有字节的校验和,用于检测数据包在传输过程中的错误。
    • URG(紧急指针):指示紧急数据的偏移量。 14.urgent pointer(紧急指针):指示紧急数据的偏移量。
    • Window size(窗口大小):指示接收端可以接收的数据量大小。
    • Checksum(校验和):计算数据包中所有字节的校验和,用于检测数据包在传输过程中的错误。
      TCP协议包头
  • TCP的三次握手
    • 什么是TCP的三次握手呢?是指建立一个TCP连接时,需要客户端和服务端发送三个数据包的过程。这个过程是为了确定双方的接收能力和发送能力是否正常。其过程简单来说就是:
      • 1、客户端向服务器端发送一个SYN包,表示客户端想要建立一个连接。
      • 2、服务端接收到SYN包后,向客户端回复一个SYN+ACK包,表示服务端同意建立连接。此时,服务端会将SYN+ACK包中的序列号设置为一个较大的值,以便客户端在发送数据时不会与这个序列号冲突。
      • 3、客户端接收到服务端的SYN+ACK包后,会向服务端发送一个ACK包,表示客户端已经收到了服务端的SYN+ACK包,并且确认了服务端的序列号。
如图:

TCp三次握手

  • TCP的四次挥手

    • TCP四次挥手的过程如下:
      • 1、客户端发送一个FIN(结束)报文段给服务器,表示客户端不再发送数据给服务器。
      • 2、服务器接收到客户端的FIN报文段后,返回一个ACK(确认)报文段给客户端,表明服务器已经收到了客户端的FIN报文段。
      • 3、服务器发送一个FIN报文段给客户端,表示服务器也不再发送数据给客户端。
      • 4、客户端接收到服务器的FIN报文段后,返回一个ACK报文段给服务器,表示客户端已经收到了服务器的FIN报文段。

    至此,TCP连接关闭完毕。

    在这里插入图片描述
    这里有人要问了,为什么要进入一个超时等待状态,为什么不直接关闭,因为在网络环境中,如果最后客户端发送的ACK包丢了,那么服务器端是关闭不了的,因此还会向客户端发送一个Fin包,然后客户端收到后又会发送一个ACK包,服务端收到后才会关闭连接。

5.1.1.2 IP协议

  • IP(Internet Protocol)是一种网络层协议,它负责将数据包从源主机传送到目标主机。我们打电话时,我们得拥有唯一的电话号码,跟别人通话时需要知道对方的电话号码,而IP使用唯一的IP地址来标识每台主机,并使用路由器来确定数据包的传输路径。
  • IP的包头:
    • 1.版本(4bit):指定IP协议的版本。当前版本为IPv4(4),IPv6(6)。
    • 2.头部长度(4bit):表示IP包头的长度。这个字段指定了IP包头的实际字节数。通常,一个完整的IP头至少有20字节,而选项字段可能占用40字节,因此总长度可能在60字节以内。
    • 3.区分服务(8bit):提供一种对数据包的服务等级进行分类的方法。
    • 4.总长度(16bit):表示IP数据包的长度。这个字段指定了整个IP数据包的字节数,包括IP头和数据部分。
    • 5.标识符(16bit):用于标识同一个数据包的多个分片。当数据被分割成多个分片传输时,接收端可以使用这个标识符将它们重新组合成一个完整的数据包。
    • 6.标志位(3bit):用于控制数据包的传输行为。其中,MF标志位指示是否存在更多的分片。DF标志位指示是否允许分片。
    • 7.片偏移量(13bit):用于指示分片在原始数据中的位置。
    • 8.生存时间(8bit):表示数据包在网络中的存活时间。时间越长,数据包在网络中传输的可能性就越大。
    • 9.协议(8bit):指定数据包使用的协议。例如,TCP、UDP、ICMP等。
    • 10.报头校验和(16bit):用于检测IP头部的错误。如果校验和不匹配,则说明IP头部有错误。
    • 11.源IP地址(32bit):发送数据包的IP地址。
    • 12.目的IP地址(32bit):接收数据包的IP地址。IP包头
  • IP地址的分类:A类地址、B类地址、C类地址、D类地址和E类地址。
    • A类地址用于大型网络,其网络地址的最高位必须是0,地址范围从1.0.0.0到127.0.0.0,其中127.0.0.1是一个特殊的IP地址,表示主机本身,用于本地机器的测试。
    • B类地址用于中型网络,其网络地址的最高位必须是10,地址范围从128.0.0.0到191.0.0.0。
    • C类地址用于小型网络,其网络地址的最高位必须是110,地址范围从192.0.0.0到223.0.0.0。
    • D类地址用于多点广播,其网络地址的最高位必须是1110,地址范围从224.0.0.0到239.0.0.0。
    • E类地址则为保留地址,不用于实际的网络通信。如图:
      IP地址分类
  • IP地址的子网掩码的使用:
    • IP地址的子网掩码用于确定一个IP地址所属的网络和主机部分。子网掩码是一个32位的二进制数,它将IP地址分为网络部分和主机部分。子网掩码中的1代表网络部分,0代表主机部分。通过将IP地址与子网掩码进行“与”操作,可以获得网络部分的地址。
    • 例如,对于IP地址192.168.1.100和子网掩码255.255.255.0,进行“与”操作后,得到的结果是192.168.1.0,表示该IP地址所属的网络是192.168.1.0。
    • 子网掩码的作用是将一个IP地址划分为网络和主机两部分,以便进行网络通信和路由控制。它可以帮助确定两个IP地址是否属于同一网络,以及在网络中如何进行分组和寻址。
      • A类子网掩码
        A类
      • B类子网掩码:
        B类
      • C类子网掩码:
        C类
  • 变长子网掩码及子网的规划
    • 变长子网掩码是一种根据不同子网所需的IP地址数量而灵活调整的子网划分方式。在变长子网划分中,每个子网的可用IP地址数量可以是不一样的,子网的子网掩码也不一样。
    • 要进行变长子网划分,需要根据所需的子网数量和每个子网所需的IP地址数量来确定子网掩码。一般来说,可以通过将原始子网掩码往右移动n位来划分2^n个子网,其中n为所需子网数量的二进制位数。
    • 例如,将网段192.168.0.0/24划分成两个子网,可以将子网掩码往后移动一位,即变为25位子网掩码。划分四个子网,可以将子网掩码往后移动两位,即变为26位子网掩码。依此类推,划分8个子网,子网掩码就要往后移动三位,即变为27位子网掩码。
    • 子网掩码的规划取决于所需子网数量和每个子网所需的IP地址数量。根据具体需求,可以计算出每个子网的子网掩码和可用IP地址范围。
    • 广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。
      变长子网掩码

5.1.1.3 UDP协议

上面说了TCP协议,TCP协议与UDP协议一样属于传输层的协议,那么现在来说说UDP协议。UDP是用户数据报协议,它在IP的数据报服务之上增加了复用和分用的功能以及差错检测的功能。UDP是面向报文的,即一次发送一个完整的报文,不合并也不分拆应用层交给UDP的报文。接收方的UDP会将IP层交上来的UDP用户数据报原封不动地交付给上层的应用进程。当传输层从IP层收到UDP数据报时,根据首部中的目的端口,通过相应的端口将UDP数据报交付给最终的应用进程。而UDP就比TCP简单得多了,没有什么三次握手四次挥手了,如图:
在这里插入图片描述
客户端将数据封装一下,打包成包直接通过网卡发送出去,并且不需要建立连接,数据包之间没有状态上的联系。因此这种方式的性能损耗少,内存资源占用小,但是会在网络中产生的丢包,所以稳定性弱。

5.1.1.4TCP与UDP的区别

TCPUDP
TCP提供面向连接的可靠服务UDP提供无连接不可靠服务
TCP通过建立连接、数据传输和断开连接的方式来保证数据的可靠性,它使用确认机制、重传机制和流量控制等技术手段来确保数据的正确性和完整性。UDP则不提供这些机制,它仅仅负责将数据从源端传输到目的端,不保证数据的可靠性和完整性
TCP以字节流方式进行传输,它不保留报文边界,将数据拆分为多个报文段进行传输UDP则是一个个独立的数据报文进行传输,每个数据报文都有自己的边界。
TCP提供了可靠的传输服务,适用于对数据准确性要求高、速度可以相对较慢的场景,比如文件传输、电子邮件等。UDP适用于对实时性要求高、数据准确性要求相对较低的场景,比如音频和视频流媒体、在线游戏等。

5.2 DNS

  • DNS(Domain Name System,域名系统)是一个用于将域名(例如www.baidu.com)转换为对应的IP地址的协议。它充当着互联网上的地址簿,使得用户可以通过易记的域名来访问到目标网站。

  • DNS协议使用分布式数据库来存储域名与IP地址的映射关系。当用户输入一个域名时,操作系统会向本地DNS服务器发起查询请求,该服务器会首先搜索自己的缓存来查找对应的IP地址。如果缓存中没有找到,本地DNS服务器将向根域名服务器发起请求,根域名服务器会指引本地服务器到顶级域名服务器。逐级查询过程最终找到目标域名对应的IP地址,并将结果返回给本地DNS服务器,再由本地DNS服务器将结果返回给用户的操作系统,如图所示。
    在这里插入图片描述

  • DNS查询类型

    • 从查询方式上分为递归查询和迭代查询
      递归查询:做出查询成功或失败的响应。一般客户机和服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出请求查询,得到结果后转交给客户机。
      迭代查询:服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。
    • 从查询内容上分为正向查询由域名查找IP地址,反向查询由IP地址查找域名。
  • DNS协议使用UDP(User Datagram Protocol)作为传输层协议,通常使用端口号53进行通信。它还支持TCP作为备选的传输层协议,用于处理大型数据包或可靠传输的情况。

总结来说,DNS协议是一个重要的互联网基础设施,它通过将域名转换为对应的IP地址,实现了互联网上网站的可寻址和可访问性。

5.3 URI/URL

  • 什么是URI/URL呢?
    • URL(Uniform Resource Locator:统一资源定位符)是一种用于标识和定位互联网上资源的地址的协议,就是我们说的网址。
    • URI(Uniform Resource Identifier:统一资源标识符)是一个更广泛的概念,用于标识任何类型的资源,包括但不限于互联网资源。 而URI不仅仅包含URL还包含URN(统一资源名称)。
    • URL是URI的子集,因为它是URI的一种特定形式。

URL协议包括协议类型、主机名、端口号、路径和查询参数等组成部分。例如,http://www.baidu.com/index.html 是一个URL,其中"http"是协议类型,“www.baidu.com"是主机名,”/index.html"是路径。

URI也可以使用其他协议类型,如FTP、HTTPS等。所以可以说URL是URI的一种特定形式,用于指定资源在互联网上的位置。

5.4. HTTPS协议

  • HTTPS(Hypertext Transfer Protocol Secure)是一种安全的通信协议。HTTP用于在Web浏览器和服务器之间传输数据,但它的通信是明文的,易受窃听和篡改的风险。

  • HTTPS通过在HTTP和TCP之间添加一层SSL或TLS加密来提供安全性。这种加密使得数据在传输过程中变得不可读,只有发送方和接收方可以解密数据。这样,攻击者在窃听或篡改数据时将无法获取有用的信息。

  • 要使用HTTPS,服务器需要获得一个SSL证书,该证书由认证机构(CA)签发。证书包含有关服务器的信息,包括其公钥。通过使用证书,浏览器可以验证服务器的身份,并与服务器建立安全连接。

通过使用HTTPS,网站可以确保数据传输是加密的,用户可以安全地进行在线交互,例如输入敏感信息(如密码、信用卡号等)。此外,搜索引擎也更倾向于将使用HTTPS的网站排名更高,以促进网络安全。

  • HTTPS的工作原理如下:
    • 1、客户端发送一个HTTPS请求给服务器。
    • 2、服务器将自己的数字证书发送给客户端。
    • 3、客户端验证服务器的数字证书的有效性,并生成一个随机的对称加密密钥。
    • 4、客户端使用服务器的公钥进行加密,并发送给服务器。
    • 5、服务器使用私钥解密客户端发送过来的加密数据,并使用随机生成的对称加密密钥进行加密。
    • 6、客户端收到服务器发送过来的加密数据后,使用对称加密密钥解密数据。

通过使用HTTPS协议,可以确保在客户端和服务器之间传输的数据是加密的,从而保护用户的隐私和数据安全。这对于涉及敏感信息(如登录信息、信用卡号等)的网站或应用程序尤为重要。

5.5 协议层

相关的网络协议我们说完了,现在来讲讲网络协议层。
先来讲讲为什么要分层和原则。

  • 在计算机网络体系结构划分的原则:
    • 每层功能相对独立。
    • 相邻层功能具有一定的依赖关系。
    • 对每层要完成的服务及实现过程进行明确规定。
    • 不同系统的同等层具有相同的功能(服务)。
    • 高层使用低层提供的服务时,不需要知道低层服务的具体实现方式。
  • 计算机网络体系结构分层的优点
    • 各层相对独立
    • 简化体系结构设计难度
    • 网络体系的灵活性更好
    • 结构易于实现和维护
  • 协议
    • 协议是控制两个不对等实体进行通信的规则的集合。
    • 在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。
    • 要实现本层协议,还需要使用下层所提供的服务。
    • 协议是“水平的”,即协议是控制对等实体之间通信的规则。
    • 服务是“垂直的”,即服务是由下层向上层通过层接口提供的。

5.5.1 网络模型

  • 网络模型是指在计算机网络中,用于描述网络结构和行为的抽象概念。它是对网络中各个组件和它们之间相互联系的表示,可以帮助理解、分析和设计网络。网络协议层主要指的是将网络通信分为不同的层次,以便实现不同功能的协议能够相互配合工作的一种设计思想。常用的网络协议层模型包括TCP/IP和OSI参考模型。

5.5.1.1 OSI参考模型

  • OSI(开放系统互联模型)参考模型是ISO(国际标准化组织)组织制定的一种通信协议的概念模型,它将网络通信过程划分为七个层次,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有特定的功能和协议,通过逐层转发和处理数据来实现网络通信。

OSI模型

  • 七层协议的体系结构功能
    • 物理层:设备之间的比特流的传输、物理接口、电气特性等。
    • 数据链路层:成帧、用MAC地址访问媒介、错误检测与修正。
    • 网络层:提供逻辑地址、选路。
    • 传输层:可靠与不可靠的传输、传输前的错误检测、流控。(TCP与UDP协议的选择)TPDU:传输协议数据单元
    • 会话层:对应用会话的管理、与同步。SPDU:会话协议数据单元
    • 表示层:数据的表现形式、特定功能的实现—如加密、压缩等。PPDU:表示层协议数据单元
    • 应用层:用户接口。APDU:应用协议数据单元

5.5.1.2 TCP/IP参考模型

  • TCP/IP体系结构分为四层,其体系结构模型自上而下分别为网络接口层(网络硬件和设备驱动程序)、网络层(IP协议)、传输层(TCP或UDP协议)和应用层。其中虚线框中的数据链路层和物理层严格说并不属于TCP/IP体系结构,但被TCO/IP的网络接口层很好的调用。通过分层的方式实现了网络通信的灵活性和可扩展性。
    TCP/IP模型
    沙漏计时器形状的TCP/IP协议族
    沙漏计时器形状的TCP/IP 协议族

  • 五层协议的体系结构功能

    • 物理层:传输比特(数据)流,有电气、机械、功能、规程等功能。物理层的协议仍然使用链路层协议,这些协议与实际的物理传输介质有关,
    • 数据链路层:在相邻两个主机之间实现点对点的传送数据帧。
    • 网络层:为分组交换网上的不同主机提供通信服务,传送IP包,并利用路由,选择最佳路径。
    • 传输层:向两台主机中的进程之间的通信提供通用的数据传输服务。
    • 应用层:直接为用户应用进程服务。

那他们是怎么进行通信的呢?
在这里插入图片描述

  • 两台主机之间的通信步骤如下:
    • 应用层:发送端的应用程序将要传输的数据打包成应用层的消息,然后通过传输层将消息传递给网络层。
    • 传输层:发送端的传输层将应用层提供的消息进行分割,并为每个分段添加序号和其他控制信息。然后,它将这些分段传递给网络层。
    • 网络层:发送端的网络层负责确定如何将数据从源主机发送到目标主机。它将传输层提供的数据包(即分段)封装成网络层的数据报,并添加源和目标的IP地址。然后,它将数据报传递给数据链路层。
    • 数据链路层:发送端的数据链路层负责将网络层提供的数据报封装成数据帧,并添加物理地址(MAC地址)。然后,它将数据帧传递给物理层。
    • 物理层:发送端的物理层将数据帧转换成比特流或者信号,通过物理介质(如以太网电缆或者无线信道)发送给接收端。

接收端的主机将以上步骤反向执行,逐层解析和处理收到的数据,直到最终将数据传递给目标应用程序。这样,两台主机之间的通信就完成了

这些网络协议层模型都是为了简化和规范网络通信而设计的,不同的应用场景可能选择不同的协议层模型来满足需求。
TCP/IP模型更加简洁灵活,由于其广泛应用于互联网,成为了网络通信的标准模型。
这些网络模型提供了不同层次的抽象,使得网络设备、协议和服务能够按照各自的功能划分进行开发和管理,同时也方便了不同厂商和组织之间的互操作性。

5.6 HTTP协议请求响应的过程

  • 相关的参考模型讲完了,下边就介绍一下HTTP协议请求响应的过程。它使用请求-响应模型来进行通信。下面是HTTP协议的请求-响应过程:
    • 客户端发起请求:客户端(如浏览器)向服务器发送HTTP请求。请求包括HTTP方法(GET、POST等)、请求URL、请求头和请求体等信息。
    • 服务器接收请求:服务器接收到客户端发送的请求。
    • 服务器处理请求:服务器根据请求的URL和其他信息,处理请求。这可能包括查询数据库、调用后端服务等操作。
    • 服务器生成响应:服务器根据请求的处理结果生成HTTP响应。响应包括响应状态码、响应头和响应体等信息。
    • 服务器发送响应:服务器将生成的HTTP响应发送回客户端。
    • 客户端接收响应:客户端接收到服务器发送的HTTP响应。
    • 客户端处理响应:客户端根据响应的状态码和其他信息,处理响应。这可能包括解析响应、渲染页面、执行脚本等操作。
    • 客户端显示结果:客户端将处理后的结果显示给用户,如在浏览器中显示网页内容。
      工作流程
      在实际应用中,还涉及到连接的建立和关闭、缓存机制、重定向等其他细节。

5.6.1 HTTP请求方法

上面说了请求,到底什么是请求呢?

  • HTTP请求方法有多种,常见的包括:
    • GET:用于从指定的资源请求数据。它通常用于获取(或读取)服务器上的资源,而不会对服务器上的数据进行修改。GET请求通过URL传递参数,将参数附加到URL的末尾,以便服务器知道客户端请求的是哪个资源。
    • POST:用于向服务器提交数据,数据包含在请求体中,一般用于创建新资源或修改服务器上的资源,使用 POST 请求方法时,数据会作为请求的实体部分发送到服务器,并由服务器进行处理。与 GET 请求不同,POST 请求的数据不会暴露在 URL 中,而是以请求体的形式进行传输。这使得 POST 请求适用于一些需要保密性或较大数据量的场景。
    • PUT:用于向服务器上传数据,指定资源的完整更新,如果资源不存在则创建,存在则替换。
    • DELETE:用于删除服务器上的资源。
    • PATCH:用于对资源进行部分更新。
    • HEAD:类似于GET请求,但只获取HTTP头部信息而不返回实体主体。
    • OPTIONS:用于获取目标资源所支持的通信选项。
    • TRACE:回显服务器收到的请求,主要用于测试或诊断。

这些方法定义了客户端与服务器之间的交互方式,根据具体需求选择合适的方法来进行请求,而我们最常用的就是GET和POST请求,其他的简单知道即可。

  • 上边提到当HTTP使用GET请求方法请求到URL,那么这种情况怎么理解呢?
    HTTP请求URL是指在客户端发送HTTP请求时,用于标识要访问的资源的统一资源定位符(URL)。URL由几个部分组成,包括协议、主机名、端口号、路径和查询参数等。

    • 例如,一个典型的HTTP请求URL可能如下所示:

    • https://www.baidu.com:8080/path/to/resource?param1=value1&param2=value2…

    • 在这个例子中,协议是HTTPS,主机名是www.baidu.com;端口号是8080;路径是/path/to/resource;查询参数有两个:param1和param2;后面还有其他的,这后面的这部分称为锚点,相当于书签。

    • 通过HTTP请求URL,客户端可以向服务器发送请求并获取相应的资源。服务器根据URL中的信息来确定要返回的资源,并使用HTTP协议进行通信。

5.7 HTTP协议状态码解析

上边我们讲了请求的方法,但是我们请求了有没有回应呢?
下边介绍一下返回的状态码的含义。

状态码含义
1xx服务器收到请求,需要请求者继续执行操作
2xx操作成功,接收并处理
3xx请求重定向,需要进一步的操作以完成请求(这些状态码可以帮助客户端和服务器之间进行合理的页面跳转和缓存控制,提供更好的用户体验。)
4xx客户端错误,请求包含语法错误或者无法完成请求
5xx服务端错误,服务器在处理请求过程中发生了错误
  • 当如果发生了5xx的情况时,我们应该如何找到对策呢?
    • 1、登录Linux服务器上,查看日志
    • 2、直接问开发,提bug

HTTP协议常见的具体的状态码

状态码含义
200成功响应
204请求处理成功,但是没有资源可以返回
206对资源某一部分进行响应,由Content-Range 指定范围的实体内容。
301Moved Permanently(永久重定向):请求的资源已经被永久移动到新位置。浏览器会自动重定向到新的URL。
302Found(临时重定向):请求的资源暂时被移动到了新位置。浏览器会自动重定向到新的URL,但是下次访问仍然会使用原始URL。
303See Other(查看其他位置):服务器返回一个新的URL,客户端应使用GET方法请求该URL。常用于POST请求后的跳转。
304Not Modified(未修改):客户端发送了一个带有If-Modified-Since或If-None-Match头部的GET请求,服务器确认资源未发生变化,返回此状态码,告诉客户端可以直接使用缓存副本。
307Temporary Redirect(临时重定向):与302状态码类似,但要求客户端保持请求方法不变进行重定向。
308Permanent Redirect(永久重定向):与301状态码类似,但要求客户端保持请求方法不变进行重定向。
400Bad Request:请求错误,服务器无法理解或处理该请求。
401Unauthorized:未授权,需要身份验证或登录才能访问。
403Forbidden:禁止访问,服务器拒绝请求。
404Not Found:未找到,请求的资源不存在。
405Method Not Allowed:方法不允许,服务器不支持请求中指定的方法。
406Not Acceptable:不可接受,服务器无法根据请求的内容特性完成请求。
408Request Timeout:请求超时,服务器等待请求超时。
409Conflict:冲突,请求与服务器上的资源冲突。
410Gone:已删除,请求的资源永久性地不再可用。
429Too Many Requests:过多请求,客户端发送的请求过多。
500Internal Server Error(内部服务器错误):表示服务器在执行请求时发生了未知错误,无法完成请求。
501Not Implemented(未实现):表示服务器不支持当前请求所需要的功能或者无法完成请求。
502Bad Gateway(错误的网关):表示服务器作为网关或代理,收到了无效的响应。
503Service Unavailable(服务不可用):表示服务器当前无法处理请求,一般是由于服务器过载或维护导致。
504Gateway Timeout(网关超时):表示服务器作为网关或代理在等待另一个服务器的响应时超时。

在这里插入图片描述
这下我们在浏览器看开发者工具就知道哪儿的问题了。

5.8 HTTP请求头与响应头

5.8.1 HTTP请求头

上面讲完了状态码,下边就讲讲HTTP的请求头。
常见的HTTP请求头有:

请求头解析
Accept告诉服务器自己接受什么数据类型。
Accept-Language客户端声明自己接收的语言。
Accept-Encoding客户端声明自己接收的编码方法,浏览器申明自己接收的编码。方法通常指定压缩方法,是否支持压缩,支持什么压缩方法。
Connection长连接还是短链接。表示是否需要持久连接。
Host客户端指定自己想访问的WEB服务器的域名/IP地址和端口号。
Referer请求来源网站;浏览器想WEB端服务器表面自己是从哪个网页URL获得点击当前请求中的网址/URL。(防盗链-只允许内部访问)
User-Agent浏览器表明自己的身份(是哪种浏览器)指定发起请求的用户代理(浏览器、爬虫等)的信息。
Cache-Control缓存设置(重点),指定请求和响应遵循的缓存机制,决定了如何管理和使用缓存。(可以降低两端数据交互的数据量)
Cookie保存客户端的部分信息发送到服务端供服务端验证和使用。包含服务器发送给客户端的Cookie信息,用于身份验证、会话管理等。
Range获取的数据部分。
Origin代表客户端的请求源于哪个站点
Jwt_token代表了客户端向服务端请求时带有什么验证信息
X-Requested-With标识着请求是同步请求还是异步请求
Authorization指定客户端的身份认证信息,用于访问受限资源。

5.8.2 HTTP响应头

HTTP协议的响应头是在服务器响应客户端请求时发送的一组信息,用于描述服务器发送的数据和告知客户端如何处理这些数据。下面是一个HTTP响应头的示例:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Server: Apache/2.4.41 (Unix)
Date: Fri, 01 Jan 2022 00:00:00 GMT
  • 解析HTTP响应头可以通过以下步骤进行:
    • 首先,读取响应行,格式为 <协议版本> <状态码> <状态描述>。例如,HTTP/1.1 200 OK表示HTTP协议的版本为1.1,状态码为200,状态描述为OK。
    • 接下来,依次读取每个响应头字段。每个响应头字段由字段名和对应的值组成,中间用冒号分隔。例如,Content-Type: text/html; charset=utf-8表示内容类型为text/html,字符编码为utf-8。

常见的响应头字段包括:

响应头解析
Access-Control-Allow-Credentials请求的响应是否可以暴露于该页面,当true值返回时它可以被暴露
Access-Control-Allow-Origin服务端允许进行跨域资源访问的来源域
Content-Type服务端告诉客户端响应体的内容类型
Date创建响应数据(报文)的日期时间,就是消息发送的时间
Transfer-Encoding传输编码,chunked是分块传输的意思
Vary服务器用这个头的内容告诉缓存服务器,在什么条件下才能用本响应所返回的对象响应后续的请求
Allow服务器支持哪些请求方式(Get、Post等)
Server服务器表明自己是什么软件及版本信息
  • 解析完所有的响应头字段后,可以根据需要对其进行处理,例如提取Content-Type来确定响应的文件类型,或者提取Content-Length来判断响应实体的大小。
  • 请注意,上述只是HTTP响应头的基本解析过程,实际的HTTP协议规范还涉及到更多的细节和可选的头字段。

通过请求头的响应头的解析了解,这下我们打开浏览器查看开发者工具中的各个状态是不是就会很明了了。

在这里插入图片描述

5.9 Cookie和Session的工作机制及区别

5.9.1 Cookie

  • Cookie是一些网站为了识别用户和跟踪会话而存储在用户本地终端中的文本数据,它可以在用户访问网站时存储和检索信息,以便在用户下次访问该网站时使用。通常,Cookie 用于记录用户的首选项、购物车内容、登录状态等信息。但是请注意,使用 Cookie 也有一些隐私和安全方面的风险,因此网站通常会在使用 Cookie 时要求用户同意。我们在我们的电脑上也可以看到,例如:
    在这里插入图片描述
    而它的工作流程如下:
    在这里插入图片描述

5.9.2 Session

  • Session是指会话控制,是保存在服务器上的一种机制,当客户访问服务器的时候,服务器会把信息以某种形式记录在服务器上,恰恰和Cookie相反。
    它的工作流程如下:
    在这里插入图片描述

5.9.3 cookie与Session的区别

  • Cookie和Session的区别:
    • 存放位置不同,Cookie放在客户端,Session存放在服务端。
    • 存放位置不同导致安全性不同,用户可以任意分析Cookie,而Session在服务端,用户分析不到。
    • 数据存储大小不同,Cookie数据不能超过4k,Session存放在服务端,没有限制。
    • 性能使用情况不同,当访问过多时Session比较占用服务器资源,而Cookie不会。

参考文献

[1] 全能软件测试工程师 . 慕课网

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿山的️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值