HTTP 教程

HTTP/HTTPS 简介 

HTTP(Hypertext Transfer Protocol,超文本传输协议)和 HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是用于在网络中传输信息的两种主要协议。它们定义了客户端和服务器之间如何发送请求和响应的标准。

HTTP

定义:HTTP 是一种应用层协议,专门用于从万维网传输超文本(如 HTML 页面)到客户端浏览器。

端口:通常使用 80 端口。

工作方式:基于请求-响应模式,客户端向服务器发送请求,服务器返回响应,传输的数据可以是 HTML 文件、图片、查询结果等。

缺点:HTTP 协议本身没有提供任何加密机制,意味着传输的数据容易被窃听或篡改。

HTTPS

定义:HTTPS 是 HTTP 的安全版本,增加了 SSL(Secure Sockets Layer)或其升级版本 TLS(Transport Layer Security)协议,以确保数据的加密传输。

端口:通常使用 443 端口。

工作方式:HTTPS 在 HTTP 的基础上引入 SSL/TLS 协议来加密数据,确保通信的机密性、完整性和服务器身份的认证。这意味着即使数据被截取,也无法被解读或篡改。

优点:提供了三重安全保障:

  • 加密:防止数据在传输过程中被窃听。
  • 完整性校验:确保数据在传输过程中不被篡改。
  • 身份验证:验证服务器的身份,确保客户端连接的是合法的服务器。

HTTP 与 HTTPS 的对比

  • 数据安全:HTTP 是不安全的,传输数据未加密,容易被窃听。HTTPS 通过加密保护数据传输的安全性。
  • 速度:HTTPS 由于使用了加密和解密机制,相比 HTTP 可能稍慢,但现代硬件和网络已经使这种差异微乎其微。
  • SEO 优势:搜索引擎更倾向于支持使用 HTTPS 的网站,这也是大多数网站逐步向 HTTPS 过渡的原因之一。

综上,HTTPS 是 HTTP 的更安全版本,在现代网络中被广泛使用,特别是在需要保护敏感信息的场景,如电子商务和在线银行业务。

HTTP 工作原理

HTTP(Hypertext Transfer Protocol)协议基于客户端-服务器架构,工作过程通常可以分为以下几个步骤:

  1. 客户端发起请求:用户在浏览器中输入 URL 或点击链接,客户端(如浏览器)向服务器发起一个 HTTP 请求。请求包含了方法(如 GET、POST 等)、请求的资源路径、HTTP 版本、请求头等信息。
  2. 服务器处理请求:服务器接收到请求后,分析请求的类型和资源路径。服务器根据请求的类型(如获取资源、提交表单数据等)进行相应的处理,例如读取文件、执行动态脚本等。
  3. 服务器返回响应:服务器将处理后的结果封装为 HTTP 响应消息,通常包含响应状态码(如 200 OK)、响应头、以及响应的内容(如 HTML 文件、JSON 数据、图片等),并将其发送回客户端。
  4. 客户端渲染页面:客户端接收到服务器的响应后,解析响应内容,并根据响应内容渲染页面,展示给用户。例如,如果服务器返回的是 HTML 文件,浏览器会渲染网页内容。

HTTP 的主要特点

  • 无连接:HTTP 是无连接的协议,即每次客户端和服务器之间的连接只处理一个请求。处理完毕后,连接会自动断开。这种设计节约了服务器的资源,但每次新的请求都需要重新建立连接。为了提高效率,HTTP/1.1 引入了持久连接(keep-alive),允许多个请求在同一连接上处理。
  • 媒体独立:HTTP 是媒体独立的,意味着它可以传输任何类型的数据,只要客户端和服务器能够理解。通过 HTTP 头中的 Content-Type 和 Accept 字段,客户端和服务器可以协商传输的数据格式。
  • 无状态:HTTP 是无状态协议,意味着每次请求都是独立的,服务器不会记住之前的请求信息。这虽然提高了协议的简洁性,但也导致每次请求时都需要重新传输相关状态信息。为了解决这一问题,可以通过使用 Cookie、Session 等机制来保持状态。

cgiarch

HTTPS 的作用

