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)协议基于客户端-服务器架构,工作过程通常可以分为以下几个步骤:
- 客户端发起请求:用户在浏览器中输入 URL 或点击链接,客户端(如浏览器)向服务器发起一个 HTTP 请求。请求包含了方法(如 GET、POST 等)、请求的资源路径、HTTP 版本、请求头等信息。
- 服务器处理请求:服务器接收到请求后,分析请求的类型和资源路径。服务器根据请求的类型(如获取资源、提交表单数据等)进行相应的处理,例如读取文件、执行动态脚本等。
- 服务器返回响应:服务器将处理后的结果封装为 HTTP 响应消息,通常包含响应状态码(如 200 OK)、响应头、以及响应的内容(如 HTML 文件、JSON 数据、图片等),并将其发送回客户端。
- 客户端渲染页面:客户端接收到服务器的响应后,解析响应内容,并根据响应内容渲染页面,展示给用户。例如,如果服务器返回的是 HTML 文件,浏览器会渲染网页内容。
HTTP 的主要特点
- 无连接:HTTP 是无连接的协议,即每次客户端和服务器之间的连接只处理一个请求。处理完毕后,连接会自动断开。这种设计节约了服务器的资源,但每次新的请求都需要重新建立连接。为了提高效率,HTTP/1.1 引入了持久连接(keep-alive),允许多个请求在同一连接上处理。
- 媒体独立:HTTP 是媒体独立的,意味着它可以传输任何类型的数据,只要客户端和服务器能够理解。通过 HTTP 头中的 Content-Type 和 Accept 字段,客户端和服务器可以协商传输的数据格式。
- 无状态:HTTP 是无状态协议,意味着每次请求都是独立的,服务器不会记住之前的请求信息。这虽然提高了协议的简洁性,但也导致每次请求时都需要重新传输相关状态信息。为了解决这一问题,可以通过使用 Cookie、Session 等机制来保持状态。
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 消息的工作流程
- 客户端发送请求消息:客户端(如浏览器)向服务器发送一个请求,包含请求行、请求头和(可选的)请求体。
- 服务器处理请求:服务器根据请求行中指定的资源路径和方法进行相应的处理。
- 服务器返回响应消息:服务器处理完成后,将状态行、响应头和(可选的)响应体打包成响应消息返回给客户端。
- 客户端处理响应:客户端接收并解析服务器返回的响应消息,通常会根据响应内容渲染网页或处理数据。
重要特性
- 无连接:每次请求处理完成后,连接会被关闭,除非使用了 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-8 , application/json 等。 |
Content-Length | 内容长度 | 响应体的大小,单位是字节。例如:3145 |
Content-Encoding | 内容编码 | 响应体的压缩编码,如 gzip , deflate 等。 |
Content-Language | 内容语言 | 响应体的语言。例如:zh-CN |
Content-Location | 内容位置 | 响应体的 URI。例如:/index.html |
Content-Range | 内容范围 | 响应体的字节范围,用于分块传输。例如:bytes 0-999/8000 |
Cache-Control | 缓存控制 | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。 |
Connection | 连接 | 管理连接的选项,如keep-alive 或close ,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-Protection | XSS保护 | 控制浏览器的 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状态码列表:
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed(预期失败) | 服务器无法满足请求头中 Expect 字段指定的预期行为。 |
418 | I'm a teapot | 状态码 418 实际上是一个愚人节玩笑。它在 RFC 2324 中定义,该 RFC 是一个关于超文本咖啡壶控制协议(HTCPCP)的笑话文件。在这个笑话中,418 状态码是作为一个玩笑加入到 HTTP 协议中的。 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP 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 | .tif | image/tiff |
.001 | application/x-001 | .301 | application/x-301 |
.323 | text/h323 | .906 | application/x-906 |
.907 | drawing/907 | .a11 | application/x-a11 |
.acp | audio/x-mei-aac | .ai | application/postscript |
.aif | audio/aiff | .aifc | audio/aiff |
.aiff | audio/aiff | .anv | application/x-anv |
.asa | text/asa | .asf | video/x-ms-asf |
.asp | text/asp | .asx | video/x-ms-asf |
.au | audio/basic | .avi | video/avi |
.awf | application/vnd.adobe.workflow | .biz | text/xml |
.bmp | application/x-bmp | .bot | application/x-bot |
.c4t | application/x-c4t | .c90 | application/x-c90 |
.cal | application/x-cals | .cat | application/vnd.ms-pki.seccat |
.cdf | application/x-netcdf | .cdr | application/x-cdr |
.cel | application/x-cel | .cer | application/x-x509-ca-cert |
.cg4 | application/x-g4 | .cgm | application/x-cgm |
.cit | application/x-cit | .class | java/* |
.cml | text/xml | .cmp | application/x-cmp |
.cmx | application/x-cmx | .cot | application/x-cot |
.crl | application/pkix-crl | .crt | application/x-x509-ca-cert |
.csi | application/x-csi | .css | text/css |
.cut | application/x-cut | .dbf | application/x-dbf |
.dbm | application/x-dbm | .dbx | application/x-dbx |
.dcd | text/xml | .dcx | application/x-dcx |
.der | application/x-x509-ca-cert | .dgn | application/x-dgn |
.dib | application/x-dib | .dll | application/x-msdownload |
.doc | application/msword | .dot | application/msword |
.drw | application/x-drw | .dtd | text/xml |
.dwf | Model/vnd.dwf | .dwf | application/x-dwf |
.dwg | application/x-dwg | .dxb | application/x-dxb |
.dxf | application/x-dxf | .edn | application/vnd.adobe.edn |
.emf | application/x-emf | .eml | message/rfc822 |
.ent | text/xml | .epi | application/x-epi |
.eps | application/x-ps | .eps | application/postscript |
.etd | application/x-ebx | .exe | application/x-msdownload |
.fax | image/fax | .fdf | application/vnd.fdf |
.fif | application/fractals | .fo | text/xml |
.frm | application/x-frm | .g4 | application/x-g4 |
.gbr | application/x-gbr | . | application/x- |
.gif | image/gif | .gl2 | application/x-gl2 |
.gp4 | application/x-gp4 | .hgl | application/x-hgl |
.hmr | application/x-hmr | .hpg | application/x-hpgl |
.hpl | application/x-hpl | .hqx | application/mac-binhex40 |
.hrf | application/x-hrf | .hta | application/hta |
.htc | text/x-component | .htm | text/html |
.html | text/html | .htt | text/webviewhtml |
.htx | text/html | .icb | application/x-icb |
.ico | image/x-icon | .ico | application/x-ico |
.iff | application/x-iff | .ig4 | application/x-g4 |
.igs | application/x-igs | .iii | application/x-iphone |
.img | application/x-img | .ins | application/x-internet-signup |
.isp | application/x-internet-signup | .IVF | video/x-ivf |
.java | java/* | .jfif | image/jpeg |
.jpe | image/jpeg | .jpe | application/x-jpe |
.jpeg | image/jpeg | .jpg | image/jpeg |
.jpg | application/x-jpg | .js | application/x-javascript |
.jsp | text/html | .la1 | audio/x-liquid-file |
.lar | application/x-laplayer-reg | .latex | application/x-latex |
.lavs | audio/x-liquid-secure | .lbm | application/x-lbm |
.lmsff | audio/x-la-lms | .ls | application/x-javascript |
.ltr | application/x-ltr | .m1v | video/x-mpeg |
.m2v | video/x-mpeg | .m3u | audio/mpegurl |
.m4e | video/mpeg4 | .mac | application/x-mac |
.man | application/x-troff-man | .math | text/xml |
.mdb | application/msaccess | .mdb | application/x-mdb |
.mfp | application/x-shockwave-flash | .mht | message/rfc822 |
.mhtml | message/rfc822 | .mi | application/x-mi |
.mid | audio/mid | .midi | audio/mid |
.mil | application/x-mil | .mml | text/xml |
.mnd | audio/x-musicnet-download | .mns | audio/x-musicnet-stream |
.mocha | application/x-javascript | .movie | video/x-sgi-movie |
.mp1 | audio/mp1 | .mp2 | audio/mp2 |
.mp2v | video/mpeg | .mp3 | audio/mp3 |
.mp4 | video/mpeg4 | .mpa | video/x-mpg |
.mpd | application/vnd.ms-project | .mpe | video/x-mpeg |
.mpeg | video/mpg | .mpg | video/mpg |
.mpga | audio/rn-mpeg | .mpp | application/vnd.ms-project |
.mps | video/x-mpeg | .mpt | application/vnd.ms-project |
.mpv | video/mpg | .mpv2 | video/mpeg |
.mpw | application/vnd.ms-project | .mpx | application/vnd.ms-project |
.mtx | text/xml | .mxp | application/x-mmxp |
.net | image/pnetvue | .nrf | application/x-nrf |
.nws | message/rfc822 | .odc | text/x-ms-odc |
.out | application/x-out | .p10 | application/pkcs10 |
.p12 | application/x-pkcs12 | .p7b | application/x-pkcs7-certificates |
.p7c | application/pkcs7-mime | .p7m | application/pkcs7-mime |
.p7r | application/x-pkcs7-certreqresp | .p7s | application/pkcs7-signature |
.pc5 | application/x-pc5 | .pci | application/x-pci |
.pcl | application/x-pcl | .pcx | application/x-pcx |
application/pdf | application/pdf | ||
.pdx | application/vnd.adobe.pdx | .pfx | application/x-pkcs12 |
.pgl | application/x-pgl | .pic | application/x-pic |
.pko | application/vnd.ms-pki.pko | .pl | application/x-perl |
.plg | text/html | .pls | audio/scpls |
.plt | application/x-plt | .png | image/png |
.png | application/x-png | .pot | application/vnd.ms-powerpoint |
.ppa | application/vnd.ms-powerpoint | .ppm | application/x-ppm |
.pps | application/vnd.ms-powerpoint | .ppt | application/vnd.ms-powerpoint |
.ppt | application/x-ppt | .pr | application/x-pr |
.prf | application/pics-rules | .prn | application/x-prn |
.prt | application/x-prt | .ps | application/x-ps |
.ps | application/postscript | .ptn | application/x-ptn |
.pwz | application/vnd.ms-powerpoint | .r3t | text/vnd.rn-realtext3d |
.ra | audio/vnd.rn-realaudio | .ram | audio/x-pn-realaudio |
.ras | application/x-ras | .rat | application/rat-file |
.rdf | text/xml | .rec | application/vnd.rn-recording |
.red | application/x-red | .rgb | application/x-rgb |
.rjs | application/vnd.rn-realsystem-rjs | .rjt | application/vnd.rn-realsystem-rjt |
.rlc | application/x-rlc | .rle | application/x-rle |
.rm | application/vnd.rn-realmedia | .rmf | application/vnd.adobe.rmf |
.rmi | audio/mid | .rmj | application/vnd.rn-realsystem-rmj |
.rmm | audio/x-pn-realaudio | .rmp | application/vnd.rn-rn_music_package |
.rms | application/vnd.rn-realmedia-secure | .rmvb | application/vnd.rn-realmedia-vbr |
.rmx | application/vnd.rn-realsystem-rmx | .rnx | application/vnd.rn-realplayer |
.rp | image/vnd.rn-realpix | .rpm | audio/x-pn-realaudio-plugin |
.rsml | application/vnd.rn-rsml | .rt | text/vnd.rn-realtext |
.rtf | application/msword | .rtf | application/x-rtf |
.rv | video/vnd.rn-realvideo | .sam | application/x-sam |
.sat | application/x-sat | .sdp | application/sdp |
.sdw | application/x-sdw | .sit | application/x-stuffit |
.slb | application/x-slb | .sld | application/x-sld |
.slk | drawing/x-slk | .smi | application/smil |
.smil | application/smil | .smk | application/x-smk |
.snd | audio/basic | .sol | text/plain |
.sor | text/plain | .spc | application/x-pkcs7-certificates |
.spl | application/futuresplash | .spp | text/xml |
.ssm | application/streamingmedia | .sst | application/vnd.ms-pki.certstore |
.stl | application/vnd.ms-pki.stl | .stm | text/html |
.sty | application/x-sty | .svg | text/xml |
.swf | application/x-shockwave-flash | .tdf | application/x-tdf |
.tg4 | application/x-tg4 | .tga | application/x-tga |
.tif | image/tiff | .tif | application/x-tif |
.tiff | image/tiff | .tld | text/xml |
.top | drawing/x-top | .torrent | application/x-bittorrent |
.tsd | text/xml | .txt | text/plain |
.uin | application/x-icq | .uls | text/iuls |
.vcf | text/x-vcard | .vda | application/x-vda |
.vdx | application/vnd.visio | .vml | text/xml |
.vpg | application/x-vpeg005 | .vsd | application/vnd.visio |
.vsd | application/x-vsd | .vss | application/vnd.visio |
.vst | application/vnd.visio | .vst | application/x-vst |
.vsw | application/vnd.visio | .vsx | application/vnd.visio |
.vtx | application/vnd.visio | .vxml | text/xml |
.wav | audio/wav | .wax | audio/x-ms-wax |
.wb1 | application/x-wb1 | .wb2 | application/x-wb2 |
.wb3 | application/x-wb3 | .wbmp | image/vnd.wap.wbmp |
.wiz | application/msword | .wk3 | application/x-wk3 |
.wk4 | application/x-wk4 | .wkq | application/x-wkq |
.wks | application/x-wks | .wm | video/x-ms-wm |
.wma | audio/x-ms-wma | .wmd | application/x-ms-wmd |
.wmf | application/x-wmf | .wml | text/vnd.wap.wml |
.wmv | video/x-ms-wmv | .wmx | video/x-ms-wmx |
.wmz | application/x-ms-wmz | .wp6 | application/x-wp6 |
.wpd | application/x-wpd | .wpg | application/x-wpg |
.wpl | application/vnd.ms-wpl | .wq1 | application/x-wq1 |
.wr1 | application/x-wr1 | .wri | application/x-wri |
.wrk | application/x-wrk | .ws | application/x-ws |
.ws2 | application/x-ws | .wsc | text/scriptlet |
.wsdl | text/xml | .wvx | video/x-ms-wvx |
.xdp | application/vnd.adobe.xdp | .xdr | text/xml |
.xfd | application/vnd.adobe.xfd | .xfdf | application/vnd.adobe.xfdf |
.xhtml | text/html | .xls | application/vnd.ms-excel |
.xls | application/x-xls | .xlw | application/x-xlw |
.xml | text/xml | .xpl | audio/scpls |
.xq | text/xml | .xql | text/xml |
.xquery | text/xml | .xsd | text/xml |
.xsl | text/xml | .xslt | text/xml |
.xwd | application/x-xwd | .x_b | application/x-x_b |
.sis | application/vnd.symbian.install | .sisx | application/vnd.symbian.install |
.x_t | application/x-x_t | .ipa | application/vnd.iphone |
.apk | application/vnd.android.package-archive | .xap | application/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, .htm | HTML 文件 |
application/pdf | PDF 文件 | |
image/jpeg | .jpeg, .jpg | JPEG 图像 |
audio/mpeg | .mp3 | MPEG 音频文件 |
video/mp4 | .mp4 | MP4 视频文件 |
application/zip | .zip | ZIP 压缩文件 |
image/png | .png | PNG 图像 |
application/x-gzip | .gz | GZIP 压缩文件 |
application/vnd.ms-excel | .xls | Microsoft Excel 文件 |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx | Excel 文档格式 (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 教程
HTTP/HTTPS 简介 HTTP(Hypertext Transfer Protocol,超文本传输协议)和 HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是用于在网络中传输信息的两种主要协议。它们定义了客户端和服务器…...

低代码革命:加速云原生时代的端到端产品创新
随着云计算技术的飞速发展,云原生成为了企业数字化转型的重要方向。云原生技术通过容器化、微服务、持续集成/持续部署(CI/CD)等实践,帮助企业构建和运行可扩展的应用程序。然而,云原生技术的复杂性也给开发团队带来了…...

力扣 92.反转链表Ⅱ
力扣《反转链表》系列文章目录 刷题次序,由易到难,一次刷通!!! 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段24. 两两交换链表中的节点两个一组反转链表 题解225. K 个一组翻转链表K …...

2024年最新版TypeScript学习笔记——泛型、接口、枚举、自定义类型等知识点
今天带来的是来自尚硅谷禹神2024年8月最新的TS课程的学习笔记,不得不说禹神讲的是真的超级棒! 文章目录 TS入门JS中的困扰静态类型检查编译TS命令行编译自动化编译 类型检查变量和函数类型检查字面量类型检查 类型推断类型声明声明对象类型声明函数类型…...

java项目之城镇保障性住房管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的城镇保障性住房管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 城镇保障性住房管…...

无人机之航线规划篇
无人机的航线规划是一个复杂但至关重要的过程,它确保了无人机在飞行过程中的安全、高效以及任务的顺利完成。以下是对无人机航线规划的详细解析: 一、定义与目的 无人机航线规划是指依据无人机任务分配,规划出符合安全条件的飞行航线。这一过…...

828 华为云征文|华为 Flexus 云服务器搭建 PicGo 图床
在这个充满非凡意义的日子里,我怀揣着满心的热忱与憧憬,毅然决然地踏上了借助华为 Flexus 云服务器搭建 PicGo 图床的精彩征程。这段旅程,注定充满了无数的挑战与意外之喜,宛如在广袤无垠的数字海洋中勇敢地探寻那神秘而珍贵的宝藏…...

Zabbix 6.4添加中文语言
/usr/share/zabbix/include/locales .inc .phplocale -agrep “zh_CN" yum install langpacks-zh_CN.noarch y y y...

【退役之再次线上部署】Spring Boot + VUE + Nginx + MySQL
这篇博客写在凌晨 4 点 20 分,这个时候我刚线上部署完成 web 项目,自己写的全栈项目 这个点儿,也睡不着了,索性就写篇博客记录一下 一、踩坑实录 这个是 最重要的,所以写在前面 Nginx 配置文件 location location /a…...

Qanything 2 0源码解析系列1:新建知识库
Qanything 2.0源码解析系列1:新建知识库 文章转载自:https://www.feifeixu.top/article/19c76951-5881-4181-bb63-4188b28d3917 😀 前言: qanything所有接口都定义在sanic_api.py中 接口函数定义在同级目录下的handler.py中 新建…...

Redis-01 入门和十大数据类型
Redis支持两种持久化方式:RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上,可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照,可以通过恢复RDB文件来恢复数据。 2.AOF持久化…...

IT行业的现状与未来发展趋势
IT行业的现状与未来发展趋势 近年来,随着科技的迅猛发展,IT行业无疑已经成为全球经济增长的重要驱动力之一。无论是人工智能、大数据,还是云计算和区块链技术,IT行业的创新始终在不断推动着各个领域的变革。 人工智能的广泛应用…...

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台
828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台 Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务&…...

今日 leetCode 15.三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...

Games101笔记-二维Transform变换(二)
1、什么是Transform Transform就是通过一个矩阵,进行缩放、旋转、平移等变换 2、缩放、旋转、切变、平移等基础变换 缩放变换: 反射变换: 切变: 绕原点旋转: 以上都是线性变换: 平移变换…...

【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解
【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解 洛谷传送门 AT传送门 题解 抽象题目,抽象翻译,可能是我太菜了,根本没看懂题目,后面是听大佬讲题才发现,这不就是一题全排列暴力题吗。谔谔,真的…...

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记
Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…...

【Java】JVM基本组成
一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …...

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!
环境介绍 每人搭建的环境不一样,情况不一样,但是原因都是下面几种: wvp配置不当网络端口未放开网络不通 我搭建的环境: WVP服务:windows下,用idea运行的源码 ZLM服务:虚拟机里 问题描述 1.…...

淘宝商品详情接口item_get响应参数解析:props、props_list、prop_img
在电商数据分析和应用开发中,淘宝商品详情接口item_get是一个至关重要的工具。通过该接口,开发者可以高效地获取淘宝平台商品的详细信息,从而优化商品展示、搜索、推荐等功能,提升用户体验和转化率。本文将详细解析item_get接口的…...

Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)
一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV(Open Source Computer Vision Library,开源计算机视觉库)的一个重要更新版本,该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX(Open Neu…...

Pandas_iloc_loc_哪个是inclusive哪个是exclusive
iloc 和 loc 包括不包括结尾写的那个行(列)? 不一样! iloc[istart:iend] exclusive on iend 不包括结尾那行(列)! loc[start:end] inclusive on end 包括结尾那行(列)&am…...

python是什么语言写的
Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火,可有人提问,这么火的语言它的底层又是什么语言编写的呢? python是C语言编写的,它有很多包也是用C语言写的。 所以说,C语言还是很…...

python编程,把所有子目录和文件输出到文本文件
要将所有子目录和文件输出到文本文件,你可以使用Python的os模块来遍历目录结构,并将结果写入文件。以下是一个简单的Python脚本示例,它会递归地遍历指定目录,并将每个子目录和文件的相对路径写入到一个文本文件中: im…...

使用 IntelliJ IDEA 连接到达梦数据库(DM)
前言 达梦数据库是一款国产的关系型数据库管理系统,因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动: 访问达梦在线服务平台网站或通过其他官方渠道…...

【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

Java中的事件(动作监听-ActionListener)
(一)、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。 &#…...

STM32篇:开发环境安装
编程语言:C语言 需要安装的软件有两个:Keil5 和 STM32CubeMX 一.Keil5 的安装 使用 Keil4 写 STM32 代码其实也是可以,但需要很复杂的配置,不建议新手操作。 比较推荐 Keil5 编写 STM32 ,只需要一些简单的设置就可…...

AIGC实战——多模态模型Flamingo
AIGC实战——多模态模型Flamingo 0. 前言1. Flamingo 架构2. 视觉编码器3. Perceiver 重采样器4. 语言模型5. FIamingo 应用小结系列链接0. 前言 我们已经学习了文本生成图像模型 DALL.E 2,在本节中,我们将探索另一种多模态模型 Flamingo,它可以根据给定文本和视觉数据流生…...

如何在WordPress中添加事件Schema(分步指南)
如果你正在举办一个在线活动,那么你可能正在寻找通过网络宣传的方法。此时,模式标记可以帮助你在搜索引擎结果中提高活动的可见性。 活动模式将帮助谷歌和其他搜索引擎更好地理解你的活动详情,使它们能够在活动列表、丰富摘要和谷歌知识面板…...