当前位置: 首页 > news >正文

前端需要知道的计算机网络知识

1 Web 机制

无论通过有线方式 (通常是网线) 还是无线方式(比如 wifi 或蓝牙),通信需要进行连接,网络上的每台计算机需要链接到路由器(router)。

路由器确保从一台计算机上发出的一条信息可以到达正确的计算机。计算机连接路由器,接着路由器连接路由器,可以通过电话基础设施相互连接,并把网络连接到管理特殊路由器的互联网服务提供商(ISP),这些路由器连接其他 ISP 的路由器。

调制解调器(modem)可以把网络信息变成电话设施可以处理的信息。网络消息可以被 ISP 捕获并发送到相应的网络。

互联网就是由这些所有的网络设施所组成。互联网是基础设施,网络是建立在这种基础设施之上的服务。 

超链接(Hyperlink),通常简称为链接(link)。大多数链接将两个网页相连。而锚将一个网页中的两个段落相连。当点击指向锚点的链接时,浏览器跳转到当前文档的另一部分,而不是加载新文档。内链是自己的网页之间的链接。外链是从自己的网页链接到其他人的网页的链接。传入链接是从其他人的网页链接到自己的网页的链接。链接对网站用户和搜索引擎都很重要,链接的可见文本会影响搜索结果对特定 URL 的搜索。一个网页拥有的链接越多,它在搜索结果中的排名就越靠前。外部链接会影响源网页和目标网页的搜索排名,但具体影响程度尚不清楚。

连接到互联网的计算机被称作客户端服务器。客户端是典型的 Web 用户入网设备(比如连接了 Wi-Fi 的计算机,或接入移动网络的手机)和设备上可联网的软件(比如 Firefox 和 Chrome 的浏览器)。服务器是存储网页,站点和应用的计算机。当一个客户端设备想要获取一个网页时,一份网页的拷贝将从服务器上下载到客户端机器上来在用户浏览器上显示。

网络服务器(web server):一台托管一个或多个网站的计算机。可以代指硬件或软件,或者是它们协同工作的整体。硬件部分是一台存储了 web 服务器软件以及网站的组成文件(比如,HTML 文档、图片、CSS 样式表和 JavaScript 文件)的计算机。它接入到互联网并且支持与其他连接到互联网的设备进行物理数据的交互。软件部分包括控制网络用户如何访问托管文件的几个部分,至少是一台 HTTP 服务器。一台 HTTP 服务器是一种能够理解 URL和 HTTP的软件。一个 HTTP 服务器可以通过它所存储的网站域名进行访问,并将这些托管网站的内容传递给最终用户的设备。

静态 web 服务器(static web server)由一个计算机(硬件)和一个 HTTP 服务器(软件)组成。称它为“静态”是因为这个服务器把它托管文件的“保持原样”地传送到你的浏览器。

动态 web 服务器(dynamic web server)由一个静态的网络服务器加上额外的软件组成,最普遍的是一个应用服务器和一个数据库。称它为“动态”是因为这个应用服务器会在通过 HTTP 服务器把托管文件传送到你的浏览器之前会对这些托管文件进行更新。

严格来说,可以在自己的计算机上托管所有的这些文件,但专用的 web 服务器上有以下优势:

  • 专用 web 服务器可用性更强(会一直启动和运行)
  • 除去停机时间和系统故障,专用 web 服务器总是连接到互联网。
  • 专用 web 服务器可以一直拥有一样的 IP 地址,这也称为专有 IP 地址(不是所有的 ISP 都会为家庭线提供一个固定的 IP 地址)
  • 专用 web 服务器往往由第三方提供者维护

网页(webpage):一份能够显示在网络浏览器(如 Firefox,,Google Chrome,Microsoft Internet Explorer 或 Edge,Apple 的 Safari)上的文档。网页也常被称作"web pages"(网页)或者就叫"pages"(页面)。浏览器也能显示其他文档,例如 PDF 文件或图像,但网页(webpage)专指 HTML 文档。其他情况使用文档(document)。

网站(website):网站是共享唯一域名的相互链接的网页的集合。网站常被称作"web site"(网站)或简称"site"(站点)。当网站只包含一个网页时,可称之为单页网站(single-page website)。

搜索引擎(search engine):帮助寻找其他网页的网站,比如 Google,Bing,或 Yahoo。

CMS(内容管理系统,content management system)是一个允许用户发布、组织、修改、删除多种类型的内容的软件。CMS 不仅支持文本,还可以嵌入图片、视频、音频和互动的代码。

2 协议体系结构

协议(Protocol)是定义了数据如何在计算机内和之间进行交换的规则的系统。设备之间通信要求设备接受正在交换的数据的格式。定义格式的一组规则称之为协议。

OSI体系结构顺口溜:物联网叔会试用

物理层:主要任务是在物理媒体上实现比特流的透明传输。主要解决二进制数据到信号之间的互转问题。

  • 功能:定义接口特性、传输模式单工/半双工/双工)、传输速率,实现比特同步比特编码
  • 工作设备:集线器、中继器。