HTTPS(Hypertext Transfer Protocol Secure)主要用于在不安全的网络环境中创建一个安全的通信信道。其核心作用包括:

  • 数据加密:HTTPS 使用 SSL/TLS 协议对传输的数据进行加密,确保数据在传输过程中的机密性,防止被窃听或篡改。这对于保护用户的敏感信息(如密码、信用卡信息等)至关重要。
  • 身份验证:HTTPS 通过使用数字证书来验证网站的身份。只有获得受信任的证书颁发机构(CA)签发的有效证书的网站才能被认为是安全的。这意味着用户可以信任他们访问的网站是真实的,而不是伪装的。
  • 数据完整性:HTTPS 确保数据在传输过程中不被修改或损坏。即使数据被截取,攻击者也无法更改信息而不被发现。
  • 防止中间人攻击:HTTPS 通过加密和身份验证机制有效防止中间人攻击(MITM),即攻击者在客户端和服务器之间窃听或篡改通信。

HTTPS 的信任机制

HTTPS 的信任基于操作系统中预安装的证书颁发机构(CA):

  • 浏览器实现:浏览器必须正确实现 HTTPS,并能处理证书的验证。
  • 受信任的 CA:证书颁发机构仅信任合法网站,并对其进行验证。
  • 有效的证书:被访问的网站必须提供一个有效的证书,该证书需由受信任的 CA 签发。大部分浏览器会对无效的证书发出警告。
  • 域名匹配:证书必须正确验证被访问的网站。例如,访问 https://www.example.com 时,服务器必须提供签发给 www.example.com 的证书,而不是其他域名的证书。

 HTTP 消息结构

HTTP 是基于客户端/服务器(C/S)架构的无状态请求/响应协议,HTTP 消息是客户端与服务器之间通信的核心,它们按特定的格式进行信息交换。HTTP 消息分为两种:请求消息和响应消息。

客户端请求消息结构

客户端请求消息由以下四个部分组成:

1、请求行(Request Line): 请求行定义了请求的操作,包括以下几部分:

  • 请求方法:用于指定操作的类型,如 GET、POST、PUT、DELETE 等。
  • 请求 URI:统一资源标识符(Uniform Resource Identifier),标识客户端请求的资源路径(如 /index.html)。
  • HTTP 版本:指定使用的 HTTP 协议版本,如 HTTP/1.1 或 HTTP/2。
GET /index.html HTTP/1.1

2、请求头(Request Headers): 请求头包含与客户端环境、传输数据相关的信息。常见的请求头包括:

  • Host:服务器的主机地址(例如:Host: www.example.com)。
  • User-Agent:客户端的用户代理信息(例如:浏览器的类型和版本)。
  • Accept:客户端支持的响应类型(如 Accept: text/html)。
  • Content-Length:请求体的长度(如果存在请求体)。
  • Accept-Encoding:客户端支持的内容编码(如 gzip,用于压缩)。

3、空行: 请求头结束后必须包含一个空行,表示请求头的结束和请求体的开始。

4、请求体(可选): 请求体用于在某些请求方法中(如 POST 和 PUT)包含客户端要发送的数据,例如表单数据或 JSON 数据。对于 GET 请求,通常不包含请求体。

POST /submit-form HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 27username=john&password=1234

服务器响应消息结构

服务器接收客户端请求后,会返回一个响应消息,该消息包含以下四个部分:

1、状态行(Status Line): 状态行定义了服务器的响应状态,包括以下内容:

HTTP 版本:与请求中的 HTTP 版本一致。

状态码:三位数字,表示请求的处理结果。例如:

  • 200 OK:请求成功。
  • 404 Not Found:请求的资源未找到。
  • 500 Internal Server Error:服务器内部错误。

状态信息:对状态码的简短描述。

HTTP/1.1 200 OK

2、响应头(Response Headers): 响应头包含与服务器、响应内容有关的元数据。常见的响应头包括:

  • Content-Type:返回内容的 MIME 类型(如 text/html,application/json)。
  • Content-Length:响应体的长度。
  • Server:服务器的信息(如 Apache/2.4.41 (Ubuntu))。
  • Set-Cookie:设置客户端的 Cookie。

3、空行: 响应头结束后必须包含一个空行,表示响应头的结束。

4、响应体(可选): 响应体包含服务器返回给客户端的实际数据,例如网页的 HTML、图片、视频、JSON 数据等。对于某些状态码(如 204 No Content 或 304 Not Modified),响应体可以为空。

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Server: Apache/2.4.41 (Ubuntu)<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

