IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 图解HTTP-阅读笔记 -> 正文阅读

[网络协议]图解HTTP-阅读笔记

一、 WEB及网络基础

1. TCP/IP的分层管理
  • 应用层

决定了向用户提供应用服务时通信的活动

  • 传输层

提供处于网络连接中两台计算机之间的数据传输

  • 网络层

处理网络上流动的数据包,数据包是网络传输的最小计数单位,该层规定了通过什么路径到达对方计算机并把数据包传输给对方

  • 数据链路层

用于处理链接网络的硬件部分

分层的好处:

  1. 当某个地方发生改变时,只需要修改相应的层
  2. 设计简单,分工明确
2. TCP/IP通信传输流

image-20220301191558119

传输过程:

  1. 发送端的客户端在应用层发出HTTP请求
  2. 在传输层对数据进行分割打包
  3. 网络层增加通信目的地的MAC地址后转发给链路层
  4. 链路层发送数据
  5. 接收端服务器在链路层接收信息,按照顺序往上层传输,直到接收端应用层

image-20220301192039041

发送端在层与层之间传输数据的过程中,经过一层就打上一层的标签,在接收端,每经过一层就把对应层的标签去除.(这种操作称为封装)

3. IP、TCP、DNS
  • IP协议

IP协议位于网络层,是负责传输的网络协议,IP是一种协议名称,不是IP地址

  • IP地址:节点被分配到的地址

  • MAC地址:网卡所属的固定地址

  • MAC地址可以和IP地址进行配对,但是IP地址可以更换,但是MAC地址不可以更换

IP之间的通信依赖MAC地址,在网络传输数据时,通常经过多台计算机和网络中转设备才能连接到对方,在中转时会利用下一中转设备的MAC地址来搜索下一个中转目标,这时会采用ARP协议(地址解析协议),通过ARP协议,使用对方IP地址来查询对应的MAC地址.

  • TCP协议

TCP位于传输层,提供可靠的字节流服务

  • 字节流服务:为了方便传输,将大报文分割成为以报文段为单位的数据包来进行管理
  • 可靠数据传输:准确的把数据传递给对方

为了确保能准确的把数据送到目标处,会有三次握手策略,在握手过程中使用了TCP标志:SYN和ACK

  1. 发送端在将协议包发送出去后,会发送一个SYN数据包
  2. 接收端接受到数据后,会回传一个SYN/ACK的数据包来传达确认信息
  3. 发送端最后发送一个ACK标志的数据包,表示握手结束(若是传输过程在某处中断,会重新按照相同的顺序来发送相同的数据包)

image-20220301194647958

  • DNS服务

DNS服务位于应用层,提供域名到IP地址之间的解析服务

image-20220301194826215

4. 各种协议与HTTP之间的关系

image-20220301195045219

5. URI&URL
  • URI:统一资源标识符

URI(Uniform Resource Identifier)

  1. Uniform:规定统一的格式来处理不同类型的数据
  2. Resource:可标识的任何东西
  3. Identifier:表示可标识的对象

image-20220301200231892

  • URL

二、简单的HTTP协议

  • HTTP协议用于客户端和服务器端之间的通信

在使用HTTP协议时,必须有一端是客户端,一端是服务器端

  • 发送请求的是客户端
  • 接受请求的是服务器端

在实际情况中,客户端与服务器端的角色可能会互换,但是从一条通信线路来说,客户端和服务器端的角色是确定的

  • 通过请求和响应的交换达成通信

协议规定,请求从客户端发出,最后由服务器端响应请求并返回

  • 从客户端开始建立通信
  • 服务器端在没有接受到请求之前不会发送响应

image-20220301202359511

GET/index.htm HTTP/1.1

  • get:访问服务器的类型
  • index.htm:请求访问的资源对象
  • HTTP/1.1:HTTP版本号,提示客户端使用的HTTP协议功能

请求报文的组成

image-20220301202712805

请求内容的响应结果

image-20220301202811869

  • HTTP/1.1:服务器对应HTTP版本
  • 200 OK:是请求处理结果的状态码和原因短语
  • Date:创建响应的日期时间(是首部字段的一个属性)

image-20220301203203299

  • HTTP是不保存状态的协议

HTTP是不保存状态的协议,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存(即对请求和响应都不做持久化处理)

使用HTTP,每当有新的请求发送时,都会有对应的新的响应产生,协议之前不保存之前一切的请求和响应的信息(为了处理更多的事务,保证协议的可伸缩性)

  • 请求URI定位资源

