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: 27
username=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 允许服务器在不被请求的情况下主动向客户端发送数据。这有助于减少请求延迟,并提高页面加载速度。