数据链路层:网络层传下来的数据报组装成帧作用是将数据在一个子网(广播域)内有效传输。

  • 功能:成帧(定义帧的开始和结束)、差错控制帧错+位错)、流量控制访问(接入)控制 控制对信道的访问);
  • 工作设备:网桥、交换机。

网络层分组IP数据报)从源主机传到目的主机点到点,为分组交换网上的不同主机提供通信服务。主要解决如何定位目标以及如何寻找最优路径的问题。

  • 功能:路由选择最佳路径)、流量控制差错控制拥塞控制
  • 协议:IP/ARP地址解析协议根据IP获取物理地址
  • 工作设备:路由器。

输层:负责主机中「两个进程」的通信,即「端到端」的通信。传输单位是报文段或用户数据报主要面向传输过程。

  • 功能:可靠传输TCP)或不可靠传输UDP)、差错控制流量控制复用分用
  • 复用:多个应用层进程可同时使用下面传输层的服务
  • 分用:传输层把收到的信息分别交付给上面应用层中相应的进程

会话层: 向表示层实体/用户进程提供「建立链接」并在连接上「有序」「传输」数据。这是会话,也是建立「同步(SYN)」功能:

  • 建立、管理、终止会话
  • 使用校验点可使会话在通信失效时从校验点/同步点继续恢复通信,实现数据同步(适用于传输大文件)

表示层:用于处理两个通信系统中交换信息的表示方式(语义和语法)。功能:数据格式交换加密解密压缩和恢复