HTTP 消息的工作流程

  1. 客户端发送请求消息:客户端(如浏览器)向服务器发送一个请求,包含请求行、请求头和(可选的)请求体。
  2. 服务器处理请求:服务器根据请求行中指定的资源路径和方法进行相应的处理。
  3. 服务器返回响应消息:服务器处理完成后,将状态行、响应头和(可选的)响应体打包成响应消息返回给客户端。
  4. 客户端处理响应:客户端接收并解析服务器返回的响应消息,通常会根据响应内容渲染网页或处理数据。

重要特性

  • 无连接:每次请求处理完成后,连接会被关闭,除非使用了 keep-alive 头来保持连接。
  • 无状态:服务器不保留请求之间的状态,因此每次请求都是独立的。为了维持会话,可以使用 Cookie 或 Session。

HTTP 请求方法

HTTP 请求方法定义了客户端与服务器之间的通信方式,主要用于指定请求的操作类型。不同的 HTTP 方法用于处理资源的不同操作,常见的 HTTP 请求方法包括:

1. GET
  • 描述:从服务器获取指定资源的请求,通常用于请求数据而不对数据进行任何修改。
  • 应用场景:加载网页、获取图片、文件等。
  • 特点:请求体为空,请求参数通常包含在 URL 中。
2. POST
  • 描述:向服务器发送数据以创建新的资源。
  • 应用场景:表单提交、上传文件、创建新用户等。
  • 特点:请求数据包含在请求体中,POST 请求不是幂等的,即多次相同请求可能产生不同的结果。
3. PUT
  • 描述:向服务器发送数据以更新现有资源,如果资源不存在则创建。
  • 应用场景:更新用户信息、替换文件等。
  • 特点:PUT 是幂等的,多次相同的请求会产生相同的效果。
4. DELETE
  • 描述:从服务器删除指定资源。
  • 应用场景:删除用户、文件或其他资源。
  • 特点:通常不可恢复,慎用。
5. PATCH
  • 描述:对资源进行部分修改。
  • 应用场景:修改某些字段而不是整个资源,例如更新用户的某个字段。
  • 特点:只修改资源的部分数据,常用于小规模更新。
6. HEAD
  • 描述:与 GET 类似,但服务器只返回响应的头部信息,不返回实际的数据。
  • 应用场景:用于检查资源是否存在或查看资源的元数据。
  • 特点:常用于优化,减少带宽消耗。
7. OPTIONS
  • 描述:返回服务器支持的 HTTP 方法列表。
  • 应用场景:用于检查服务器支持哪些 HTTP 方法,常用于跨域资源共享(CORS)的预检请求。
  • 特点:用于查询服务器端功能,返回允许的方法。
8. TRACE
  • 描述:回显服务器收到的请求,主要用于诊断网络或路径问题。
  • 应用场景:调试和测试,查看请求在服务器中的处理路径。
  • 特点:通常被禁用,防止安全漏洞。
9. CONNECT
  • 描述:用于建立与服务器的隧道,常用于 HTTPS 连接。
  • 应用场景:HTTPS 的 TLS/SSL 隧道建立。
  • 特点:建立加密的隧道,用于安全通信。

各个 HTTP 版本中的请求方法

HTTP/1.0
  • 方法:GET、POST、HEAD。
  • 特点:只定义了最基本的请求方法,主要用于获取资源、提交数据和获取响应头信息。
HTTP/1.1
  • 方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
  • 特点:引入了更多的请求方法,如 PUT、DELETE 等,增加了更多控制服务器端资源的能力。
HTTP/2
  • 方法:沿用了 HTTP/1.1 的方法。
  • 特点:优化了传输效率和速度,引入了多路复用、头部压缩、服务器推送等新特性,但请求方法与 HTTP/1.1 保持一致。
HTTP/3
  • 方法:与 HTTP/2 相同。
  • 特点:基于 QUIC 协议实现,使用 UDP 代替 TCP,进一步提高了传输速度和可靠性。

HTTP 响应头信息

HTTP 响应头信息是服务器在响应客户端的HTTP请求时发送的一系列头字段,它们提供了关于响应的附加信息和服务器的指令。