当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内,指定请求URI的方式有很多:

image-20220301204523945

  • 告知服务器意图的HTTP方法

GET:获取资源,.请求访问已被URI识别的资源,指定的资源经过服务器端的解析后返回响应内容.

  • 举例:

image-20220301204843970

POST:用来传输实体的主体,虽然GET也可以传输实体的主体,但是通常不使用GET来进行传输,而使用POST方法来进行传输,GET和POST功能类似,但是POST的主要目的不是获取响应的主体内容.

  • 举例:

image-20220301205512528

PUT:用于传输文件,类似于FTP.

  • 请求的报文主体中包含文件的内容

  • 保存到请求的URI指定位置

  • 由于HTTP1.1的PUT方法自身不带有验证机制,任何人都可以上传文件,安全性存在问题,所以不经常使用

  • 举例:

image-20220301210014985

HEAD:GET类似,但是不返回报文的主题部分,用于确认URI的有效性和资源的更新日期

  • 举例:

image-20220301210219056

DELETE:删除文件,按照请求的URI删除指定资源,与PUT类似,不安全

  • 举例:

image-20220301210527543

OPTIONS:询问支持的方法,询问针对请求URI指定的资源支持的方法

  • 举例:

image-20220301210654551

TRACE:追踪路径

CONNECT:要求使用隧道协议连接代理,要求与代理服务器进行通信时建立隧道,用隧道协议进行TCP通信.主要使用SSL(Secure Sockets Layer 安全套接层)和TLS(Transport Layer Security 传输层安全)协议把通信内容加密后经网络隧道传输.

  • 请求格式

image-20220301211707502

  • 举例

image-20220301211728806

  • 使用方法下达命令

向URI指定的资源发送请求报文时,采用称为方法的命令,方法的作用在于,可以知情请求的资源按照期望产生某种行为.方法中有GET、PUT等

  • HTTP1.0和HTTP1.1支持的方法

image-20220301212157072

  • 持久连接节省通信量

在HTTP协议的初始版本中每次进行通信都要断开一次TCP连接,在最初传输的文件都是很小的文件,但是随着现在HTTP的普及,文档中包含了大量的图片,当浏览一个包含多个页面的HTML时,在请求页面资源的同时,也会请求HTML中包含的其他资源,因此每次请求都会造成无谓的TCP连接断开,增加通信的开销.

image-20220302090823658

image-20220302090846557

  • 持久连接

为了解决上述问题,在HTTP/1.1和部分HTTP/1.0版本提出了持久连接的思想,也被称为HTTP keep-alive,持久连接的特点是,只要一端没有提出断开连接,则保持TCP连接状态.持久连接的好处在于减少了TCP重复链接和断开所造成的资源的额外开销,使用持久化连接,可以减少额外的开销,减轻服务器负担.

image-20220302091126575

  • 管线化

持久化连接使得管线化的出现,之前发送一个请求,必须得到回应才会发送第二个请求,有了管线化技术,不用等待响应也可以发送下一个请求.

image-20220302091538732

  • 使用Cookie的状态管理

由于HTTP协议是无状态协议,不对之前发生的请求和响应的状态进行管理,但是在进行WEB页面登录认证时,不记录当前的登录状态,每次跳转都需要重新登录,为了解决这个问题,提出了Cookie,Cookie会根据从服务端发送的响应报文中一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端再次向服务端发送请求时,客户端会自动在请求报文中加入Cookie的值,再发送出去.

image-20220302092157118

image-20220302092222216

  • 请求报文(无Cookie)

image-20220302092353466

  • 响应报文(服务端生成的Cookie信息)

image-20220302092427000

  • 请求报文(自动发送保存着的Cookie信息)

image-20220302092503617

三、HTTP报文内的HTTP信息

1. HTTP报文

用于HTTP协议交互的信息称为HTTP报文,请求端发送的称为请求报文,响应端发送的叫响应报文.

image-20220302093305834

2. 请求报文跟响应报文的结构
  • 请求报文

image-20220302093505732

image-20220302093530879

请求报文的首部由以下信息组成:

  • 请求行:包含请求的方法、请求URI和HTTP版本

  • 首部字段:通用首部/请求首部/响应首部/实体首部

  • 响应报文

image-20220302093547028

image-20220302093605636