应用层:所有能和用户交互产生网络流量的程序。典型的网络应用:域名系统(DNS)、文件传输(FTP)电子邮件(SMTPPOP3万维网(HTTP)面向互联网中的具体应用场景相关的消息格式。

        发送消息时,消息从上到下进行打包,每一层会在上一层的基础上加包,而接受消息时,从下到上进行解包,最终得到原始信息。

分层的意义:利用分成的思想将复杂的问题简单化。

3 TCP 和 UDP

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 会校验包的交付。TCP 确保字节流在接收时维持它们的发送顺序。TCP 使用三次握手来建立连接和四次握手来中断连接。

用户数据报协议(UDP,User Datagram Protocol,又称用户数据包协议)是一种简单的面向数据包的无连接的传输层通信协议。用于在传输速度和效率比安全性和可靠性更重要的场合下发送数据。UDP 使用校验和保证数据完整性,使用端口号以区分数据发送方和接收方中不同的应用程序。它无需握手会话,即将不可靠的底层网络直接暴露给了用户的应用程序:不保证消息交付、不保证交付顺序也不保证消息不重复。

UDP 的协议栈避免了处理差错和纠错的开销。对时间敏感的应用程序通常使用 UDP,因为丢弃数据包比等待数据包重传(可能不是实时操作系统可接受的选项)更可取。

3.1 TCP和UDP的异同

(两者的异同即定义,因此直接列出异同)同为传输层协议;异:

  • TCP面向连接(可靠),UDP无连接(不可靠)
  • TCP面向字节流,UDP面向数据报
  • TCP支持1对1,UDP支持1对多、多对一、多对多
  • TCP首部开销大(20字节),UDP首部开销小(8字节)
  • TCP使用流量和拥塞控制,UDP不使用。
  • TCP可靠传输应用(文件传输、远程登录),UDP实时应用(IP电话,视频会议,直播)’

        当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP是更好的选择。当强调传输性能而不是传输的完整性时,UDP是更好的选择。

3.2 TCP三次握手

第一次握手:客户端进行连接请求——发送SYN= j包(SYN表示连接请求),进入SYN_SEND状态,等待服务端确认(服务端确认:自己接收正常,对方发送正常

第二次握手:服务端同意连接请求,返回SYN-ACK包,SYN(等于j表示是确认了该客户端的连接请求) 、 ACK =1 (等于1表示有效ACK包,用于验证服务端到客户端通信是否正常)、 seq = y(服务端起始序列号) 、ack = x+1(确认号,期望收到的下一个数据的开头),进入SYN-RCVD状态,等待客户端确认(客户端确认:自己发送接收正常,对方发送接收正常

第三次握手:客户端收到确认包,发送ACK包,ACK=1,seq = x+1, ack = y + 1,发送完毕即双方进入ESTABLISHD 状态(服务端确认:自己发送正常,对方接收正常

三次握手的目的就是双方确认自己与对方发送和接收是正常。

3.3 TCP四次挥手

第一次挥手:客户端发送一个断开连接的 FIN 报文:FIN=1(表示断开连接)、seq=u,主动关闭连接,进入FIN-WAIT1状态,等待服务端确认。

第二次挥手:服务端收到FIN报文,返回ACK报文:ACK = 1、ack= u + 1,seq = v,服务端进入CLOSE_WAIT 状态,此时客户端到服务端的连接释放。而客户端收到这个确认报文后进入FIN_WAIT2(终止等待2)状态(等待服务端的连接释放报文)

第三次挥手 服务端发送一个断开连接的 FIN 报文:FIN=1(表示断开连接)、ACK=1、seq=w、ack=u+1,主动关闭连接,进入LAST-ACK状态,等待客户端的确认。

第四次挥手:客户端收到服务端的FIN 报文后,返回确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。等待2MSL时间后客户端进入CLOSE状态(1.ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK  2.使本连接持续的时间内所产生的所有报文段都从网络中消失)。

四次挥手的原因:服务端收到FIN报文时,很可能仍然有数据发送,因此服务端返回的确认客户端FIN报文的ACK报文需要和服务端断开连接的FIN报文分开发送。

3.4 TCP的可靠传输

流量控制:通过滑动窗口限制发送方的发送速率来保证接收方来得及接收实现流量控制,其中滑动窗口的大小由接收方返回的确认报文中的窗口大小字段来决定。

差错控制:检验报文段首部和数据的检验和检验和有差错的报文进行丢弃和不确认

超时重传:发送方超过定时器时间未收到确认即进行重传

重复丢弃:接收端对重复报文段只确认一次,其余丢弃

ARQ(自动重传请求):1. 停止等待ARQ 2. 连续ARQ

区别在于前者发送方每发送一个报文段后即等待确认确认报文段丢失丢弃发送方发送重复消息,不向上层交付并再发送方发送确认消息确认报文段迟到 :发送方收到重复的确认和接收方收到重复的消息都直接丢弃。,而后者发送方连续发送,接收方进行累计确认

拥塞控制:采用慢开始(初始值为1,指数段)、拥塞避免(线性段)、快重传快恢复策略,具体过程:慢开始到初始门限值ssthresh后进入拥塞避免端直到拥塞(标志:三个重复 ACK),先优先快重传丢失的报文段,然后更新ssthresh门限值为拥塞的一半,后续报文段进入快恢复(初始值为新ssthresh门限值)阶段继续拥塞避免(线性段)

4 DNS

DNS(Domain Name System)域名系统,是一个层次化、分散化的互联网连接资源命名系统。DNS 维护着一个域名列表以及与之相关联的资源(即 IP 地址)。

域名是在互联网的网站的地址。域名被用于URL识别一个服务器属于哪个特定的网站。域名包含由句号点(”.“)分隔的标签(名称)的分级序列并以TLD作为结尾,不同于中文书写顺序,它需要从右到左阅读。二级域 (SLD,Secondary Level Domain)是刚好位于 TLD 前面的标签。一个域名可以有多个标签(或者说是组件、名称),没有强制规定必须要 3 个标签来构成域名。

TLD(顶级域)是互联网分层 DNS(域名系统)中最通用的域,且是作为域名的最后一个组成部分。顶级域既可以包含拉丁字母,也可以包含特殊字符。顶级域名最长可以达到 63 个字符,为了使用方便,大多数顶级域都是两到三个字符。ICANN(互联网名称与数字地址分配机构)指定组织来管理每个 TLD。根据管理组织的严格程度,TLD 通常可以作为网站目的、所有权或国籍的线索。IANA 区分了以下几组顶级域:

  • 国家/地区代码顶级域 (ccTLD,country-code top-level domains):为国家或地区建立的二字符域。
  • 国际化国家代码顶级域 (IDN c​​cTLD):非拉丁字符集(例如阿拉伯语或中文)的 ccTLD。
  • 通用顶级域 (gTLD):具有三个或更多字符的顶级域。
  • 非赞助顶级域:直接根据 ICANN 流程为全球互联网社区制定的政策运营的域,例如“com”和“edu”。
  • 赞助顶级域:由私人组织提议和赞助,这些组织根据社区主题概念决定申请人是否有资格使用 TLD。
  • 基础设施顶级域:该组仅由一个域组成,即地址和路由参数区域 (arpa), 尤其是用于反向 DNS 查找。

DNS 最突出的功能是将易于记忆的域名翻译成为数字化的IP地址;从域名到 IP 地址的映射过程被称为DNS 查询(DNS lookup)。而DNS 反向查询(rDNS)用来找到与 IP 地址对应的域名。

DNS 数据库存储在全球每个 DNS 服务器上,所有这些服务器都源于 (refer to) 几个被称为“权威名称服务器”或“顶级 DNS 服务器”。只要您的注册商创建或更新给定域名的任何信息,信息就必须在每个 DNS 数据库中刷新。知道给定域名的每个 DNS 服务器都会存储一段时间的信息,然后再次刷新(DNS 服务器再次查询权威服务器)。因此,知道此域名的 DNS 服务器需要些时间才能获取最新信息,这个时间一般被称为传播时间。然而这个术语是不精准的,因为更新本身没有传播 (top → down)。被计算机(down) 查询的 DNS 服务器只在它需要的时候才从权威服务器 (top) 中获取信息。

选择www 或非 www URL 作为其中之一作为规范域名,保证所有绝对链接都应使用它。同时,HTTP 允许使用两种技术,当无法预测用户会在浏览器地址栏使用哪个 URL时,以便让用户或搜索引擎清楚地知道哪个域是规范域,同时仍然允许非规范域正常工作并提供预期的页面:

  1. 在需要对接收 HTTP 请求的服务器进行配置,使其对任何指向非规范域的请求作出带指向规范域的HTTP Location首部的 HTTP 301 响应。这将把试图访问非规范 URL 的浏览器重定向到其规范等效域。
  2. 为两个域提供相同的内容,向页面添加<link rel="canonical" href="">元素指示页面的规范地址。这对用户没有影响,但会告诉搜索引擎爬虫页面的实际位置。这样,搜索引擎就不会多次索引同一个页面,避免将其视为重复内容或垃圾邮件甚至将页面从搜索引擎结果页面中删除或降级。与前一种情况不同,浏览器历史记录会将非 www 和 www URL 视为独立条目。

DNS使用TCP和UDP的情况:

  • 使用TCP:辅域名服务器会定时(一般3小时)向主域名服务器查询数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送使用TCP是因为传送的数据量比一个请求/应答的数据量要多得多,而且需要保证数据的准确性
  • 使用UDP:目的是避免使用 TCP 协议造成的连接时延。因为得到一个域名的 IP 地址,往往会向多个域名服务器查询,如果使用 TCP 协议,那么每次请求都会存在连接时延,会使得 DNS 服务变得很慢,导致网页等待时间过长。

5 URI、URL、URN

URI(统一资源标识符,Uniform Resource Identifier)是一个用于标识(区分)互联网资源的字符串,允许用户对网络中的资源通过特定的协议进行交互操作。URI只支持ASCII 码,对于非ASCII码和界定符(比如空格)编码转为“%十六进制字节值”

                 

URI示例

scheme(或protocol)是方案(或协议),常见协议有:

  1. data:Data URIs;即前缀为 data: 协议的 URL,其允许内容创建者向文档中嵌入小文件。 现代浏览器将 Data URL 视作唯一的不透明来源,是不可以用于导航的 URL。由四个部分组成:data:[<mediatype>][;base64],<data>。使用场景:1. CSS url();2. img元素src;3. link元素href。Opera 11 浏览器限制 URL 最长为 65535 个字符,这意味着 data URL 最长为 65529 个字符(如果你使用纯文本 data:,而不是指定一个 MIME 类型的话,那么 65529 字符长度是编码后的长度,而不是源文件)。Firefox 97 及更高版本支持高达 32MB 的数据 URL(在 97 之前,限制接近 256MB)。Chromium 支持到超过 512MB 的 URL,Webkit(Safari)支持到超过 2048MB 的 URL。
    1. data::前缀。
    2. [<mediatype>]:可选,指示数据类型的MIME类型字符串。如果被省略,则默认值为 text/plain;charset=US-ASCII。
    3. [;base64]:如果非文本则为可选的base64标记。在 Windows 中,PowerShell 的 Convert.ToBase64String 可用于执行 Base64 编码:
      • [convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))
    4. <data>:数据本身。如果数据包含RFC 3986中定义为保留字符的字符或包含空格符、换行符或者其他非打印字符,这些字符必须进行百分号编码(又名“URL 编码”)。如果数据是文本类型,可以直接将文本嵌入(根据文档类型,使用合适的实体字符或转义字符)。否则,可以指定base64标记来嵌入 base64 编码的二进制数据。data字段是没有结束标记的,所以尝试在data URL后面添加查询字符串(特定于页面的参数,语法为 <url>?parameter-data)会导致查询字符串也一并被当作data字段。
  2. file:指定主机上文件的名称;
  3. ftp:文件传输协议;
  4. http、https:超文本传输协议、安全的超文本传输协议;
  5. mailto:电子邮件地址;
  6. ssh:安全shell;
  7. tel:电话
  8. urn:统一资源名称;
  9. view-source:资源的源代码;
  10. ws、wss:WebSocket连接。

#fragment(或Anchor)是资源本身的某一部分的一个锚点。# 号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器。

URI可以分为URL(统一资源定位符,Uniform Resource Locator)和URN(永久统一资源定位符,Uniform Resource Name),URN通过特定命名空间中的唯一名称来标识资源。URL示例:

6 绝对路径、相对路径

当前资源是指资源当前所处的html文件或CSS文件

目标资源是在当前资源中取访问的一个其他资源。

        绝对路径则是与当前资源的path无关。比如当前资源是http://b.com/some/something?id=1,其中path是some/something?id=1h1:

  • http://b.com/list 即http://b.com/list
  • 省略协议://b.com/list 即协议名沿用当前资源的协议,即http://b.com/list
  • 省略协议,域名,端口:/list 省略即 http://b.com/list
  • / 即 http://b.com/

        绝对路径的使用场景

  1. 站外资源只能使用绝对路径:iconfont的css、站外图片、站外链接等;(站外资源是指非当前网站的资源,站内资源指的是当前网站的资源)。
  2. 当前资源和目标资源的相对位置不稳定或不明确,且目标资源的path是稳定的,推荐绝对路径:用户上传的图片地址、多地址的页面引入同一目标资源等。

        相对路径则是相对于当前资源的path的路径。比如当前资源是http://b.com/some/something?id=1#h1path为域名后面的部分,path目录为最后一个斜杠之前的部分,因此

  • ./list 即http://b.com/some/list
  • ../list 即http://b.com/list
  • list 即 http://b.com/some/list
  • ?id=2 即 http://b.com/some/something?id=2
  • #h2 即 http://b.com/some/something?id=1#h2

        相对路径的使用场景:当前资源与目标资源的相对位置稳定且明确,开发中大部分场景均适用。

7 媒体类型(MIME)

媒体类型(Multipurpose Internet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。其语法结构为type/subtype,由类型type与子类型subtype两个字符串中间用'/'分隔而组成,不允许空格存在。type 表示可以被分多个子类的独立类型或Multipart类型,subtype 表示细分后的每个类型。

独立类型

  1. text:表明文件是普通文本,理论上是人类可读,比如text/plain, text/html, text/css, text/javascript。对于 text 文件类型若没有特定的 subtype,就使用 text/plain,文本文件默认值。即使它意味着未知的文本文件,但浏览器认为是可以直接展示的。text/plain并不是意味着某种文本数据。如果浏览器想要一个文本文件的明确类型,浏览器并不会考虑他们是否匹配。比如说,如果通过一个表明是下载 CSS 文件的<link>链接下载了一个 text/plain 文件。如果提供的信息是 text/plain,浏览器并不会认出这是有效的 CSS 文件。CSS 类型需要使用 text/css。
  2. image:表明是某种图像。不包括视频,但是动态图(比如动态 gif)也使用 image 类型,比如image/gif,image/png、image/jpeg、image/bmp、image/webp、image/x-icon、image/vnd.microsoft.icon。
  3. audio:表明是某种音频文件,比如audio/midi、audio/mpeg、audio/webm、audio/ogg、audio/wav。
  4. video:表明是某种视频文件,比如video/webm, video/ogg。
  5. application:表明是某种二进制数据,比如application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf。二进制文件没有特定或已知的 subtype,即使用application/octet-stream,这是应用程序文件的默认值。意思是未知的应用程序文件,浏览器一般不会自动执行或询问执行。浏览器会像对待 设置了HTTP 头Content-Disposition 值为 attachment 的文件一样来对待这类文件。

Multipart 类型:表示细分领域的文件类型的种类,经常对应不同的 MIME 类型。这是复合文件的一种表现方式。

浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。Web上重要的 MIME 类型:

  1. text/plain:文本(通常为 ASCII 或 ISO 8859- n)(.txt)。
  2. text/css: 层叠样式表(CSS)(.css)。在网页中要被解析为 CSS 的任何 CSS 文件必须指定 MIME 为text/css。通常,服务器不识别以.css 为后缀的文件的 MIME 类型,而是将其以 MIME 为text/plain 或 application/octet-stream 来发送给浏览器:在这种情况下,大多数浏览器不识别其为 CSS 文件,直接忽略掉。特别要注意为 CSS 文件提供正确的 MIME 类型。
  3. text/html:超文本标记语言(HTML)(.htm或.html)。所有的 HTML 内容都应该使用这种类型。XHTML 的其他 MIME 类型(如application/xml+html)现在基本不再使用。但如果打算使用 XML 的严格解析规则,使用 <![CDATA[...]]> 或非 HTML、非 SVG 或非 MathML XML 命名空间中的元素,则仍需要使用 application/xml 或 application/xhtml+xml,因为 text/html 的解析语义与 application/xml 的解析语义存在微妙的不兼容。
  4. text/calendar:日历格式(.ics)。
  5. text/javascript:JavaScript(.js)。据 HTML 标准,应该总是使用 MIME 类型 text/javascript 服务 JavaScript 文件。其他值不被认为有效,使用那些值可能会导致脚本不被载入或运行。即便任何给定的 user agent 可能支持这些中的任意或所有,你只应该使用 text/javascript。它是唯一确保能在目前和以后正常工作的 MIME 类型。
  6. text/javascript:JavaScript 模块(.mjs)。
  7. text/csv:逗号分隔值(CSV)(.csv) 。
  8. image/gif:图形交换格式(GIF)(.gif)。
  9. image/vnd.microsoft.icon:图标格式(.ico)。
  10. image/bmp:Windows OS/2位图图形(.bmp)。
  11. image/jpeg:JPEG 图像(.jpeg .jpg)。
  12. image/png:便携式网络图形(.png)。
  13. image/tiff:标记图像文件格式(TIFF)(.tif .tiff)。
  14. image/svg+xml:可缩放矢量图形(SVG)(.svg)。
  15. image/webp: 网页图像(.webp)。
  16. font/otf:OpenType 字体(.otf)。
  17. font/ttf:TrueType字体(.ttf)。
  18. font/woff:Web 开放字体格式 (WOFF)(.woff)。
  19. font/woff2:Web 开放字体格式 (WOFF)(.woff2)。
  20. audio/midi 或audio/x-midi:乐器数字接口 (MIDI)(.mid或.midi)。
  21. audio/ogg:奥格音频(.oga)。采用 OGG 多媒体文件格式的音频文件。Vorbis 是这个多媒体文件格式最常用的音频解码器。
  22. audio/mpeg:MP3音频(.mp3)。
  23. audio/wav:波形音频格式(.wav )。音频流媒体文件。一般支持 PCM 音频编码
  24. audio/webm: 网络管理音频(.weba)。WebM 音频文件格式。Vorbis 和 Opus 是其最常用的解码器。
  25. audio/aac:AAC音频(.aac)。
  26. video/x-msvideo:AVI音频视频交错(.avi)。
  27. video/ogg:奥格视频(.ogv)。采用 OGG 多媒体文件格式的音视频文件。常用的视频解码器是 Theora;音频解码器为 Vorbis。
  28. video/mpeg:MPEG视频(.mpeg)。
  29. video/webm: 网络视频(.webm)。采用 WebM 视频文件格式的音视频文件。VP8 和 VP9 是其最常用的视频解码器。Vorbis 和 Opus 是其最常用的音频解码器。
  30. video/3gpp audio/3gpp(若不含视频):3GPP音频/视频容器(.3gp)。
  31. video/3gpp2 audio/3gpp2(若不含视频):3GPP2音频/视频容器(.3g2)。
  32. application/x-abiword:AbiWor文档(.abw)。
  33. application/x-freearc:存档文档,嵌入多个文件(.arc)。
  34. application/vnd.amazon.ebook:亚马逊Kindle电子书格式(.azw)。
  35. application/octet-stream:任何类型的二进制数据(.bin)。
  36. application/x-bzip:BZip 存档(.bz)。
  37. application/x-bzip2:BZip2存档(.bz2)。
  38. application/x-csh:C-Shell脚本(.csh)。
  39. application/java-archive:Java存档 (JAR)(.jar)。
  40. application/msword:微软Word(.doc)。
  41. application/vnd.openxmlformats-officedocument.wordprocessingml.document:微软Word (OpenXML)(.docx)。
  42. application/vnd.ms-fontobject:MS 嵌入式OpenType字体(.eot)。
  43. application/epub+zip:电子出版物(EPUB)(.epub)。
  44. application/json:JSON格式(.json)。
  45. application/ld+json:JSON-LD 格式(.jsonld)。
  46. application/vnd.apple.installer+xml:苹果安装包(.mpkg)。
  47. application/vnd.oasis.opendocument.presentation:OpenDocument演示文档(.odp)。
  48. application/vnd.oasis.opendocument.spreadsheet:OpenDocument电子表格(.ods)。
  49. application/vnd.oasis.opendocument.text:OpenDocument文本文档(.odt)。
  50. application/ogg:奥格(.ogx)。采用 OGG 多媒体文件格式的音视频文件。常用的视频解码器是 Theora;音频解码器为 Vorbis。
  51. application/pdf:Adobe便携式文档格式(PDF)(.pdf)。
  52. application/vnd.ms-powerpoint:微软PowerPoint(.ppt)。
  53. application/vnd.openxmlformats-officedocument.presentationml.presentation:微软PowerPoint (OpenXML)(.pptx)。
  54. application/x-rar-compressed:RAR存档(.rar)。
  55. application/rtf:富文本格式(RTF)(.rtf)。
  56. application/x-sh:Bourne shell脚本(.sh)。
  57. application/x-shockwave-flash:小型网页格式(SWF) 或 Adobe Flash 文档(.swf)。
  58. application/x-tar:磁带存档(TAR)(.tar)。
  59. application/vnd.visio:微软Visio (.vsd)。
  60. application/xhtml+xml: XHTML(.xhtml)。
  61. application/vnd.ms-excel:微软Excel(.xls)。
  62. application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:Microsoft Excel (OpenXML)(.xlsx)。
  63. application/xml:XML代码对普通用户来说不可读 (RFC 3023, section 3) text/xml 代码对普通用户来说可读 (RFC 3023, section 3)(.xml)。
  64. application/vnd.mozilla.xul+xml:选择(.xul)。
  65. application/zip:ZIP存档(.zip)。
  66. application/x-7z-compressed:7-zip存档(.7z)。
  67. multipart/form-data:将完整的 HTML 表单的值从浏览器发送到服务器时,可以使用 multipart/form-data 类型。作为多部分文档格式,它由不同部分组成,由边界(以双破折号”--”开头的字符串)分隔。每个部分都是其自己的实体,具有自己的 HTTP 标头、Content-Disposition 和用于文件上传字段的 Content-Type。
  68. multipart/byteranges:用于把部分的响应报文发送回浏览器。当发送状态码206 Partial Content 时,这个 MIME 类型用于指出这个文件由若干部分组成,每个部分对应一个请求的范围。

8 HTTP

超文本传输协议(HTTP,Hypertext Transfer Protocol 是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。

相关文章:

前端需要知道的计算机网络知识

1 Web 机制 无论通过有线方式 (通常是网线) 还是无线方式&#xff08;比如 wifi 或蓝牙)&#xff0c;通信需要进行连接&#xff0c;网络上的每台计算机需要链接到路由器&#xff08;router&#xff09;。 路由器确保从一台计算机上发出的一条信息可以到达正确的计算机。计算机…...

[2023杭电多校5 1005] Snake (生成函数)

题意 有 n n n 个标号为 1 , 2 , ⋯ , n 1,2,\cdots,n 1,2,⋯,n 的球&#xff0c;放到 m m m 个无标号盒子 (盒内顺序有标号)&#xff0c;且每个盒子球数不超过 k k k&#xff0c;求方案数对 998 244 353 998\,244\,353 998244353 取模。 1 ≤ m , k ≤ n ≤ 1 0 6 1 \le…...

【MyBtis】各种查询功能

目录 【MyBtis】配置和映射 11.1 示例:实现表数据的增、删、改、查 1.创建工程mybatis_DML demo 2.创建数据库操作的工具类&#xff1a;DBOperatorMgr.java 3.创建映射接口 4.创建XML映射文件 5.测试 【MyBtis】配置和映射 MyBatis 的真正强大之外在于它的映射语句&#xf…...

H5打包封装小程序系统开发

H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤&#xff1a; 准备工作&#xff1a;首先&#xff0c;需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行&#xff0c;并且没有依赖于浏览器特…...

SpringBoot集成jasypt,加密yml配置文件

SpringBoot集成jasypt&#xff0c;加密yml配置文件 一、pom配置二、生成密文代码三、配置3.1、yml加密配置3.2、密文配置3.3、启动配置3.4、部署配置 四、遇到的一些坑 最新项目安全检测&#xff0c;发现配置文件中数据库密码&#xff0c;redis密码仍处理明文状态 一、pom配置…...

【C++】模板(初阶)

1、泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础 2、函数模板 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定类型版本…...

windows下的txt文档,传到ubuntu后,每行后面出现^M,怎么处理?

问题背景&#xff1a;windows下pycharm生成的txt文档&#xff0c;传到ubuntu后&#xff0c;每行后面出现^M 用vim打开显示 使用cat -A filename显示如下 参考https://www.lmlphp.com/user/16697/article/item/579325/给出的几种方法 方法一、dos2unix filename。服务器没装…...

LabVIEW FPGA开发实时滑动摩擦系统

LabVIEW FPGA开发实时滑动摩擦系统 由于非线性摩擦效应的建模和补偿的固有困难&#xff0c;摩擦系统的运动控制已被广泛研究。最近&#xff0c;人们更加关注滑动动力学和滑动定位&#xff0c;作为传统机器人定位的低成本和更灵活的驱动替代方案。摩擦控制器设计和适当选择基础…...

Prometheus服务器、Prometheus被监控端、Grafana、Prometheus服务器、Prometheus被监控端、Grafana

day03 day03Prometheus概述部署Prometheus服务器环境说明&#xff1a;配置时间安装Prometheus服务器添加被监控端部署通用的监控exporterGrafana概述部署Grafana展示node1的监控信息监控MySQL数据库配置MySQL配置mysql exporter配置mysql exporter配置prometheus监控mysql自动…...

常见的锁策略(面试八股文)

1.乐观锁vs悲观锁 乐观锁&#xff1a;预测该场景中不太会出现锁冲突的情况。&#xff08;后续做的工作会更少&#xff09; 悲观锁&#xff1a;预测该场景非常容易出现锁冲突&#xff08;后续做的工作会更多&#xff09; 锁冲突&#xff1a;多个线程同时尝试去获得同一把锁&…...

SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、保活包

SO_KEEPALIVE SO_KEEPALIVE 是一个套接字选项&#xff0c;用于设置是否启用 keepalive 机制。在这段代码中没有涉及到 SO_KEEPALIVE 选项的设置。 当 SO_KEEPALIVE 被设置为非零值时&#xff0c;表示启用 keepalive 机制。keepalive 是一种用于检测连接是否仍然有效的机制。通…...

【phaser微信抖音小游戏开发005】画布上添加图片

特别注意&#xff1a;真机模拟的时候&#xff0c;尽量使用网络图片资源&#xff0c;不要在小程序源文件里面使用图片&#xff0c;会出现真机加载不成功&#xff0c;小程序包体积过大的问题。我们学习过程中&#xff0c;只是作为演示使用。 推荐使用场景&#xff1a; 背景图片…...

【设计模式——学习笔记】23种设计模式——外观模式Facade(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入介绍基本介绍类图出场角色 案例实现案例一类图代码实现 案例二类图代码实现 外观模式在Mybatis源码中的应用总结文章说明 案例引入 在家庭影院中&#xff0c;要享受一场电影&#xff0c;需要如下步骤&#xff1a; 直接用遥控器&#xff1a;统筹各设备开关开…...

消息队列 -提供上层服务接口

目录 前言封装数据库封装内存操作内存的设计思想 应答模式 代码实现测试代码 前言 我们之前已经将 数据库 的操作 和文件的操作 都完成了, 但是对于上层调用来说, 并不关心是于数据库中存储数据还是往文件中存储数据, 因此 我们提供一个类, 封装一下 上述俩个类中的操作, 并将…...

maven引入本地jar包的简单方式【IDEA】【SpringBoot】

前言 想必点进来看这篇文章的各位&#xff0c;都是已经习惯了Maven从中央仓库或者阿里仓库直接拉取jar包进行使用。我也是&#x1f921;&#x1f921;。 前两天遇到一个工作场景&#xff0c;对接三方平台&#xff0c;结果对方就是提供的一个jar包下载链接&#xff0c;可给我整…...

【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密

声明&#xff1a;本文只作学习研究&#xff0c;禁止用于非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 【爬虫逆向案例】某易云音乐&#xff08;评论&#xff09;js逆向—— params、encSecKey解密 1、前言2、行动…...

【uni-app】【Android studio】手把手教你运行uniapp项目到Android App

运行到Android App基座 选择运行到Android App基座 选择运行项目 1、连接手机&#xff0c;在手机上选择 传输文件。 2、打开 设置-> 关于本机 -> 版本信息->连续点击4-5次版本号 &#xff0c;输入手机密码&#xff0c;系统就进入了开发者模式。 3、设置 > 其他设…...

多线程(JavaEE初阶系列6)

目录 前言&#xff1a; 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语&#xff1a; 前言&#xff1a; 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下&#xff0c;那么这节中小编将分享一下多线程中的线程池。给大家讲解一…...

shell清理redis模糊匹配的多个key

#!/bin/bash# 定义Redis服务器地址和端口 REDIS_HOST"localhost" REDIS_PORT6380# 获取匹配键的数量 function get_matching_keys() {local key_pattern"$1"redis-cli -h $REDIS_HOST -p $REDIS_PORT -n 0 KEYS "$key_pattern" }# 删除匹配的键 …...

【电网异物检测硕士论文摘抄记录】电力巡检图像中基于深度学习的异物检测方法研究

根据国家电力行业发展报告统计&#xff0c;截止到 2018 年&#xff0c;全国电网 35 千伏及以上的输电线路回路长度达到 189 万千米&#xff0c;220 千伏及以上输电线路回路长度达73 万千米。截止到 2015年&#xff0c;根据国家电网公司的统计 330 千伏及以上输电线路故障跳闸总…...

C++共享数据的保护

虽然数据隐藏保护了数据的安全性&#xff0c;但各种形式的数据共享却又不同程度地破坏了数据的安全。因此&#xff0c;对于既需要共享有需要防止改变的数据应该声明为常量。因为常量在程序运行期间不可改变&#xff0c;所以可以有效保护数据。 1.常对象 常对象&#xff1a;它…...

MyBatisPlus学习记录

MyBatisPlus(简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提高效率 MyBatisPlus简介 入门案例 创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息选择当前模块需要使用的技术集&#xff08;仅选择MySQL …...

如何开启一个java微服务工程

安装idea IDEA常用配置和插件&#xff08;包括导入导出&#xff09; https://blog.csdn.net/qq_38586496/article/details/109382560安装配置maven 导入source创建项目 修改项目编码utf-8 File->Settings->Editor->File Encodings 修改项目的jdk maven import引入…...

libhv之hio_t分析

上一篇文章解析了fd是怎么与io模型关联。其中最主要的角色扮演者&#xff1a;hio_t 1. hio_t与hloop的关系 fd的值即hio_t所在loop ios变量中所在的index值。 hio_t ios[fd] struct hloop_s { ...// ios: with fd as array.index//io_array保存了和hloop关联的所有hio_t&…...

C语言的转义字符

转义字符也叫转移序列&#xff0c;包含如下&#xff1a; 转移序列 \0oo 和 \xhh 是 ASCII 码的特殊表示。 八进制数示例&#xff1a; 代码&#xff1a; #include<stdio.h> int main(void) {char beep\007;printf("%c\n",beep);return 0; }结果&#xff1a; …...

【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!

CloudStudio体验真正的现代化开发方式&#xff0c;双手插兜不知道什么叫对手&#xff01; 文章目录 CloudStudio体验真正的现代化开发方式&#xff0c;双手插兜不知道什么叫对手&#xff01;前言出现的背景一、CloudStudio 是什么&#xff1f;二、CloudStudio 的特点三、CloudS…...

Pandas时序数据分析实践—时序数据集

1. 跑步运动为例&#xff0c;对运动进行时序分析 时序数据是指时间序列数据&#xff0c;是按照时间顺序排列的数据集合&#xff0c;每个数据点都与一个特定的时间戳相关联。在跑步活动中&#xff0c;我们可以将每次跑步的数据记录作为一个时序数据样本&#xff0c;每个样本都包…...

use strict 是什么意思?使用它区别是什么?

use strict 是什么意思&#xff1f;使用它区别是什么&#xff1f; use strict 代表开启严格模式&#xff0c;这种模式下使得 JavaScript 在更严格的条件下运行&#xff0c;实行更严格解析和错误处理。 开启“严格模式”的优点&#xff1a; 消除 JavaScript 语法的一些不合理…...

常见OOM异常分析排查

常见OOM异常分析排查 Java内存溢出Java堆溢出原因解决思路总结 Java内存溢出 java堆用于存储对象实例,如果不断地创建对象,并且保证GC Root到对象之间有可达路径,垃圾回收机制就不会清理这些对象,对象数量达到最大堆的容量限制后就会产生内存溢出异常. Java堆溢出原因 无法在…...

kubernetes网络之网络策略-Network Policies

Kubernetes 中&#xff0c;Network Policy&#xff08;网络策略&#xff09;定义了一组 Pod 是否允许相互通信&#xff0c;或者与网络中的其他端点 endpoint 通信。 NetworkPolicy 对象使用标签选择Pod&#xff0c;并定义规则指定选中的Pod可以执行什么样的网络通信&#xff0…...