响应头信息(英文)响应头信息(中文)描述
Date日期响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT
Server服务器服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)
Content-Type内容类型响应体的媒体类型(MIME类型),如text/html; charset=UTF-8application/json等。
Content-Length内容长度响应体的大小,单位是字节。例如:3145
Content-Encoding内容编码响应体的压缩编码,如 gzipdeflate等。
Content-Language内容语言响应体的语言。例如:zh-CN
Content-Location内容位置响应体的 URI。例如:/index.html
Content-Range内容范围响应体的字节范围,用于分块传输。例如:bytes 0-999/8000
Cache-Control缓存控制控制响应的缓存行为, 如 no-cache 表示必须重新请求。
Connection连接管理连接的选项,如keep-aliveclose,keep-alive 表示连接不会在传输后关闭。。
Set-Cookie设置 Cookie设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure
Expires过期时间响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT
Last-Modified最后修改时间资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT
ETag实体标签资源的特定版本的标识符。例如:"33a64df551425fcc55e6"
Location位置用于重定向的 URI。例如:/newresource
Pragma实现特定的指令包含实现特定的指令,如 no-cache
WWW-Authenticate认证信息认证信息,通常用于HTTP认证。例如:Basic realm="Access to the site"
Accept-Ranges接受范围指定可接受的请求范围类型。例如:bytes
Age经过时间响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24
Allow允许方法列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等
Vary变化告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept
Strict-Transport-Security严格传输安全指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains
X-Frame-Options框架选项控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN
X-Content-Type-Options内容类型选项指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff
X-XSS-ProtectionXSS保护控制浏览器的 XSS 过滤和阻断。例如:1; mode=block
Public-Key-Pins公钥固定HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime

HTTP 状态码

HTTP 状态码是服务器在接收到客户端请求后,用于告知请求状态的三位数代码。它们帮助客户端了解请求是否成功,以及如果失败,了解原因。

HTTP 状态码的英文为 HTTP Status Code

下面是常见的 HTTP 状态码:

  • 1xx(信息性状态码):表示接收的请求正在处理。
  • 2xx(成功状态码):表示请求正常处理完毕。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。

HTTP 状态码分类

HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599):

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

HTTP状态码列表:

状态码状态码英文名称中文描述
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
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 字段指定的预期行为。
418I'm a teapot状态码 418 实际上是一个愚人节玩笑。它在 RFC 2324 中定义,该 RFC 是一个关于超文本咖啡壶控制协议(HTCPCP)的笑话文件。在这个笑话中,418 状态码是作为一个玩笑加入到 HTTP 协议中的。
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

HTTP content-type

Content-Type 是 HTTP 消息头的一部分,用来告诉客户端(浏览器或其他客户端程序)返回的数据的媒体类型和编码格式。根据这个头信息,客户端可以正确地解释和显示返回的数据。

语法格式:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

实例:

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式

以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml: XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/pdf:pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:

  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

HTTP content-type 对照表