响应报文的首部

  • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
  • 首部字段:通用首部/请求首部/响应首部/实体首部
3. 编码提升传输速率

HTTP在传输数据时可以按照数据原貌传输,也可以在传输过程中通过编码来提高传输数据的速率.

  • 报文主体和实体主体的差异
  • 报文:HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
  • 实体:作为请求或响应的有效荷载数据被传输,其内容由实体首部和实体主体组成

HTTP报文的主体用于传输请求或响应的实体主体,通常,报文主体等于实体主体,只有在传输中进行编码时,实体主体的内容发生变化,导致与报文主体产生差异.

  • 压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接受并按照编码格式进行解码.

image-20220302102409557

常用的内容编码有以下几种:

  • gzip(GNU zip)
  • compress(UNIX系统标准压缩)
  • deflate(zlib)
  • identity(不进行编码)
  • 分割发送的分块传输编码

在HTTP通信时,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面,传输大容量数据时,通过把数据分成多块,可以让浏览器逐步显示页面.把实体主体分块的功能称为分块传输编码.

image-20220302102936439

分块传输编码会将实体主体分为多个块,每一块用十六进制来标记大小,在实体的最后一块会使用"0"来标记

4. 发送多种数据的多部分对象集合

HTTP协议采纳了多部分对象集合,发送一份报文主体内可以包含多类型实体(类如文本、图片等不同类型的实体)

  • multipart/form-data:在web表单文件上传时使用

image-20220302103726139

在HTTP报文中使用多部分对象集合时,需要在首部字段中加上content-type.使用boundary字符串来划分多部分对象集合指明的各类实体

  • multipart/byteranges:状态码206,响应报文包含了多个范围的内容时使用
5. 获取部分内容的范围请求

指的是从之前下载中断处恢复下载,来避免过去因为网速慢,容易断网而导致的下载中断的问题.

image-20220302104223408

在执行请求范围时,会用到首部字段Range来指定资源的byte范围:

  • 5001-10000字节:Range:bytes=5001-10000
  • 从5001到结尾:Range:bytes=5001-
  • 从一开始到3000,从5000到7000:Range:bytes=0-3000,5000-7000

如果服务器端无法响应范围请求,回返回状态码200 OK和完整的实体内容

6. 内容协商返回最合适的内容

当一个页面存在多种内容,例如一个页面有英文版和中文版,当浏览器默认语言是英文时,返回英文版,当默认是中文时,返回中文版,这种机制称为内容协商.

内容协商机制是指客户端和服务器端就响应的资源进行交涉.提供给客户端最合适的资源,内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准.

以下首部字段为判断的基准

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

内容协商技术分为以下三种

  • 服务器驱动协商(Server-driven Negotiation)

由服务器端进行内容协商,以请求的首部字段作为参考,服务端自动处理

  • 客户端驱动协商(Agent-driven Nagotiation)

由客户端进行内容协商,用户可以从浏览器显示的可选项目列表中进行手动选择,还可以了用JavaScript脚本的方式在Web页面上自动进行上述选择

  • 透明协商(Transparent Negotiation)

服务器驱动和客户端驱动的结合体,由服务器端和客户端各自进行内容协商的一种方法.

四、返回结果的HTTP状态码

1. 状态码告知从服务器端返回的请求结果

HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端处理是否正常,借助状态码,用户可以知道服务器端是正常处理了请求还是出现了错误.

2. 2xx 成功
  • 200 OK

表示客户端的请求被服务端正常处理了

  • 204 No Content

表示服务器接受的请求以处理成功,但是返回的响应报文中不包含实体的主体部分,也不返回任何实体的主体.例如:在浏览器发送请求后,返回204,那么浏览器页面不需要更新

在客户选往服务器端发送信息,而对客户端不需要发送新信息内容的情况下使用.

  • 206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容

3. 3xx 重定向

3xx表示浏览器需要执行某些特殊的处理以正确的处理请求

  • 301 Moved Permanently

永久性重定向,表示请求的资源已经被分配了新的URI,以后使用的资源应该指向新的URI.

  • 302 Found

临时重定向,表示请求的资源已经被分配了新的URI,希望用户本次能够使用新的URI访问.302与301相似,但是301是永久的改变,302是临时的改变以后还可能继续发生改变.

  • 303 See Other

表示请求的对应资源存在另一个新的URI,应使用GET方法定向获取请求的资源.302与303具有相似的功能,但是303明确表示客户端应采用GET方法获取资源.

