-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
446 lines (305 loc) · 15.4 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta name="description" content="每天进步一点点,努力做更好的自己!">
<meta name="keyword" content="">
<link rel="shortcut icon" href="/css/images/logo.png">
<title>
Yi's Blog
</title>
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.css" rel="stylesheet">
<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/tomorrow.min.css" rel="stylesheet">
<link rel="stylesheet" href="/css/style.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/geopattern/1.2.3/js/geopattern.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.js"></script>
<!-- MathJax support START -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
}
});
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for (i=0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<!-- MathJax support END -->
<meta name="generator" content="Hexo 5.4.0"></head>
<div class="wechat-share">
<img src="/css/images/logo.png" />
</div>
<body>
<header class="header fixed-header">
<div class="header-container">
<a class="home-link" href="/">
<div class="logo"></div>
<span>Yi's Blog</span>
</a>
<ul class="right-list">
<li class="list-item">
<a href="/" class="item-link active">Home</a>
</li>
<li class="list-item">
<a href="/tags/" class="item-link">Tags</a>
</li>
<li class="list-item">
<a href="/categories/" class="item-link">Categories</a>
</li>
<li class="list-item">
<a href="/archives/" class="item-link">Archives</a>
</li>
<li class="list-item">
<a href="/about/" class="item-link">About</a>
</li>
</ul>
<div class="menu">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</div>
<div class="menu-mask">
<ul class="menu-list">
<li class="menu-item">
<a href="/" class="menu-link mobile-active">Home</a>
</li>
<li class="menu-item">
<a href="/tags/" class="menu-link">Tags</a>
</li>
<li class="menu-item">
<a href="/categories/" class="menu-link">Categories</a>
</li>
<li class="menu-item">
<a href="/archives/" class="menu-link">Archives</a>
</li>
<li class="menu-item">
<a href="/about/" class="menu-link">About</a>
</li>
</ul>
</div>
</div>
</header>
<main class="app-body">
<article class="article-card">
<h2 class="article-head">
<a href="/how-to-use-http-status-code-400-correctly/">如何正确地使用 HTTP Status Code 400</a>
</h2>
<p class="article-date">2021年11月23日</p>
<a href="/tags#HTTP" >
<span class="tag-code">HTTP</span>
</a>
<div class="article-summary">
<p>大家对 HTTP 状态码一定都不陌生,也能随口说出它们的含义,但真的有仔细考虑过具体的使用场景吗?前两天与一位同学在何时使用状态码 400 这个问题上有了不同意见。<br>原问题可以细分为如下几个场景:</p>
<ol>
<li>业务接口缺少必要的参数,是否可以返回 400 ?</li>
<li>业务接口收到的 string 类型的参数,转 int 类型失败时,是否可以返回 400 ?</li>
<li>业务接口的请求体内容在 json 反序列化到 Golang 结构体的过程中失败,是否可以返回 400 ?</li>
</ol>
<p>读到这里,你的心中是否有了自己的答案?我与朋友一番讨论并搜集资料后,整理总结在此。 </p>
</div>
<a class="more" href="/how-to-use-http-status-code-400-correctly/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/green-hand-notes-about-mongodb/">MongoDB 新手笔记</a>
</h2>
<p class="article-date">2021年4月6日</p>
<a href="/tags#MongoDB" >
<span class="tag-code">MongoDB</span>
</a>
<div class="article-summary">
<p>说来惭愧,这么多年也没真正去学习过 MongoDB,最近工作中用到了,边用边学。 </p>
<p>文章标题写的是<strong>新手笔记</strong>,但这不是一篇入门教程,而是记录我作为一个新手在使用 MongoDB 过程中遇到的一些疑惑与问题。以下内容基于 MongoDB Server 4.0 测试编写(比如 <code>$convert</code> 方法是在 MongoDB Server 4.0 才加入的),参考时需注意版本。</p>
</div>
<a class="more" href="/green-hand-notes-about-mongodb/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/try-aliyun-cdn-edgescript/">试用阿里云CDN边缘脚本EdgeScript</a>
</h2>
<p class="article-date">2020年12月6日</p>
<a href="/tags#AWS Lambda" >
<span class="tag-code">AWS Lambda</span>
</a>
<a href="/tags#CDN" >
<span class="tag-code">CDN</span>
</a>
<a href="/tags#EdgeScript" >
<span class="tag-code">EdgeScript</span>
</a>
<div class="article-summary">
<p>最初了解函数计算这个概念是从 AWS Lambda 开始的,后来又知道了 Lambda@Edge,我当时学习之后直呼 Amazing,简直强大又灵活,后来我们的很多业务都用 Lambda@Edge 做了架构演进。遗憾的是 Lambda@Edge 这个好东西只有 AWS Global 才能用,国内特供版的 AWS 是没有这个功能的,那就只能寄希望于阿里云国货当自强了。当时的大概是2018年底,跟阿里云也有过沟通,他们有计划要上线一个类似的功能。到了2019年底,阿里云 EdgeScript 上线了,鉴于刚上线的产品通常都不太稳定,我也没有怎关注。转眼时间已经来到了2020年底,我来试用一下阿里云的 EdgeScript,看看功能如何。</p>
</div>
<a class="more" href="/try-aliyun-cdn-edgescript/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/build-p2p-connection-by-python-socket/">Python socket 建立P2P连接测试与总结</a>
</h2>
<p class="article-date">2020年11月29日</p>
<a href="/tags#Python" >
<span class="tag-code">Python</span>
</a>
<div class="article-summary">
<p>最近有这么一个需求,要测试在两台没有公网IP的服务器之间建立P2P连接。经过几天的学习测试,记录在此。</p>
</div>
<a class="more" href="/build-p2p-connection-by-python-socket/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/talk-about-http-header-vary-again/">再聊 HTTP Header Vary</a>
</h2>
<p class="article-date">2020年11月4日</p>
<a href="/tags#CDN" >
<span class="tag-code">CDN</span>
</a>
<a href="/tags#HttpHeader" >
<span class="tag-code">HttpHeader</span>
</a>
<div class="article-summary">
<p>几个月前写过一篇关于 HTTP Header <code>Vary</code> 的<a href="https://chowyi.com/vary-response-header-causes-miss-cdn-cache/">文章</a>。上次它给我带来了一些麻烦,今天再来聊聊它,这次看看它是怎么帮到我的。</p>
</div>
<a class="more" href="/talk-about-http-header-vary-again/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/lets-talk-about-cdn-warm-up/">CDN预热是怎么回事儿</a>
</h2>
<p class="article-date">2020年9月28日</p>
<a href="/tags#CDN" >
<span class="tag-code">CDN</span>
</a>
<div class="article-summary">
<p>做运维工作总免不了跟 CDN 打交道。在我的工作中最常用到的,一个是阿里云 CDN,一个是 AWS CloudFront。由于众所周知的原因,通常我们在国内使用阿里云 CDN,在国外使用 AWS CloudFront。这里我就不比较孰优孰劣了,CDN 技术是一个很大的话题,今天只想简单聊聊 CDN 预热是怎么回事儿。</p>
</div>
<a class="more" href="/lets-talk-about-cdn-warm-up/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/terraform-configuration-language-common-usages/">Terraform Configuration Language常用代码段</a>
</h2>
<p class="article-date">2020年7月17日</p>
<a href="/tags#Terraform" >
<span class="tag-code">Terraform</span>
</a>
<div class="article-summary">
<p>近两个月写了不少 Terraform 的 Configuration Language, 从入门到熟悉,用起来也渐渐得心应手。从名字上看这是一种配置语言,但得益于 Terraform Provider 强大的可扩展性,它不仅可以像 Golang 或是 Python (Terraform本来就是使用Golang开发的)一样处理字符串,读写本地文件,甚至还可以发起网络请求! </p>
<p>这篇文章既不是教程(初学者建议先看官方文档学习),也不是进阶的知识分享。我在这里记录一些常用的代码段,希望像我一样的新手可以少走些弯路。</p>
</div>
<a class="more" href="/terraform-configuration-language-common-usages/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/jmespath-learning-notes/">JMESPath学习分享</a>
</h2>
<p class="article-date">2020年4月14日</p>
<a href="/tags#JMESPath" >
<span class="tag-code">JMESPath</span>
</a>
<div class="article-summary">
<p>在学习 AWS CLI 文档时偶然了解到 JMESPath,之前从没接触到类似的技术,赶紧学习了一番,顿觉收获颇丰,在此记录分享。</p>
</div>
<a class="more" href="/jmespath-learning-notes/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/custom-http-headers-on-cdn/">在CDN上配置自定义响应头(CloudFront)</a>
</h2>
<p class="article-date">2020年3月11日</p>
<a href="/tags#AWS" >
<span class="tag-code">AWS</span>
</a>
<a href="/tags#AWS Lambda" >
<span class="tag-code">AWS Lambda</span>
</a>
<a href="/tags#CloudFront" >
<span class="tag-code">CloudFront</span>
</a>
<div class="article-summary">
<p>今天接到一个小需求,要在业务系统的 HTTP 响应中添加几个安全相关的响应头。我的第一反应是在 Kong/Nginx 上配置,但我们的业务现在已经是 ServerLess 架构了,那么就要在 CDN 上做配置了。</p>
<p>我这里业务上用的 AWS CloudFront 和阿里云 CDN,同时我又去看了一下腾讯云 CDN 的配置方式,这里简单对比一下,我想重点说明的是 CloudFront。</p>
</div>
<a class="more" href="/custom-http-headers-on-cdn/">阅读全文</a>
</article>
<article class="article-card">
<h2 class="article-head">
<a href="/vary-response-header-causes-miss-cdn-cache/">Vary response header导致的CDN预热无效</a>
</h2>
<p class="article-date">2020年2月12日</p>
<a href="/tags#CDN" >
<span class="tag-code">CDN</span>
</a>
<a href="/tags#HttpHeader" >
<span class="tag-code">HttpHeader</span>
</a>
<div class="article-summary">
<p>今年春节被新型冠状病毒(2019-nCoV)困在家里了,哪也不敢去。不过远程工作已经开始了,前两天需要在阿里云CDN上预热一个静态资源,预热后浏览器访问却依旧很慢,响应头表明缓存未命中。咨询了阿里云技术支持,又查找了一些资料,终于搞明白了,详细记录如下。太长不看版请直接跳到文章尾部<a href="#%E6%80%BB%E7%BB%93">总结</a>。</p>
</div>
<a class="more" href="/vary-response-header-causes-miss-cdn-cache/">阅读全文</a>
</article>
<div class="guide-pager">
<a class="unvisible" href="/"><span class="page-arrow">←</span> Prev</a>
<a href="/page/2/">Next<span class="page-arrow"> →</span></a>
</div>
</main>
<div class="scroll-top">
<span class="arrow-icon"></span>
</div>
<footer class="app-footer">
<p class="copyright">
© 2021 | Proudly powered by <a href="https://hexo.io" target="_blank">Hexo</a> with <a href="https://github.com/yanm1ng/hexo-theme-vexo" target="_blank">Vexo</a>
</p>
<p class="copyright">
文章采用 BY-NC-SA 协议进行授权,如需转载请注明
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" class=""><img src="/images/cc-by-nc-sa.svg" alt="Creative Commons"></a>
</p>
</footer>
<script>
function async(u, c) {
var d = document, t = 'script',
o = d.createElement(t),
s = d.getElementsByTagName(t)[0];
o.src = u;
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
s.parentNode.insertBefore(o, s);
}
</script>
<script>
async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function(){
FastClick.attach(document.body);
})
</script>
<script>
var hasLine = 'true';
async("//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js", function(){
$('figure pre').each(function(i, block) {
var figure = $(this).parents('figure');
if (hasLine === 'false') {
figure.find('.gutter').hide();
}
var lang = figure.attr('class').split(' ')[1] || 'code';
var codeHtml = $(this).html();
var codeTag = document.createElement('code');
codeTag.className = lang;
codeTag.innerHTML = codeHtml;
$(this).attr('class', '').empty().html(codeTag);
figure.attr('data-lang', lang.toUpperCase());
hljs.highlightBlock(block);
});
})
</script>
<!-- Baidu Tongji -->
<script src="/js/script.js"></script>
</body>
</html>