文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type)
.*( 二进制流,不知道下载文件类型)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.adobe.workflow.biztext/xml
.bmpapplication/x-bmp.botapplication/x-bot
.c4tapplication/x-c4t.c90application/x-c90
.calapplication/x-cals.catapplication/vnd.ms-pki.seccat
.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.dwf.dwfapplication/x-dwf
.dwgapplication/x-dwg.dxbapplication/x-dxb
.dxfapplication/x-dxf.ednapplication/vnd.adobe.edn
.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.fdf
.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.ms-project.mpevideo/x-mpeg
.mpegvideo/mpg.mpgvideo/mpg
.mpgaaudio/rn-mpeg.mppapplication/vnd.ms-project
.mpsvideo/x-mpeg.mptapplication/vnd.ms-project
.mpvvideo/mpg.mpv2video/mpeg
.mpwapplication/vnd.ms-project.mpxapplication/vnd.ms-project
.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.adobe.pdx.pfxapplication/x-pkcs12
.pglapplication/x-pgl.picapplication/x-pic
.pkoapplication/vnd.ms-pki.pko.plapplication/x-perl
.plgtext/html.plsaudio/scpls
.pltapplication/x-plt.pngimage/png
.pngapplication/x-png.potapplication/vnd.ms-powerpoint
.ppaapplication/vnd.ms-powerpoint.ppmapplication/x-ppm
.ppsapplication/vnd.ms-powerpoint.pptapplication/vnd.ms-powerpoint
.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.ms-powerpoint.r3ttext/vnd.rn-realtext3d
.raaudio/vnd.rn-realaudio.ramaudio/x-pn-realaudio
.rasapplication/x-ras.ratapplication/rat-file
.rdftext/xml.recapplication/vnd.rn-recording
.redapplication/x-red.rgbapplication/x-rgb
.rjsapplication/vnd.rn-realsystem-rjs.rjtapplication/vnd.rn-realsystem-rjt
.rlcapplication/x-rlc.rleapplication/x-rle
.rmapplication/vnd.rn-realmedia.rmfapplication/vnd.adobe.rmf
.rmiaudio/mid.rmjapplication/vnd.rn-realsystem-rmj
.rmmaudio/x-pn-realaudio.rmpapplication/vnd.rn-rn_music_package
.rmsapplication/vnd.rn-realmedia-secure.rmvbapplication/vnd.rn-realmedia-vbr
.rmxapplication/vnd.rn-realsystem-rmx.rnxapplication/vnd.rn-realplayer
.rpimage/vnd.rn-realpix.rpmaudio/x-pn-realaudio-plugin
.rsmlapplication/vnd.rn-rsml.rttext/vnd.rn-realtext
.rtfapplication/msword.rtfapplication/x-rtf
.rvvideo/vnd.rn-realvideo.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.ms-pki.certstore
.stlapplication/vnd.ms-pki.stl.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.visio.vmltext/xml
.vpgapplication/x-vpeg005.vsdapplication/vnd.visio
.vsdapplication/x-vsd.vssapplication/vnd.visio
.vstapplication/vnd.visio.vstapplication/x-vst
.vswapplication/vnd.visio.vsxapplication/vnd.visio
.vtxapplication/vnd.visio.vxmltext/xml
.wavaudio/wav.waxaudio/x-ms-wax
.wb1application/x-wb1.wb2application/x-wb2
.wb3application/x-wb3.wbmpimage/vnd.wap.wbmp
.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.wap.wml
.wmvvideo/x-ms-wmv.wmxvideo/x-ms-wmx
.wmzapplication/x-ms-wmz.wp6application/x-wp6
.wpdapplication/x-wpd.wpgapplication/x-wpg
.wplapplication/vnd.ms-wpl.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.adobe.xdp.xdrtext/xml
.xfdapplication/vnd.adobe.xfd.xfdfapplication/vnd.adobe.xfdf
.xhtmltext/html.xlsapplication/vnd.ms-excel
.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.symbian.install.sisxapplication/vnd.symbian.install
.x_tapplication/x-x_t.ipaapplication/vnd.iphone
.apkapplication/vnd.android.package-archive.xapapplication/x-silverlight-app

MIME 类型

MIME 类型(Multipurpose Internet Mail Extensions)是一种标准,用于描述文档、文件或字节流的性质和格式。浏览器通过 MIME 类型来确定如何处理 URL 中的内容,而不是简单依赖文件扩展名。Web 服务器在发送 HTTP 响应时,会在头部包含 MIME 类型信息,这有助于浏览器正确解析和显示文件。

MIME 类型的结构

MIME 类型由 type/subtype 组成,表示文件的大类(type)和具体的子类型(subtype)。例如:

  • text/html:表示 HTML 文件。
  • image/jpeg:表示 JPEG 图像。

类型和子类型之间使用斜杠分隔,MIME 类型大小写不敏感,但通常小写。

常见的 MIME 类型

