HTTP探秘:揭开互联网传输的神秘面纱,让你的网络之旅更顺畅!

为什么要了解 HTTP ?

  • 我们的 WEB 难免要和用户交互,与用户就要制作表单,就要和服务器通讯,和服务器通讯就要用到 HTTP 协议
  • 我们的 创建高品质 WEB 里提到,创建高性能的 WEB,必须要了解 HTTP 协议
  • 面试 WEB 开发,面试官一定会问到好多 HTTP 协议里的内容,比如
    • HTTP 状态码 301 和 302 有什么区别
    • HTTP POST 和 GET 方法有什么区别

HTTP 简介

  • HTTP 协议 是(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准
  • HTTP是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

HTTP 工作原理

  • HTTP 协议工作于客户端-服务端架构为上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求
  • Web服务器有:Nginx 服务器,Apache 服务器,IIS 服务器 ( Internet Information Services ) 等
  • Web服务器根据接收到的请求后,向客户端发送响应信息。
  • HTTP 默认端口号为 80 ,但是你也可以改为 8080 或者其他端口

HTTP 三点注意事项

  1. HTTP是无连接

    • 无连接的含义是限制每次连接只处理一个请求
    • 服务器处理完客户的请求,并收到客户的应答后,即断开连接
    • 采用这种方式可以节省传输时间
  2. HTTP是媒体独立的

    • 这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送
      客户端以及服务器指定使用适合的 MIME-type 内容类型
  3. HTTP是无状态

    • HTTP 协议是无状态协议
    • 无状态是指协议对于事务处理没有记忆能力
    • 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大
    • 另一方面,在服务器不需要先前信息时它的应答就较快

HTTP 范例

我们使用 CURL 发送模拟 GET 请求服务器上的 static/media/hello.txt 文件

shell 命令

curl -v  /static/media/hello.txt

客户端请求信息

GET /static/media/hello.txt HTTP/1.1
Host: www.ddkk.com
User-Agent: curl/7.54.0
Accept: */*

服务端响应

HTTP/1.1 200 OK
Server: Tengine
Date: Sun, 03 Sep 2017 01:08:42 GMT
Content-Type: text/plain
Content-Length: 38
Last-Modified: Sun, 03 Sep 2017 01:08:21 GMT
Connection: keep-alive
ETag: "59ab5605-26"
Strict-Transport-Security: max-age=31536000;includeSubdomains;preload
X-Frame-Options: DENY
Accept-Ranges: bytes

输出结果

你好,世界

HTTP 请求结构

HTTP 是基于客户端(代理)/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议

HTTP 请求过程

  • 一个HTTP 代理(userAgent) 是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的
  • 一个HTTP 服务器(SERVER) 同样也是一个应用程序(通常是一个 Web 服务,如Apache Web 服务器或IIS服务器或 NGINX 等),通过接收客户端的请求并向客户端发送HTTP响应数据
  • HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接
  • 一旦建立连接后,数据消息就通过类似 Internet 邮件所使用的格式 [RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成

请求行(request line)

请求行是请求消息里的第一行数据

GET /static/media/hello.txt HTTP/1.1

请求头部(header)

请求头部为第二行到第一个空行之前所有的内容

Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*

空行

空行就是两个 CRLF

请求数据

请求数据就是空行之后的所有数据

  • 除了 POST 方法和 PUT 方法,其他所有的方法都没有请求数据

HTTP 响应结构

HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

状态行

服务器响应的第一行就是状态行

HTTP/1.1 200 OK

消息报头

从第二行开始到第一个 CRLF CRLF 之前的内容为报头

Server: Tengine
Date: Sun, 03 Sep 2017 01:08:42 GMT
Content-Type: text/plain
Content-Length: 38
Last-Modified: Sun, 03 Sep 2017 01:08:21 GMT
Connection: keep-alive
ETag: "59ab5605-26"
Strict-Transport-Security: max-age=31536000;includeSubdomains;preload
X-Frame-Options: DENY
Accept-Ranges: bytes

CRLF 是回车换行的意思,CRLF CRLF 就是两个回车换行符

空行

空行就是 CRLF CRLF 也就是两个回车换行符 一个回车换行符提供换行,第二个回车换行符则提供了一个空行

响应正文

空行之后的所有内容都是响应正文

你好,世界

HTTP 请求方法

  • 根据HTTP 标准,HTTP 请求可以使用多种请求方法
  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法
  • HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

但目前大部分浏览器只支持 HTTP1.0里的三大方法

目前最新的 HTTP 版本是 HTTP 2.0

幂等 是说这个请求可以重复发送多次相同请求求,会返回相同的响应消息

记住 幂等性非常重要,也是众多面试高频问题,是创建高性能 WEB 服务里最重要的一个概念

POST 方法是非幂等的,所有这个方法有很多妙用

方法是否幂等描述
GET幂等请求指定的页面信息,并返回实体主体
HEAD幂等类似于 GET请求,但只返回响应报头,不返回响应正文
POST非幂等向指定资源提交数据(例如提交表单或者上传文件)数据被包含在请求体中POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT幂等从客户端向服务器传送的数据取代指定的文档的内容
DELETE幂等请求服务器删除指定的页面
CONNECT幂等HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS幂等允许客户端查看服务器的性能
TRACE幂等回显服务器收到的请求,主要用于测试或诊断

HTTP 头部信息

HTTP 请求头提供了关于请求,响应或者其他的发送实体的信息

应答头说明
Allow服务器支持哪些请求方法(如GET、POST等)
Content-Encoding文档的编码(Encode)方法
Content-Length表示响应内容长度
Content-Type表示响应内容属于什么 MIME类型
Date当前的 GMT 时间
Expires指示响应内容过期时间,到了时间就要重新发起请求
Last-Modified指示响应内容最后改动时间
Location表示客户应当到哪里去提取文档
Refresh表示浏览器应该在多少时间之后刷新文档,以秒计
Server服务器名字
Set-Cookie设置和页面关联的Cookie
WWW-Authenticate客户应该在Authorization头中提供什么类型的授权信息

最佳实战

  • Content-Encoding: 利用gzip压缩文档能够显著地减少HTML文档的下载时间
  • Content-Length: 只有当浏览器使用持久HTTP连接时才需要这个数据
  • Content-Type: 通常需要显式地指定为 text/html
  • Last-Modified: 客户可以通过 If-Modified-Since 请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回
    否则返回一个304(Not Modified)状态
  • Refresh: 除了刷新当前文档之外,还可以通过设置响应头部
Refresh:5; URL=http://host/path

让浏览器读取指定的页面
注意这种功能通常是通过设置 HTML 页面 <head> 区的 <meta> 实现

<meta http-equiv="refresh" content="5;URL=http://host/path"

注意Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是

<meta http-equiv="Refresh" ...

注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但目前所有浏览器都支持

  • WWW-Authenticate: 在包含401(Unauthorized)状态行的应答中这个头是必需的

HTTP 应答状态码

当我们访问一个网页时,浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP状态码的 状态行 用以响应浏览器的请求

HTTP 状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。

HTTP状态码共分为5种类型:

HTTP 状态码分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

记住,这5种类型一定要记住,因为通常情况下都会问 1 开头的状态码表示啥意思之类的

HTTP 状态码列表

状态码英文名称描述
100Continue继续,UserAgent 应继续其请求
101Switching Protocols切换协议,服务器根据客户端的请求切换协议,只能切换到更高级的协议;例如:切换到 HTTP2 的新版本协议
200OK请求成功,一般用于GET与POST请求
201Created已创建,成功请求并创建了新的资源
202Accepted已接受,已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息,请求成功,但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容,服务器成功处理,但未返回内容,在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503Service Unavailable因超载或系统维护,服务器暂时无法处理客户端的请求延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

HTTP 内容类型

  • Content-Type 是指内容类型,一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
  • 如果配置了不恰当的 Content-Type 那么访问这些内容的结果就是下载一个文件

HTTP 文件扩展名和内容类型对照表

文件扩展名内容类型
.*application/octet-stream
.tifimage/tiff
.001application/x-001
.301application/x-301
.323text/h323
.906application/x-906
.907drawing/907
.a11application/x-a11
.acpaudio/x-mei-aac
.aiapplication/postscript
.aifaudio/aiff
.aifcaudio/aiff
.aiffaudio/aiff
.anvapplication/x-anv
.asatext/asa
.asfvideo/x-ms-asf
.asptext/asp
.asxvideo/x-ms-asf
.auaudio/basic
.avivideo/avi
.awfapplication/vnd
.biztext/xml
.bmpapplication/x-bmp
.botapplication/x-bot
.c4tapplication/x-c4t
.c90application/x-c90
.calapplication/x-cals
.catapplication/vnd
.cdfapplication/x-netcdf
.cdrapplication/x-cdr
.celapplication/x-cel
.cerapplication/x-x509-ca-cert
.cg4application/x-g4
.cgmapplication/x-cgm
.citapplication/x-cit
.classjava/*
.cmltext/xml
.cmpapplication/x-cmp
.cmxapplication/x-cmx
.cotapplication/x-cot
.crlapplication/pkix-crl
.crtapplication/x-x509-ca-cert
.csiapplication/x-csi
.csstext/css
.cutapplication/x-cut
.dbfapplication/x-dbf
.dbmapplication/x-dbm
.dbxapplication/x-dbx
.dcdtext/xml
.dcxapplication/x-dcx
.derapplication/x-x509-ca-cert
.dgnapplication/x-dgn
.dibapplication/x-dib
.dllapplication/x-msdownload
.docapplication/msword
.dotapplication/msword
.drwapplication/x-drw
.dtdtext/xml
.dwfModel/vnd
.dwfapplication/x-dwf
.dwgapplication/x-dwg
.dxbapplication/x-dxb
.dxfapplication/x-dxf
.ednapplication/vnd
.emfapplication/x-emf
.emlmessage/rfc822
.enttext/xml
.epiapplication/x-epi
.epsapplication/x-ps
.epsapplication/postscript
.etdapplication/x-ebx
.exeapplication/x-msdownload
.faximage/fax
.fdfapplication/vnd
.fifapplication/fractals
.fotext/xml
.frmapplication/x-frm
.g4application/x-g4
.gbrapplication/x-gbr
.application/x-
.gifimage/gif
.gl2application/x-gl2
.gp4application/x-gp4
.hglapplication/x-hgl
.hmrapplication/x-hmr
.hpgapplication/x-hpgl
.hplapplication/x-hpl
.hqxapplication/mac-binhex40
.hrfapplication/x-hrf
.htaapplication/hta
.htctext/x-component
.htmtext/html
.htmltext/html
.htttext/webviewhtml
.htxtext/html
.icbapplication/x-icb
.icoimage/x-icon
.icoapplication/x-ico
.iffapplication/x-iff
.ig4application/x-g4
.igsapplication/x-igs
.iiiapplication/x-iphone
.imgapplication/x-img
.insapplication/x-internet-signup
.ispapplication/x-internet-signup
.IVFvideo/x-ivf
.javajava/*
.jfifimage/jpeg
.jpeimage/jpeg
.jpeapplication/x-jpe
.jpegimage/jpeg
.jpgimage/jpeg
.jpgapplication/x-jpg
.jsapplication/x-javascript
.jsptext/html
.la1audio/x-liquid-file
.larapplication/x-laplayer-reg
.latexapplication/x-latex
.lavsaudio/x-liquid-secure
.lbmapplication/x-lbm
.lmsffaudio/x-la-lms
.lsapplication/x-javascript
.ltrapplication/x-ltr
.m1vvideo/x-mpeg
.m2vvideo/x-mpeg
.m3uaudio/mpegurl
.m4evideo/mpeg4
.macapplication/x-mac
.manapplication/x-troff-man
.mathtext/xml
.mdbapplication/msaccess
.mdbapplication/x-mdb
.mfpapplication/x-shockwave-flash
.mhtmessage/rfc822
.mhtmlmessage/rfc822
.miapplication/x-mi
.midaudio/mid
.midiaudio/mid
.milapplication/x-mil
.mmltext/xml
.mndaudio/x-musicnet-download
.mnsaudio/x-musicnet-stream
.mochaapplication/x-javascript
.movievideo/x-sgi-movie
.mp1audio/mp1
.mp2audio/mp2
.mp2vvideo/mpeg
.mp3audio/mp3
.mp4video/mpeg4
.mpavideo/x-mpg
.mpdapplication/vnd
.mpevideo/x-mpeg
.mpegvideo/mpg
.mpgvideo/mpg
.mpgaaudio/rn-mpeg
.mppapplication/vnd
.mpsvideo/x-mpeg
.mptapplication/vnd
.mpvvideo/mpg
.mpv2video/mpeg
.mpwapplication/vnd
.mpxapplication/vnd
.mtxtext/xml
.mxpapplication/x-mmxp
.netimage/pnetvue
.nrfapplication/x-nrf
.nwsmessage/rfc822
.odctext/x-ms-odc
.outapplication/x-out
.p10application/pkcs10
.p12application/x-pkcs12
.p7bapplication/x-pkcs7-certificates
.p7capplication/pkcs7-mime
.p7mapplication/pkcs7-mime
.p7rapplication/x-pkcs7-certreqresp
.p7sapplication/pkcs7-signature
.pc5application/x-pc5
.pciapplication/x-pci
.pclapplication/x-pcl
.pcxapplication/x-pcx
.pdfapplication/pdf
.pdfapplication/pdf
.pdxapplication/vnd
.pfxapplication/x-pkcs12
.pglapplication/x-pgl
.picapplication/x-pic
.pkoapplication/vnd
.plapplication/x-perl
.plgtext/html
.plsaudio/scpls
.pltapplication/x-plt
.pngimage/png
.pngapplication/x-png
.potapplication/vnd
.ppaapplication/vnd
.ppmapplication/x-ppm
.ppsapplication/vnd
.pptapplication/vnd
.pptapplication/x-ppt
.prapplication/x-pr
.prfapplication/pics-rules
.prnapplication/x-prn
.prtapplication/x-prt
.psapplication/x-ps
.psapplication/postscript
.ptnapplication/x-ptn
.pwzapplication/vnd
.r3ttext/vnd
.raaudio/vnd
.ramaudio/x-pn-realaudio
.rasapplication/x-ras
.ratapplication/rat-file
.rdftext/xml
.recapplication/vnd
.redapplication/x-red
.rgbapplication/x-rgb
.rjsapplication/vnd
.rjtapplication/vnd
.rlcapplication/x-rlc
.rleapplication/x-rle
.rmapplication/vnd
.rmfapplication/vnd
.rmiaudio/mid
.rmjapplication/vnd
.rmmaudio/x-pn-realaudio
.rmpapplication/vnd
.rmsapplication/vnd
.rmvbapplication/vnd
.rmxapplication/vnd
.rnxapplication/vnd
.rpimage/vnd
.rpmaudio/x-pn-realaudio-plugin
.rsmlapplication/vnd
.rttext/vnd
.rtfapplication/msword
.rtfapplication/x-rtf
.rvvideo/vnd
.samapplication/x-sam
.satapplication/x-sat
.sdpapplication/sdp
.sdwapplication/x-sdw
.sitapplication/x-stuffit
.slbapplication/x-slb
.sldapplication/x-sld
.slkdrawing/x-slk
.smiapplication/smil
.smilapplication/smil
.smkapplication/x-smk
.sndaudio/basic
.soltext/plain
.sortext/plain
.spcapplication/x-pkcs7-certificates
.splapplication/futuresplash
.spptext/xml
.ssmapplication/streamingmedia
.sstapplication/vnd
.stlapplication/vnd
.stmtext/html
.styapplication/x-sty
.svgtext/xml
.swfapplication/x-shockwave-flash
.tdfapplication/x-tdf
.tg4application/x-tg4
.tgaapplication/x-tga
.tifimage/tiff
.tifapplication/x-tif
.tiffimage/tiff
.tldtext/xml
.topdrawing/x-top
.torrentapplication/x-bittorrent
.tsdtext/xml
.txttext/plain
.uinapplication/x-icq
.ulstext/iuls
.vcftext/x-vcard
.vdaapplication/x-vda
.vdxapplication/vnd
.vmltext/xml
.vpgapplication/x-vpeg005
.vsdapplication/vnd
.vsdapplication/x-vsd
.vssapplication/vnd
.vstapplication/vnd
.vstapplication/x-vst
.vswapplication/vnd
.vsxapplication/vnd
.vtxapplication/vnd
.vxmltext/xml
.wavaudio/wav
.waxaudio/x-ms-wax
.wb1application/x-wb1
.wb2application/x-wb2
.wb3application/x-wb3
.wbmpimage/vnd
.wizapplication/msword
.wk3application/x-wk3
.wk4application/x-wk4
.wkqapplication/x-wkq
.wksapplication/x-wks
.wmvideo/x-ms-wm
.wmaaudio/x-ms-wma
.wmdapplication/x-ms-wmd
.wmfapplication/x-wmf
.wmltext/vnd
.wmvvideo/x-ms-wmv
.wmxvideo/x-ms-wmx
.wmzapplication/x-ms-wmz
.wp6application/x-wp6
.wpdapplication/x-wpd
.wpgapplication/x-wpg
.wplapplication/vnd
.wq1application/x-wq1
.wr1application/x-wr1
.wriapplication/x-wri
.wrkapplication/x-wrk
.wsapplication/x-ws
.ws2application/x-ws
.wsctext/scriptlet
.wsdltext/xml
.wvxvideo/x-ms-wvx
.xdpapplication/vnd
.xdrtext/xml
.xfdapplication/vnd
.xfdfapplication/vnd
.xhtmltext/html
.xlsapplication/vnd
.xlsapplication/x-xls
.xlwapplication/x-xlw
.xmltext/xml
.xplaudio/scpls
.xqtext/xml
.xqltext/xml
.xquerytext/xml
.xsdtext/xml
.xsltext/xml
.xslttext/xml
.xwdapplication/x-xwd
.x_bapplication/x-x_b
.sisapplication/vnd
.sisxapplication/vnd
.x_tapplication/x-x_t
.ipaapplication/vnd
.apkapplication/vnd
.xapapplication/x-silverlight-app

.* 表示任意文件扩展名

  • 40
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一名技术极客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值