HTTP
文章平均质量分 93
HTTP
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
40 | HTTP性能优化面面观(下)
上一讲里说到了,在整个 HTTP 系统里有三个可优化的环节,分别是和(“第一公里”和“中间一公里”)。但因为我们是无法完全控制客户端的,所以实际上的优化工作通常是在服务器端。这里又可以细分为后端和前端,后端是指网站的后台服务,而前端就是 HTML、CSS、图片等展现在客户端的代码和数据。知道了大致的方向,HTTP 性能优化具体应该怎么做呢?总的来说,任何计算机系统的优化都可以分成这么几类:硬件软件、内部外部、花钱不花钱。原创 2023-11-01 19:45:08 · 38 阅读 · 0 评论 -
39 | HTTP性能优化面面观(上)
(在英语原文中是 mile,英里)。“第一公里”是指网站的出口,也就是服务器接入互联网的传输线路,它的带宽直接决定了网站对外的服务能力,也就是吞吐量等指标。显然,优化性能应该在这“第一公里”加大投入,尽量购买大带宽,接入更多的运营商网络。“中间一公里”就是由许多小网络组成的实际的互联网,其实它远不止“一公里”,而是非常非常庞大和复杂的网络,地理距离、网络互通都严重影响了传输速度。原创 2023-11-01 18:14:49 · 61 阅读 · 0 评论 -
38 | WebSocket:沙盒里的TCP
在之前讲 TCP/IP 协议栈的时候,我说过有“TCP Socket”,它实际上是一种功能接口,通过这些接口就可以使用 TCP/IP 协议栈在传输层收发数据。那么,你知道还有一种东西叫“WebSocket”吗?单从名字上看,“Web”指的是 HTTP,“Socket”是套接字调用,那么这两个连起来又是什么意思呢?原创 2023-11-01 17:33:01 · 59 阅读 · 0 评论 -
37 | CDN:加速我们的网络服务
这个时候 CDN 就出现了,它就是专门为解决“长距离”上网络访问速度慢而诞生的一种网络应用服务。从名字上看,CDN 有三个关键词:“内容”“分发”和“网络先看一下“网络”的含义。CDN 的最核心原则是“就近访问”,如果用户能够在本地几十公里的距离之内获取到数据,那么时延就基本上变成 0 了。所以 CDN 投入了大笔资金,在全国、乃至全球的各个大枢纽城市都建立了机房,部署了大量拥有高存储高带宽的节点,构建了一个专用网络。原创 2023-11-01 14:28:49 · 83 阅读 · 0 评论 -
36 | WAF:保护我们的网络服务
在前些天的“安全篇”里,我谈到了 HTTPS,它使用了 SSL/TLS 协议,加密整个通信过程,能够防止恶意窃听和窜改,保护我们的数据安全。但 HTTPS 只是网络安全中很小的一部分,仅仅保证了“通信链路安全”,让第三方无法得知传输的内容。在通信链路的两端,也就是客户端和服务器,它是无法提供保护的。因为 HTTP 是一个开放的协议,Web 服务都运行在公网上,任何人都可以访问,所以天然就会成为黑客的攻击目标。而且黑客的本领比我们想象的还要大得多。原创 2023-11-01 11:27:09 · 65 阅读 · 0 评论 -
35 | OpenResty:更灵活的Web服务器
在上一讲里,我们看到了高性能的 Web 服务器 Nginx,它资源占用少,处理能力高,是搭建网站的首选。虽然 Nginx 成为了 Web 服务器领域无可争议的“王者”,但它也并不是没有缺点的,毕竟它已经 15 岁了。“一个人很难超越时代,而时代却可以轻易超越所有人”,Nginx 当初设计时针对的应用场景已经发生了变化,它的一些缺点也就暴露出来了。Nginx 的服务管理思路延续了当时的流行做法,使用磁盘上的静态配置文件,所以每次修改后必须重启才能生效。原创 2023-11-01 10:48:31 · 1928 阅读 · 0 评论 -
34 | Nginx:高性能的Web服务器
经过前面几大模块的学习,你已经完全掌握了 HTTP 的所有知识,那么接下来请收拾一下行囊,整理一下装备,跟我一起去探索 HTTP 之外的广阔天地。现在的互联网非常发达,用户越来越多,网速越来越快,HTTPS 的安全加密、HTTP/2 的多路复用等特性都对 Web 服务器提出了非常高的要求。一个好的 Web 服务器必须要具备稳定、快速、易扩展、易维护等特性,才能够让网站“立于不败之地”。那么,在搭建网站的时候,应该选择什么样的服务器软件呢?原创 2023-11-01 08:58:45 · 48 阅读 · 0 评论 -
33 | 我应该迁移到HTTP/2吗?
这一讲是“飞翔篇”的最后一讲,而 HTTP 的所有知识也差不多快学完了。前面已经看到了新的 HTTP/2 和 HTTP/3 协议,了解了它们的特点和工作原理,如果再联系上前几天“安全篇”的 HTTPS,你可能又会发出疑问:“刚费了好大的力气升级到 HTTPS,这又出了一个 HTTP/2,还有再次升级的必要吗?与各大浏览器“强推”HTTPS 的待遇不一样,HTTP/2 的公布可谓是“波澜不惊”。原创 2023-10-31 23:53:54 · 40 阅读 · 0 评论 -
32 | 未来之路:HTTP/3展望
在前面的两讲里,我们一起学习了 HTTP/2,你也应该看到了 HTTP/2 做出的许多努力,比如头部压缩、二进制分帧、虚拟的“流”与多路复用,性能方面比 HTTP/1 有了很大的提升,“基本上”解决了“队头阻塞”这个“老大难”问题。原创 2023-10-31 23:14:24 · 42 阅读 · 0 评论 -
31 | 时代之风(下):HTTP/2内核剖析
由于 HTTP/2“事实上”是基于 TLS,所以在正式收发数据之前,会有 TCP 握手和 TLS 握手,这两个步骤相信你一定已经很熟悉了,所以这里就略过去不再细说。TLS 握手成功之后,客户端必须要发送一个“连接前言”(connection preface),用来确认建立 HTTP/2 连接。在 Wireshark 里,HTTP/2 的“连接前言”被称为“Magic”,意思就是“不可知的魔法”。原创 2023-10-31 22:36:27 · 79 阅读 · 0 评论 -
30 | 时代之风(上):HTTP/2特性概览
在第 14 讲里,我们看到 HTTP 有两个主要的缺点:安全不足和性能不高。刚结束的“安全篇”里的 HTTPS,通过引入 SSL/TLS 在安全上达到了“极致”,但在性能提升方面却是乏善可陈,只优化了握手加密的环节,对于整体的数据传输没有提出更好的改进方案,还只能依赖于“长连接”这种“落后”的技术(参见第 17 讲)。所以,在 HTTPS 逐渐成熟之后,HTTP 就向着性能方面开始“发力”,走出了另一条进化的道路。原创 2023-10-31 21:56:11 · 42 阅读 · 0 评论 -
29 | 我应该迁移到HTTPS吗?
今天是“安全篇”的最后一讲,我们已经学完了 HTTPS、TLS 相关的大部分知识。不过,或许你心里还会有一些困惑:“HTTPS 这么复杂,我是否应该迁移到 HTTPS 呢?它能带来哪些好处呢?具体又应该怎么实施迁移呢?这些问题不单是你,也是其他很多人,还有当初的我的真实想法,所以今天就来聊聊这方面的事情。原创 2023-10-31 20:48:23 · 47 阅读 · 0 评论 -
28 | 连接太慢该怎么办:HTTPS的优化
你可能或多或少听别人说过,“HTTPS 的连接很慢”。那么“慢”的原因是什么呢?通过前两讲的学习,你可以看到,HTTPS 连接大致上可以划分为两个部分,第一个是建立连接时的,第二个是握手后的。由于目前流行的 AES、ChaCha20 性能都很好,还有硬件优化,报文传输的性能损耗可以说是非常地小,小到几乎可以忽略不计了。所以,通常所说的“HTTPS 连接慢”指的就是刚开始建立连接的那段时间。原创 2023-10-31 19:59:16 · 1114 阅读 · 0 评论 -
27 | 更好更快的握手:TLS1.3特性解析
上一讲中讲了 TLS1.2 的握手过程,你是不是已经完全掌握了呢?不过 TLS1.2 已经是 10 年前(2008 年)的“老”协议了,虽然历经考验,但毕竟“岁月不饶人”,在安全、性能等方面已经跟不上如今的互联网了。于是经过四年、近 30 个草案的反复打磨,TLS1.3 终于在去年(2018 年)“粉墨登场”,再次确立了信息安全领域的新标准。。原创 2023-10-31 18:16:05 · 1615 阅读 · 0 评论 -
26 | 信任始于握手:TLS1.2连接过程解析
经过前几讲的介绍,你应该已经熟悉了对称加密与非对称加密、数字签名与证书等密码学知识。有了这些知识“打底”,现在我们就可以正式开始研究 HTTPS 和 TLS 协议了。原创 2023-10-31 17:35:30 · 1179 阅读 · 0 评论 -
25 | 固若金汤的根本(下):数字签名与证书
实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。你可以把摘要算法近似地理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。换一个角度,也可以把摘要算法理解成特殊的“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文。原创 2023-10-31 15:44:33 · 62 阅读 · 0 评论 -
24 | 固若金汤的根本(上):对称加密与非对称加密
在上一讲中,我们初步学习了 HTTPS,知道 HTTPS 的安全性是由 TLS 来保证的。你一定很好奇,它是怎么为 HTTP 增加了机密性、完整性,身份认证和不可否认等特性的呢?先说说机密性。它是信息安全的基础,缺乏机密性 TLS 就会成为“无水之源”“无根之木”。实现机密性最常用的手段是“”(encrypt),就是把消息用某种方式转换成谁也看不懂的乱码,只有掌握特殊“钥匙”的人才能再转换出原始文本。这里的“钥匙”就叫做“”(key),加密前的消息叫“原创 2023-10-31 15:03:16 · 77 阅读 · 0 评论 -
23 | HTTPS是什么?SSL/TLS又是什么?
既然 HTTP“不安全”,那什么样的通信过程才是安全的呢?通常认为,如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。机密性(Secrecy/Confidentiality)是指对数据的“保密”,只能由可信的人访问,对其他人是不可见的“秘密”,简单来说就是不能让不相关的人看到不该看的东西。比如小明和小红私下聊天,但“隔墙有耳”,被小强在旁边的房间里全偷听到了,这就是没有机密性。原创 2023-10-31 14:10:52 · 224 阅读 · 0 评论 -
22 | 冷链周转:HTTP的缓存代理
在第 20 讲中,介绍了 HTTP 的缓存控制,第 21 讲介绍了 HTTP 的代理服务。那么,把这两者结合起来就是这节课所要说的“”,也就是支持缓存控制的代理服务。之前谈到缓存时,主要讲了客户端(浏览器)上的缓存控制,它能够减少响应时间、节约带宽,提升客户端的用户体验。但 HTTP 传输链路上,不只是客户端有缓存,服务器上的缓存也是非常有价值的,可以让请求不必走完整个后续处理流程,“就近”获得响应结果。原创 2023-10-31 11:16:22 · 37 阅读 · 0 评论 -
21 | 良心中间商:HTTP的代理服务
在前面讲 HTTP 协议的时候,我们严格遵循了 HTTP 的“请求 - 应答”模型,协议中只有两个互相通信的角色,分别是“请求方”浏览器(客户端)和“应答方”服务器。今天,我们要在这个模型里引入一个新的角色,那就是HTTP 代理。引入 HTTP 代理后,原来简单的双方通信就变复杂了一些,加入了一个或者多个中间人,但整体上来看,还是一个有顺序关系的链条,而且链条里相邻的两个角色仍然是简单的一对一通信,不会出现越级的情况。原创 2023-10-31 10:34:14 · 135 阅读 · 0 评论 -
20 | 生鲜速递:HTTP的缓存控制
缓存(Cache)是计算机领域里的一个重要概念,是优化系统性能的利器。由于链路漫长,网络时延不可控,浏览器使用 HTTP 获取资源的成本较高。所以,非常有必要把“来之不易”的数据缓存起来,下次再请求的时候尽可能地复用。这样,就可以避免多次请求 - 应答的通信成本,节约网络带宽,也可以加快响应速度。试想一下,如果有几十 K 甚至几十 M 的数据,不是从网络而是从本地磁盘获取,那将是多么大的一笔节省,免去多少等待的时间。实际上,HTTP 传输的每一个环节基本上都会有缓存,非常复杂。原创 2023-10-31 09:53:14 · 33 阅读 · 0 评论 -
19 | 让我知道你是谁:HTTP的Cookie机制
不知道你有没有看过克里斯托弗·诺兰导演的一部经典电影《记忆碎片》(Memento),里面的主角患有短期失忆症,记不住最近发生的事情。比如,电影里有个场景,某人刚跟主角说完话,大闹了一通,过了几分钟再回来,主角却是一脸茫然,完全不记得这个人是谁,刚才又做了什么,只能任人摆布。这种情况就很像 HTTP 里“无状态”的 Web 服务器,只不过服务器的“失忆症”比他还要严重,连一分钟的记忆也保存不了,请求处理完立刻就忘得一干二净。即使这个请求会让服务器发生 500 的严重错误,下次来也会依旧“热情招待”。原创 2023-10-31 09:14:34 · 42 阅读 · 0 评论 -
18 | 四通八达:HTTP的重定向和跳转
在专栏第 1 讲时曾经说过,为了实现在互联网上构建超链接文档系统的设想,蒂姆·伯纳斯 - 李发明了万维网,使用 HTTP 协议传输“超文本”,让全世界的人都能够自由地共享信息。“超文本”里含有“超链接”,可以从一个“超文本”跳跃到另一个“超文本”,对线性结构的传统文档是一个根本性的变革。能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起,形成了复杂的网状结构,用户可以在查看时随意点击链接、转换页面。原创 2023-10-30 23:45:25 · 240 阅读 · 0 评论 -
17 | 排队也要讲效率:HTTP的连接管理
在第 14 讲里,曾经提到过 HTTP 的性能问题,用了六个字来概括:“同时,也谈到了“队头阻塞”,但由于时间的限制没有展开来细讲,这次就来好好地看看 HTTP 在连接这方面的表现。HTTP 的连接管理也算得上是个“老生常谈”的话题了,你一定曾经听说过“短连接”“长连接”之类的名词,今天让我们一起来把它们弄清楚。原创 2023-10-30 23:33:18 · 82 阅读 · 0 评论 -
16 | 把大象装进冰箱:HTTP传输大文件的方法
上次我们谈到了 HTTP 报文里的 body,知道了 HTTP 可以传输很多种类的数据,不仅是文本,也能传输图片、音频和视频。早期互联网上传输的基本上都是只有几 K 大小的文本和小图片,现在的情况则大有不同。网页里包含的信息实在是太多了,随随便便一个主页 HTML 就有可能上百 K,高质量的图片都以 M 论,更不要说那些电影、电视剧了,几 G、几十 G 都有可能。原创 2023-10-30 23:10:15 · 102 阅读 · 0 评论 -
15 | 海纳百川:HTTP的实体数据
这一讲是“进阶篇”的第一讲,从今天开始,会用连续的 8 讲的篇幅来详细解析 HTTP 协议里的各种头字段,包括定义、功能、使用方式、注意事项等等。学完了这些课程,就可以完全掌握 HTTP 协议。在前面的“基础篇”里我们了解了 HTTP 报文的结构,知道一个 HTTP 报文是由“header+body”组成的。但那时我们主要研究的是 header,没有涉及到 body。所以,“进阶篇”的第一讲就从 HTTP 的 body 谈起。原创 2023-10-30 22:35:06 · 39 阅读 · 0 评论 -
14 | HTTP有哪些优点?又有哪些缺点?
上一讲介绍了 HTTP 的五个基本特点,这一讲要说的则是它的优点和缺点。其实这些也应该算是 HTTP 的特点,但这一讲会更侧重于评价它们的优劣和好坏。今天的讨论范围仅限于 HTTP/1.1,所说的优点和缺点也仅针对 HTTP/1.1。实际上,专栏后续要讲的 HTTPS 和 HTTP/2 都是对 HTTP/1.1 优点的发挥和缺点的完善。原创 2023-10-30 17:16:29 · 228 阅读 · 0 评论 -
13 | HTTP有哪些特点?
通过“基础篇”前几讲的学习,你应该已经知道了 HTTP 协议的基本知识,了解它的报文结构,请求头、响应头以及内部的请求方法、URI 和状态码等细节。你会不会有种疑惑:“HTTP 协议好像也挺简单的啊,凭什么它就能统治互联网这么多年呢?所以接下来的这两讲,我会跟你聊聊 HTTP 协议的特点、优点和缺点。既要看到它好的一面,也要正视它不好的一面,只有全方位、多角度了解 HTTP,才能实现“扬长避短”,更好地利用 HTTP。原创 2023-10-30 16:22:29 · 38 阅读 · 0 评论 -
12 | 响应状态码该怎么用?
前两讲中,我们学习了 HTTP 报文里请求行的组成部分,包括请求方法和 URI。有了请求行,加上后面的头字段就形成了请求头,可以通过 TCP/IP 协议发送给服务器。服务器收到请求报文,解析后需要进行处理,具体的业务逻辑多种多样,但最后必定是拼出一个响应报文发回客户端。响应报文由响应头加响应体数据组成,响应头又由状态行和头字段构成。我们先来复习一下状态行的结构,有三部分:开头的 Version 部分是 HTTP 协议的版本号,通常是 HTTP/1.1,用处不是很大。原创 2023-10-30 15:34:28 · 115 阅读 · 0 评论 -
11 | 你能写出正确的网址吗?
上一讲里我们一起学习了 HTTP 协议里的请求方法,其中最常用的一个是 GET,它用来从服务器上某个资源获取数据,另一个是 POST,向某个资源提交数据。那么,应该用什么来标记服务器上的资源呢?怎么区分“这个”资源和“那个”资源呢?经过前几讲的学习,你一定已经知道了,用的是 URI,也就是因为它经常出现在浏览器的地址栏里,所以俗称为“网络地址”,简称“网址”。严格地说,URI 不完全等同于网址,它包含有 URL 和 URN 两个部分,在 HTTP 世界里用的网址实际上是 URL——原创 2023-10-30 11:51:17 · 53 阅读 · 0 评论 -
10 | 应该如何理解请求方法?
上一讲我介绍了 HTTP 的报文结构,它是由 header+body 构成,请求头里有请求方法和请求目标,响应头里有状态码和原因短语,今天要说的就是请求头里的请求方法。原创 2023-10-30 11:12:00 · 57 阅读 · 0 评论 -
09 | HTTP报文是什么样子的?
在上一讲里,我们在本机的最小化环境了做了两个 HTTP 协议的实验,使用 Wireshark 抓包,弄清楚了 HTTP 协议基本工作流程,也就是“请求 - 应答”“一发一收”的模式。可以看到,HTTP 的工作模式是非常简单的,由于 TCP/IP 协议负责底层的具体传输工作,HTTP 协议基本上不用在这方面操心太多。单从这一点上来看,所谓的“超文本传输协议”其实并不怎么管“传输”的事情,有点“名不副实”。那么 HTTP 协议的核心部分是什么呢?答案就是它传输的报文内容。原创 2023-10-30 10:38:24 · 87 阅读 · 0 评论 -
08 | 键入网址再按下回车,后面究竟发生了什么?
经过上一讲的学习,你是否已经在自己的电脑上搭建好了“最小化”的 HTTP 实验环境呢?我相信你的答案一定是“Yes”,那么,让我们立刻开始“螺蛳壳里做道场”,在这个实验环境里看一下 HTTP 协议工作的全过程。原创 2023-10-30 09:37:12 · 66 阅读 · 0 评论 -
07 | 自己动手,搭建HTTP实验环境
常言道“实践出真知”,又有俗语“光说不练是假把式”。要研究 HTTP 协议,最好有一个实际可操作、可验证的环境,通过实际的数据、现象来学习,肯定要比单纯的“动嘴皮子”效果要好的多。现成的环境当然有,只要能用浏览器上网,就会有 HTTP 协议,就可以进行实验。但现实的网络环境又太复杂了,有很多无关的干扰因素,这些“噪音”会“淹没”真正有用的信息。所以,建议是:搭建一个“最小化。原创 2023-10-30 09:04:01 · 169 阅读 · 0 评论 -
06 | 域名里有哪些门道?
在上一讲里,我们学习了 HTTP 协议使用的 TCP/IP 协议栈,知道了 HTTP 协议是运行在 TCP/IP 上的。IP 协议的职责是“网际互连”,它在 MAC 层之上,使用 IP 地址把 MAC 编号转换成了四位数字,这就对物理网卡的 MAC 地址做了一层抽象,发展出了许多的“新玩法”。例如,分为 A、B、C、D、E 五种类型,公有地址和私有地址,掩码分割子网等。原创 2023-10-30 00:20:31 · 40 阅读 · 0 评论 -
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
在上一讲中,简单提到了 TCP/IP 协议,它是 HTTP 协议的下层协议,负责具体的数据传输工作。并且还特别说了,TCP/IP 协议是一个“在工作中一定经常听别人谈起什么“四层负载均衡”“七层负载均衡”,什么“二层转发”“三层路由”,那么你真正理解这些层次的含义吗?网络分层的知识教科书上都有,但很多都是“泛泛而谈”,只有“学术价值”,于是就容易和实际应用“脱节”,造成的后果就是“似懂非懂”,真正用的时候往往会“一头雾水”。所以,今天就从 HTTP 应用的角度,把这些模糊的概念弄清楚。原创 2023-10-29 22:54:10 · 92 阅读 · 0 评论 -
04 | HTTP世界全览(下):与HTTP相关的各种协议
上一讲中,介绍了与 HTTP 相关的浏览器、服务器、CDN、网络爬虫等应用技术。今天要讲的则是比较偏向于理论的各种 HTTP 相关协议,重点是 TCP/IP、DNS、URI、HTTPS 等,希望能够理清楚它们与 HTTP 的关系。原创 2023-10-29 22:24:22 · 112 阅读 · 0 评论 -
03 | HTTP世界全览(上):与HTTP相关的各种概念
在上一讲的末尾一张图,里面是与 HTTP 关联的各种技术和知识点,也可以说是这个专栏的总索引,那张图左边的部分是与 HTTP 有关系的各种协议,比较偏向于理论;而右边的部分是与 HTTP 有关系的各种应用技术,偏向于实际应用。希望借助这张图澄清与 HTTP 相关的各种概念和角色,让你在实际工作中清楚它们在链路中的位置和作用,知道发起一个 HTTP 请求会有哪些角色参与,会如何影响请求的处理,做到“手中有粮,心中不慌”。原创 2023-10-29 21:42:49 · 50 阅读 · 0 评论 -
02 | HTTP是什么?HTTP又不是什么?
首先我来问出这个问题:“你觉得 HTTP 是什么呢?你可能会不假思索、脱口而出:“HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。回答非常正确!我必须由衷地恭喜你:能给出这个答案,就表明你具有至少 50%HTTP 相关的知识储备,应该算得上是“半个专家”了。不过让我们换个对话场景,假设不是我,而是由一位面试官问出刚才的问题呢?显然,这个答案有点过于简单了,不能让他满意,他肯定会再追问你一些问题:你是怎么理解 HTTP 字面上的“超文本”和“传输协议”的?原创 2023-10-29 19:49:42 · 44 阅读 · 0 评论 -
01 | 时势与英雄:HTTP的前世今生
HTTP 协议在我们的生活中随处可见,打开手机或者电脑,只要你上网,不论是用 iPhone、Android、Windows 还是 Mac,不论是用浏览器还是 App,不论是看新闻、短视频还是听音乐、玩游戏,后面总会有 HTTP 在默默为你服务。据 NetCraft 公司统计,目前全球至少有 16 亿个网站、2 亿多个独立域名,而这个庞大网络世界的底层运转机制就是 HTTP。那么,在享受如此便捷舒适的网络生活时,你有没有想过,HTTP 协议是怎么来的?它最开始是什么样子的?原创 2023-10-29 18:54:03 · 150 阅读 · 0 评论