一些常用 MIME 类型如下:

  • text/plain:普通文本文件(.txt
  • text/html:HTML 文件(.html, .htm
  • application/pdf:PDF 文件(.pdf
  • image/jpeg:JPEG 图像(.jpg, .jpeg
  • audio/mpeg:MPEG 音频文件(.mp3
  • video/mp4:MP4 视频文件(.mp4

常见 MIME 类型列表

类型/子类型文件扩展名描述
text/plain.txt普通文本文件
text/html.html, .htmHTML 文件
application/pdf.pdfPDF 文件
image/jpeg.jpeg, .jpgJPEG 图像
audio/mpeg.mp3MPEG 音频文件
video/mp4.mp4MP4 视频文件
application/zip.zipZIP 压缩文件
image/png.pngPNG 图像
application/x-gzip.gzGZIP 压缩文件
application/vnd.ms-excel.xlsMicrosoft Excel 文件
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.xlsxExcel 文档格式 (Office Open XML)

默认 MIME 类型

  • text/plain:对于普通文本文件的默认 MIME 类型。
  • application/octet-stream:如果无法确定 MIME 类型时的默认二进制数据类型。

重要性

如果 Web 服务器配置错误,未正确指定 MIME 类型,浏览器可能无法解析文件内容,导致文件无法正常加载或下载。这就是为什么在开发和部署 Web 应用程序时,确保 MIME 类型的正确性至关重要。

HTTP2

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接), HTTP/2 是 HTTP 协议的第二个主要版本,用于在 Web 服务器和客户端之间传输数据。

HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 的改进版 RFC 发布后的首个更新,主要基于 SPDY 协议。

多数主流浏览器已经在 2015 年底支持了该协议。

HTTP/2是一种网络协议,是HTTP/1.1的升级版,由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。


HTTP/2 特点

下面是 HTTP/2 的一些特点和改进之处:

  • 多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1 一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。

  • 二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。

  • 头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。

  • 服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。

  • 改进的安全性:HTTP/2 默认使用 TLS(Transport Layer Security)加密传输数据,提高了安全性。

  • 兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1 共存,服务器可以同时支持 HTTP/1.1 和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。

总的来说,HTTP/2在性能、安全性和可用性方面都有显著的改进,可以使 Web 应用更加快速、高效和可靠。

对数据传输采用多路复用,让多个请求合并在同一 TCP 连接内,如下图所示:

HTTP/2 减少网络延迟,提高浏览器的页面加载速度:

HTTP/2 使用二进制格式来传输数据,而不是像 HTTP/1.1 一样使用文本格式。这提高了效率并降低了数据传输的延迟。

HTTP/2 使用头部压缩来减少传输数据的大小。这有助于减少网络带宽的使用量,并提高页面加载速度。

HTTP/2 允许服务器在不被请求的情况下主动向客户端发送数据。这有助于减少请求延迟,并提高页面加载速度。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145062.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

10.1 溪降技术:通讯

目录 10.1 通讯概述观看视频课程电子书&#xff1a;通讯视觉信号想象一下…… 声音信号总结 10.1 通讯 概述 两名队友讨论下一个跳点 溪降是一项团队活动&#xff0c;需要团队成员之间良好的沟通。由于溪降所处的环境特性&#xff0c;往往使得声音通讯变得困难。环境可能非常嘈…

自动化测试常用函数

目录 一、元素的定位 1、cssSelector 2、xpath &#xff08;1&#xff09;xpath 语法 1、获取HTML页面所有的节点 2、获取HTML页面指定的节点 3、获取一个节点中的直接子节点 4、获取一个节点的父节点 5、实现节点属性的匹配 6、使用指定索引的方式获取对应的节点内容…

欧美海外仓系统有哪些服务商选择?

在跨境电商的全球化浪潮中&#xff0c;欧美市场以其成熟的电商生态和庞大的消费群体&#xff0c;成为了众多跨境卖家竞相争夺的高地。为了提升物流效率、降低成本并增强客户体验&#xff0c;海外仓成为了不可或缺的一环。而海外仓系统的选择&#xff0c;则直接关系到仓库的运营…

排序-----选择排序

首先介绍几种排序的分类&#xff1a; 选择排序是每次都遍历&#xff0c;标记出最小的元素&#xff0c;然后把它放在前面。 本文介绍优化后的版本&#xff1a;每次遍历标记出最小的和最大的元素&#xff0c;分别放到前面和后面。&#xff08;注意这里是找到对应的下标&#xff0…

数据结构与算法——Java实现 6.递归

要学会试着安静下来 —— 24.9.17 一、递归的定义 计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集 说明: ① 自己调用自己&#xff0c;如果说每个函数对应着一种解决方案&#xff0c;自己调用自己意味着解决方案是…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

jdk版本更换以及遇到的问题略谈(以jdk1.8和jdk11为例)

目录 在我看来 遇到的问题 原因以及解决方法 方法一&#xff1a;禁止误改误删 方法二&#xff1a;bat文件驱动运行 方法三&#xff1a;cmd命令 方法四&#xff1a;修改注册表&#xff08;不推荐&#xff09; 最近在进行漏洞复现&#xff08;shiro550&#xff09;的时候&…

DAY20信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

2.自动化-网络空间-AsamF 1.去GitHub上下载项目之后使用CMD打开 2.输入命令AsamF_windows_amd64.exe -v生成配置文件 3.AsamF会在~/.config/asamf/目录下生成config.json文件 C:\Users\Acer\.config\asamf 5.根据文档输入命令去查询所需信息&#xff08;已经没有用了&#x…

jeecg自定义sql查询,并使用高级查询的参数

jeecg框架的高级查询界面如下 后台代码&#xff1a; controller层&#xff1a; GetMapping(value "/list")public Result<IPage<Receiver>> queryPageList(Receiver receiver,RequestParam(name"pageNo", defaultValue"1") Integ…

进程和线程问题解答

线程和进程的概念、区别 进程是操作系统进行资源分配的基本单位&#xff0c;拥有独立的地址空间&#xff0c;包括代码、数据、堆、栈等。进程间的切换开销较大。 线程是进程中的一个执行单元&#xff0c;是系统中最小的执行单位&#xff0c;共享进程的资源&#xff0c;如代码…

Python类及元类的创建流程

Python类及元类的创建流程 代码运行结果再看type和object的关系和约定type和object具有的方法不一样看代码和运行结果&#xff0c;可以完全理解python的执行过程。再补充几点&#xff0c; 代码 class MetaCls(type):print(0>>>, MetaCls, 0)def __init__(self, name,…

基于微型5G网关的酒店服务机器人应用

智能机器人在酒店中已经越来越常见&#xff0c;并且也是提升客户体验、提高服务效率的重要工具。然而&#xff0c;尽管这些机器人在自动化服务方面可以发挥着重要作用&#xff0c;但它们仍然面临着一些通信、组网和在线管理方面的痛点。 针对这些难题&#xff0c;可以通过部署微…

Python边界值测试工具:生成指定大小文件

在进行软件测试的过程中&#xff0c;经常会有文件上传功能的需求&#xff08;例如头像上传、商品图上传等&#xff09;&#xff0c;这时候就需要考虑文件大小的边界值&#xff0c;例如只可上传1-2MB的图片&#xff0c;5-10MB的文件&#xff0c;想要验证需求的话&#xff0c;就需…

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上&#xff0c;使用预训练的ViT-B/16模型&#xff0c;VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示&#xff0c;当给出大量提示时&#xff0c;VPT显示了性能的显著下降…

电脑ip会因为换了网络改变吗

在当今数字化时代&#xff0c;IP地址作为网络世界中的“门牌号”&#xff0c;扮演着至关重要的角色。它不仅是设备在网络中的唯一标识&#xff0c;也是数据交换和信息传递的基础。然而&#xff0c;对于普通用户而言&#xff0c;一个常见的问题便是&#xff1a;当电脑连接到不同…

三菱变频器Modbus-RTU 通讯规格

能够从变频器的 RS-485 端子使用 Modbus-RTU 通讯协议&#xff0c;进行通讯运行和参数设定。 NOTE: 1、使用 Modbus-RTU 通讯协议时&#xff0c;请设定Pr.549 协议选择 “1” 2、从主机按地址0(站号0)进行hodbus-RTU通讯时&#xff0c;为广播通讯&#xff0c;变频器不向主机发…

QT编译后,如何手动运行,或复制到其他机器运行

编译后&#xff08;文件名叫Work.exe&#xff09;&#xff0c;通过QT功能&#xff0c;是可以成功运行的。如果在目录中双击&#xff0c;或复制到其他机器上运行&#xff0c;就会失败。怎么办&#xff1f; 打开命令窗口 运行命令 D:\Work\build\release>windeployqt Work.e…

写论文去哪个网站?2024最佳五款AI毕业论文学术网站

在2024年&#xff0c;AI技术在学术写作领域的应用已经变得越来越普遍。为了帮助学生和研究人员更高效地完成毕业论文的撰写任务&#xff0c;市场上涌现了许多优秀的AI论文写作工具。本文将重点推荐五款最佳的AI毕业论文学术网站&#xff0c;并特别强调千笔-AIPassPaper的优势。…

【应用开发三】 input子系统介绍

文章目录 1 名词解释2 输入设备编程框架2.1 input子系统2.2 读取数据流程2.3 input_event结构体2.3.1 type&#xff08;哪类事件&#xff09;2.2 code&#xff08;具体事件&#xff09;2.3 value&#xff08;数值&#xff09; 2.4 数据同步2.5 读取start input_event数据 1 名词…

【iOS】——YYModel源码总结

性能优化及优点 YYModel主要用于将JSON数据转换为模型对象&#xff0c;以及将模型对象转换为字典的库。相比于其他的数据转换库例如JSONModel&#xff0c;它更加的轻量级并且性能更高&#xff0c;因为它在很多地方做了优化&#xff1a; 通过CFDictionaryCreateMutable方法将数…