当301、302、303响应状态码返回时,几乎所有浏览器都会将POST改为GET,并删除请求报文内的主体,之后请求会再次自动发送.

  • 304

该状态码表示客户端发送附带条件的请求时,服务端允许访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务端的资源未改变,可以直接使用客户端未过期的缓存).304状态码返回时,不包含响应的任何主体部分

  • 307 Temporary Redirect

临时重定向,该状态码与302意义相同,307会按照浏览器标准不会将POST改为GET

4. 4xx 客户端错误
  • 400 Bad Request

表示请求的报文中存在语法错误.当错误发生时,需修改请求的内容后再次发送请求

  • 401 Unauthorized(未经授权)

表示发送的请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,若之前已经发起过一次请求,则表示用户认证失败.

image-20220302150216636

返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询用户信息.浏览器初次接收到401响应,会弹出认证用的对话窗口.

  • 403 Forbidden

请求资源的访问被服务器拒绝了.

  • 404 Not Found

服务器上无法找到请求的资源,也可以在服务器拒绝访问但是不想说明理由时使用

5. 5xx 服务器错误
  • 500 Intermal Server Error

服务端在执行请求时发生了错误,可能是web服务器存在bug

  • 503 Service Unavaliable

表示服务端暂时处于超负荷或者停机维护的状态,目前无法处理请求

五、与HTTP协作的Web服务器

1. 代理

代理服务器的作用是接受客户端发送的请求后转发到其他服务器,代理不会改变请求URI,会直接发送给持有资源的目标服务器,持有资源的被称为源服务器,由源服务器返回的响应经过代理服务器后再传递给客户端.

image-20220302152216956

在HTTP通信的过程中,可级联多台代理服务器,请求和转发会经过数台类似锁链一样连接起来的代理服务器,在转发时,需要附加Via首部字段标记出经过的主机信息.

使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,组织针对特定网站的访问控制,以获取日志为主要目的等.

代理的两种方式:

  • 缓存代理

代理转发响应的时候,缓存代理会预先将资源的副本缓存在代理服务器上,当代理再次接收到对应的资源请求时,可以不从源服务器中获取资源,而是将之前缓存的资源作为响应返回.

  • 透明代理

转发请求或者响应的时候.不对报文做任何加工的代理类型被称为透明代理,反之,对报文内容进行加工的代理被称为非透明代理

2. 网关

image-20220302153006526

注:利用网关可以将由HTTP请求转化为其他协议通信

网关的工作机制与代理十分相似,但是网关能使通信线路上的服务器提供非HTTP协议服务,利用网关能提高通信的安全性,因为可以在客户端和网关之间的通信线路上加密以确保安全.

3. 隧道

隧道可以按照要求建立起一条与其它服务器通信的线路,可以使用SSL等加密手段进行通信,隧道的目的是确保客户端能与服务器进行安全的通信,

image-20220302154548901

4. 保存资源的缓存

image-20220302154701611

缓存服务器的优势在于利用缓存可以避免多次从源服务器转发资源,因此客户端就可以从缓存服务器上获取资源,源服务器不必多次处理相同的请求.

  • 缓存的有效期限

image-20220302155005891

  • 客户端的缓存

缓存不仅存在于缓存服务器中,还存在在客户端浏览器中,与缓存代理类似,判定缓存过期后,会向源服务器确认资源的有效性,若缓存失效,浏览器会重新请求资源

六、HTTP首部

1. HTTP报文首部

image-20220302155926691

  • HTTP请求报文

在请求中,HTTP报文由:

  1. 方法
  2. URI
  3. HTTP版本
  4. HTTP首部字段等部分构成

image-20220302160831707

  • HTTP响应报文

在响应中,HTTP报文由:

  1. HTTP版本号
  2. 状态码
  3. HTTP首部字段3部分组成

image-20220302161056525

2. HTTP首部字段
  • HTTP首部字段传递重要信息

使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容

  • HTTP首部字段结构

首部字段名:字段值1,字段值2…

  • 4种HTTP首部字段类型
  1. 通用首部字段:请求报文和响应报文两方都会使用的首部
  2. 请求首部字段:从客户端向服务器端发送请求报文时使用的首部.补充了请求的附加内容、客户端信息、响应内容等相关优先级信息
  3. 响应首部字段:从服务器向客户端返回响应报文时使用的首部.补充了响应的附加内容,也会要求客户端附加额外的内容信息.
  4. 实体首部字段:针对请求和响应的报文实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息
  • HTTP/1.1 首部字段一览
  1. 通用首部字段

image-20220302162049715

  1. 请求首部字段

image-20220302162153730

  1. 响应首部字段

image-20220302162324292

  1. 实体首部字段

image-20220302162418961

  • 非HTTP/1.1首部字段
  1. Cookie
  2. Set-Cookie
  3. Content-Disposition
3. HTTP/1.1通用首部字段
  1. Catch-Control

通过指定首部字段Catch-Control,就能操作缓存的工作机制,指令参数可选,多个指令之间通过’,'分割

image-20220302164508287

  • 缓存请求指令

image-20220302164528730

  • 缓存响应指令

image-20220302164613867

表示是否能缓存的指令:

  1. public:明确表明其他用户也可以利用缓存

  2. private:响应只以特定用户作为对象,缓存服务器会对特定用户提供资源缓存服务,对于其他用户发送的请求,代理服务器则不会返回缓存

  3. no-catch:防止从缓存中返回过期的资源,客户端发送的请求中如果包含no-catch指令,则表示客户端不会接受缓存过的响应,中间的缓存服务器必须把客户端的请求转发给源服务器.如果服务器返回的响应中包含no-catch指令,那么缓存服务器不能对资源进行缓存,源服务器也不会对缓存服务器请求中提出的"资源有效性"进行确认,并且禁止其对响应资源进行缓存操作,在服务器返回的响应中,如果报文首部字段Catch-Control中对no-catch字段名具体指定参数,那么客户端在接收这个被指定的参数值的首部字段对应的响应报文后,就不能使用缓存,对无参数的首部字段可以使用缓存

image-20220302165928875

控制可执行缓存的对象的指令:

  1. no-store:使用no-store指令时,表示请求和对应的响应中包含机密信息,因此该指令规定不能在本地存储缓存请求和响应的任一部分.

指定缓存期限和认证的指令:

  1. max-age(单位:秒):当客户端发送的请求中包含max-age指令时,如果判定缓存时间数值比指定的时间数值小,那么服务端就接收缓存的资源,当指定max-age为0时,那么缓存服务器会将请求转发给服务器.当服务器返回的响应中包含max-age指令的时候,缓存服务器不再对资源有效性做确认,而max-age数值代表资源保存为缓存的最长时间.

image-20220302171111560

  1. s-maxage:功能与max-age相似,但是s-maxage只适用于供多位用户使用的公共缓存服务器.

  2. min-fresh:要求缓存服务器返回在接下来min-fresh指定的时间内还未超过有效期限的资源.例如:当min-fresh指定为60秒,在接下来60秒内超过有效期的资源就无法作为响应返回.

  3. max-stable:表示即使缓存资源过期,也照常接收,如果max-stable没有指定值,那么不管过了多久,客户端都会接受

  4. only-if-cached:要求缓存服务器不重新加载响应,也不会确认资源有效性,当发生请求的缓存服务器的本地缓存无响应,则返回504

  5. must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否有效,若代理无法连通源服务器获取有效资源的话,会给客户端返回504,使用must-revalidate会忽略max-stale.

  6. proxy-revalidate:要求所有缓存服务器在返回包含该指令请求之前,必须再次验证缓存的有效性

  7. no-transforme:无论是在请求或者响应中,缓存都不能改变实体主体的媒体类型,这样可以防止缓存或代理压缩图片等类似的操作.

Catch-Controller扩展:

  1. Catch-extension token:通过该指令可以扩展Catch-Control的首部字段内指令,例如在Catch-Control中没有community这个指令,可以借助extension tokens实现指令的添加,如果缓存服务器不能理解community这个命令,那么会直接忽略该指令
  1. Connection

Connection首部字段具有以下作用:

  1. 控制代理不再转发的首部字段

image-20220302184725219

  1. 管理持久化连接

在HTTP/1.1版本默认都是持久化连接,客户端会在持久连接上连续发送请求.当服务器明确向断开连接时,则指定Connection首部字段的值为Close.

image-20220302185232720

在HTTP/1.1之前的版本的默认连接都是非持久连接,在旧版本的HTTP中保持持续连接,需要指定Connection首部字段的值为Keep-Alive.

image-20220302185429515

  1. Date:表明创建HTTP报文的日期和时间

  2. Pragma

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:52:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:18:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码