博客系统知多少:揭秘那些不为人知的学问(二)
點(diǎn)擊上方關(guān)注“汪宇杰博客”
上篇《博客系統(tǒng)知多少:揭秘那些不為人知的學(xué)問(wèn)(一)》介紹了博客的歷史、我的博客故事及博客的受眾來(lái)源。本篇精彩繼續(xù),介紹博客基本功能設(shè)計(jì)要點(diǎn)。
1.“博客”的前世今生
2.我的博客故事
3.誰(shuí)是博客的受眾?
4. 博客基本功能設(shè)計(jì)要點(diǎn)
????4.1 文章(Post)
????4.2 評(píng)論(Comment)
????4.3 分類(lèi)(Category)
????4.4 標(biāo)簽(Tag)
????4.5 歸檔(Archive)
????4.6 頁(yè)面(Page)
????4.7 訂閱
????4.8 版本控制
????4.9 主題及個(gè)性化
????4.10 用戶(hù)及權(quán)限
????4.11 插件
????4.12 圖片及附件的處理
????4.13 敏感過(guò)濾及評(píng)論審查
????4.14 靜態(tài)化
????4.15 通知系統(tǒng)
5. 博客協(xié)議或標(biāo)準(zhǔn)
????5.1 RSS
????5.2 ATOM
????5.3 OPML
????5.4 APML
????5.5 FOAF
????5.6 BlogML
????5.7 Open Search
????5.8 Pingback
????5.9 Trackback
????5.10 MetaWeblog
????5.11 RSD
????5.12 閱讀器視圖
6. 設(shè)計(jì)博客系統(tǒng)有哪些知識(shí)點(diǎn)
??? 6.1 時(shí)區(qū)真的全用UTC?
????6.2 HTML還是Markdown
????6.3 MVC還是SPA
????6.4 安全
7. 結(jié)束語(yǔ)
0
1
文章 (Post)
我們每天可能都會(huì)閱讀或長(zhǎng)或短的3-5篇文章。文章是博客系統(tǒng)的核心業(yè)務(wù),因此博客文章的內(nèi)容和質(zhì)量非常重要。
那么,文章這個(gè)業(yè)務(wù)類(lèi)型如何起名?數(shù)據(jù)庫(kù)的表名和代碼的變量名,類(lèi)型名稱(chēng)用article嗎?好像上學(xué)時(shí)候只學(xué)過(guò)文章叫做article。其實(shí)博客類(lèi)型的文章,正確的表達(dá)是post,英文單詞里post和article的區(qū)別在于,post只是隨心所欲寫(xiě)的文章,而article指的是論文那樣的經(jīng)過(guò)精心雕琢,旁征博引,并且有可能在學(xué)術(shù)期刊上發(fā)表的文章。因此設(shè)計(jì)博客系統(tǒng)的時(shí)候,盡量避免使用article這個(gè)單詞來(lái)命名代碼。更具體來(lái)講,post中可以出現(xiàn)不嚴(yán)謹(jǐn)、口語(yǔ)化的表達(dá)方式,例如本文就算是個(gè)post。而article講究言語(yǔ)上的規(guī)范,連 “讓我們” , “我們來(lái)看看” 這種字眼都不能出現(xiàn)。
圖 | 網(wǎng)絡(luò)
文章需要具備標(biāo)題、Slug、創(chuàng)建時(shí)間、發(fā)布時(shí)間、修改時(shí)間、摘要和內(nèi)容等要素,也會(huì)包含所屬分類(lèi)、標(biāo)簽、閱讀量和點(diǎn)贊量等次要信息。其中Slug是博客的特色,它指的是一篇文章的URL。例如我的文章:《Try the New Azure .NET SDK》,它的URL為 https://edi.wang/post/2019/12/5/try-the-new-azure-net-sdk,其中try-the-new-azure-net-sdk即為該文章的Slug。Slug講究的是“人類(lèi)可讀”,一般情況下均為博客標(biāo)題對(duì)應(yīng)的英文表達(dá),用中劃線(xiàn)分割英文單詞,Slug也對(duì)博客的SEO起到了關(guān)鍵作用。如果你的博客文章用的是數(shù)據(jù)庫(kù)ID、文章標(biāo)題的HTML Encoding等做URL,請(qǐng)更換為Slug。特別是遇到中文文章,如果標(biāo)題被URL Encoding了,那么對(duì)于SEO和鏈接分享,都是災(zāi)難。一個(gè)Slug一旦定下,盡量不要改動(dòng),雖然大部分博客系統(tǒng)都支持修改Slug,但是對(duì)于被搜索引擎收入的文章,改了Slug就會(huì)導(dǎo)致404。比較完備的博客系統(tǒng)(如WordPress)支持采用301重定向方式告訴搜索引擎原文地址已變化。
摘要有兩個(gè)作用,一是用于在列表視圖中顯示文章信息預(yù)覽,二是用于SEO,放在description這個(gè)meta標(biāo)簽中,可以幫助搜索引擎精準(zhǔn)定收入的內(nèi)容。對(duì)于中文內(nèi)容,需要注意是否輸出的HTML源代碼被Encoding過(guò),ASP.NET Core默認(rèn)的Encoding會(huì)對(duì)SEO造成災(zāi)難(我的博客系統(tǒng)因?yàn)槊嫦蛴⒄Z(yǔ)用戶(hù),不考慮中文支持,所以并不解決這個(gè)問(wèn)題)。
(圖:文章列表中的摘要)
(圖:meta description標(biāo)簽代碼)
摘要可以自動(dòng)抓取文章前幾百字,也可以像微信公眾號(hào)那樣要求用戶(hù)手工填寫(xiě)。我的博客采用的是自動(dòng)取文章前400字。結(jié)合SEO的關(guān)系,我的文章通常開(kāi)頭段落就是概要,這樣可以讓用戶(hù)在搜索引擎預(yù)覽頁(yè)面就能看到準(zhǔn)確內(nèi)容,而不是頁(yè)面上無(wú)關(guān)緊要的UI元素。
(圖:必應(yīng)搜索引擎識(shí)別的內(nèi)容摘要)
文章的狀態(tài)通常包括:草稿、發(fā)布、回收。用戶(hù)僅能看到已發(fā)布的文章,管理員可在后臺(tái)更改文章?tīng)顟B(tài)。
0
2
評(píng)論(Comment)
評(píng)論是博客中作者和讀者互動(dòng)的主要方式。有些博客要求讀者登錄后才能發(fā)表評(píng)論,而有些可以允許游客評(píng)論(比如我的博客及WordPress)。登錄的好處在于可以識(shí)別你的讀者,并有效防止垃廣告評(píng)論。但要求登錄也會(huì)給用戶(hù)造成操作上多了一個(gè)步驟,嫌麻煩的用戶(hù)就不會(huì)進(jìn)行評(píng)論。
我的博客及WordPress默認(rèn)都設(shè)計(jì)為需要管理員在后臺(tái)審核評(píng)論后,才能放出顯示。這也能有效避免垃圾廣告、騷擾信息甚至是一些惡意的煽動(dòng)性言論。對(duì)于提供Email地址的用戶(hù),管理員也能夠在后臺(tái)回復(fù)用戶(hù)的評(píng)論,并由博客系統(tǒng)向用戶(hù)發(fā)送Email通知。
(圖:Moonglade的評(píng)論區(qū))
對(duì)于技術(shù)博客,評(píng)論可考慮開(kāi)放markdown格式。這是一種在程序員之間格外受歡迎的語(yǔ)法,在GitHub得到了廣泛應(yīng)用。
評(píng)論需要采用驗(yàn)證碼或其他人機(jī)驗(yàn)證技術(shù),以防止機(jī)器人發(fā)廣告。但根據(jù)經(jīng)驗(yàn),驗(yàn)證碼并不能100%阻止垃圾信息,因?yàn)楝F(xiàn)代化的垃圾信息還真的是人組團(tuán)發(fā)的,有專(zhuān)門(mén)的公司、團(tuán)隊(duì)、微信群等,國(guó)外也有。于是,你可能需要考慮關(guān)鍵詞過(guò)濾,購(gòu)買(mǎi)三方過(guò)濾接口等。
評(píng)論也得記得做字?jǐn)?shù)限制,不然也有可能會(huì)造成部分用戶(hù)“灌水”、刷屏的現(xiàn)象。
如果不想自己寫(xiě)功能,還可以整合三方的評(píng)論服務(wù),即博客系統(tǒng)本身不實(shí)現(xiàn)評(píng)論功能,通過(guò)三方服務(wù)加載外部JS,在文章閱讀頁(yè)面“注入”一個(gè)評(píng)論區(qū),通常這要求文章的URL不變(WordPress里叫做永久性URL)。
0
3
分類(lèi)(Category)
像建文件夾一樣將文章根據(jù)內(nèi)容進(jìn)行區(qū)分,即為分類(lèi)。文章分類(lèi)后,可以幫助讀者快速檢索同種類(lèi)的文章。
例如寫(xiě).NET、PHP、JS的文章都屬于 “開(kāi)發(fā)技術(shù)(Development)”這個(gè)分類(lèi)。而技術(shù)圈新聞和職場(chǎng)經(jīng)驗(yàn)分享和等文章,則屬于 “工作” 分類(lèi),分類(lèi)的劃分完全由用戶(hù)控制。分類(lèi)可以多對(duì)多。例如寫(xiě)一篇文章介紹了用ASP.NET Core開(kāi)發(fā)Angular應(yīng)用的文章,可以同時(shí)屬于 “.NET技術(shù)” 及 “前端開(kāi)發(fā)” 分類(lèi)。
分類(lèi)需要一個(gè)標(biāo)題、一個(gè)簡(jiǎn)介,以及一個(gè)路由名稱(chēng)。例如我博客,微軟云 Azure 的分類(lèi),標(biāo)題為 Microsoft Azure,簡(jiǎn)介為? The Best Cloud,路由名稱(chēng)為azure。標(biāo)題需要同時(shí)顯示在標(biāo)題欄,以便于SEO。簡(jiǎn)介是對(duì)于標(biāo)題的補(bǔ)充說(shuō)明,便于用戶(hù)查看。設(shè)計(jì)路由名稱(chēng)的原因請(qǐng)參考下一段介紹的標(biāo)簽的設(shè)計(jì)。
(圖:Moonglade博客系統(tǒng)的一個(gè)文章分類(lèi))
分類(lèi)的另一個(gè)功能就是產(chǎn)生 OPML 及 RSS/Atom 訂閱源,這個(gè)將在第五章介紹博客協(xié)議中講解。
0
4
標(biāo)簽(Tag)
一篇文章所提到的話(huà)題,即為文章的標(biāo)簽。和分類(lèi)一樣,標(biāo)簽也是多對(duì)多關(guān)系。標(biāo)簽可以作為檢索文章的依據(jù),類(lèi)似關(guān)鍵詞,快速查找相關(guān)內(nèi)容的文章。
標(biāo)簽需要考慮到標(biāo)簽含義重復(fù)的情況,例如:VS和Visual Studio是一個(gè)意思,VSCode、VSC和Visual Studio Code也是一個(gè)意思。那么用戶(hù)選擇標(biāo)簽的時(shí)候,最好使用智能提示推薦用戶(hù)使用已有標(biāo)簽。
對(duì)于博客系統(tǒng)設(shè)計(jì)者來(lái)說(shuō),還要考慮標(biāo)簽的URL。如果URL用的是標(biāo)簽本身的內(nèi)容,會(huì)導(dǎo)致很多問(wèn)題。當(dāng)標(biāo)簽名稱(chēng)為整個(gè)英文單詞,例如Excel,并不會(huì)發(fā)生問(wèn)題,因?yàn)閁RL通常是https://yourblog/tags/excel。但是如果標(biāo)簽內(nèi)容為 .NET Core、C#、Robots.txt,事情就變的有意思起來(lái)。https://yourblog/tags/robots.txt到底是在請(qǐng)求 tags下的robots.txt 文件還是在請(qǐng)求標(biāo)簽?自己作為博客系統(tǒng)設(shè)計(jì)者,當(dāng)然可以從程序上限制所有tags接受的路由參數(shù)都為標(biāo)簽,好像是解決了問(wèn)題,但SEO和掃描工具可不這么認(rèn)為,他們有大量by convention的規(guī)則會(huì)認(rèn)為是請(qǐng)求文件。
對(duì)于需要URL Encoding的標(biāo)簽內(nèi)容,更會(huì)導(dǎo)致URL缺乏可讀性,從而影響SEO。千萬(wàn)不要自作聰明地以為現(xiàn)代的搜索引擎可以處理好URL Encoding,一個(gè)URL是否干凈對(duì)SEO的影響很大。特別是當(dāng)標(biāo)簽是中文內(nèi)容的時(shí)候,如果全encoding了,URL就會(huì)非常冗長(zhǎng),甚至影響到SEO,也影響到博主分享鏈接。因此,我的博客系統(tǒng)為了處理標(biāo)簽URL,給每個(gè)標(biāo)簽都設(shè)計(jì)了規(guī)范化名稱(chēng)(normalized name),由系統(tǒng)根據(jù)標(biāo)簽內(nèi)容自動(dòng)產(chǎn)生,如 .NET Core 經(jīng)過(guò) normalize,會(huì)變成 dotnet-core,最終產(chǎn)生的URL即 https://edi.wang/tags/list/dotnet-core。
(圖:Moonglade博客系統(tǒng)的標(biāo)簽)
對(duì)于用戶(hù)來(lái)說(shuō),最容易犯錯(cuò)之一的就是把標(biāo)簽用成搜索關(guān)鍵詞。例如用戶(hù)寫(xiě)了一篇關(guān)于 Visual Studio Code的文章,那么標(biāo)簽可能會(huì)同時(shí)打VSCode、VSC和Visual Studio Code,但其實(shí)只要選擇一個(gè)標(biāo)簽即可。打太多同樣含義的標(biāo)簽會(huì)導(dǎo)致讀者無(wú)法完整檢索到所有相關(guān)文章,對(duì)搜索引擎來(lái)說(shuō),也是如此。所以如何用好標(biāo)簽,是博客設(shè)計(jì)者和用戶(hù)需要共同關(guān)注的要點(diǎn)。
標(biāo)簽云(Tag Cloud)是博客中用來(lái)列出最熱門(mén)標(biāo)簽的功能。通常使用跟大號(hào)字、更明顯的顏色來(lái)標(biāo)識(shí)出對(duì)應(yīng)文章較多的標(biāo)簽。標(biāo)簽云可以作為博客博主的個(gè)性化屬性,一眼就能看出博主熱衷于什么話(huà)題(比如Windows Phone?0.0)。
0
5
歸檔(Archive)
以時(shí)間(年、月、日)整理的博客文章即為歸檔,它和分類(lèi)的區(qū)別在于歸檔只以時(shí)間為標(biāo)準(zhǔn)來(lái)劃分文章。Archive的SEO相對(duì)于文章、分類(lèi)、標(biāo)簽來(lái)說(shuō),并不那么關(guān)鍵。所以除了URL可以按年月劃分以外,并沒(méi)有額外的講究。
例如:https://edi.wang/archive/2019/9 表示2019年9月的文章。https://edi.wang/archive/2019 則表示2019年所有的文章。歸檔功能主要用于給讀者按時(shí)間查詢(xún),看看博主某個(gè)時(shí)間都在干什么。設(shè)計(jì)這樣的功能可以提高讀者對(duì)博主的興趣,也是個(gè)人對(duì)外形象的一種展示。
(圖:Moonglade博客系統(tǒng)的歸檔)
0
6
頁(yè)面(Page)
頁(yè)面是博客的可選功能之一,事實(shí)上,它更接近于CMS的功能。有些內(nèi)容并不適合以文章的形式發(fā)布,比如“關(guān)于”頁(yè)面。這樣的頁(yè)面通常與發(fā)布時(shí)候的時(shí)間無(wú)關(guān),內(nèi)容也經(jīng)常更新,排版設(shè)計(jì)也非常自由,不單純是文字。
頁(yè)面通常不需要評(píng)論、標(biāo)簽和分類(lèi)等屬性,但可以有發(fā)布和編輯時(shí)間。和文章一樣,頁(yè)面也需要注意Slug。
(圖:我博客的關(guān)于頁(yè)面)
在我的博客系統(tǒng)中,頁(yè)面也選擇是否隱藏側(cè)邊欄,用戶(hù)也可以完全編寫(xiě)頁(yè)面的HTML及CSS代碼,并把頁(yè)面添加為導(dǎo)航菜單。WordPress對(duì)于頁(yè)面的處理更加完備,接近于CMS系統(tǒng)。
0
7
訂閱(Subscription)
讀者訂閱博客的主要方式有Feed(RSS/ATOM)及Newsletter。Feed方式本質(zhì)上是被動(dòng)訂閱,需要客戶(hù)端軟件發(fā)起請(qǐng)求給服務(wù)器,檢查是否有新文章發(fā)表,才能顯示到客戶(hù)端里。Newsletter一般采用Email形式主動(dòng)發(fā)送給訂閱用戶(hù),但這要求博客系統(tǒng)的編寫(xiě)者實(shí)現(xiàn)Email訂閱功能,也要求管理員維護(hù)Email服務(wù)。訂閱一般只推送近期發(fā)表的新文章,例如前10、20篇,而不會(huì)每次都推送全部文章導(dǎo)致客戶(hù)端爆炸。
(圖:Moonglade的RSS/ATOM訂閱源)
訂閱一般可按文章分類(lèi)提供,以便于只對(duì)某些分類(lèi)感興趣的讀者閱讀。有些博客系統(tǒng)也提供文章評(píng)論的訂閱源,以便讀者觀摩吐槽大會(huì)。
關(guān)于RSS及ATOM的詳細(xì)介紹請(qǐng)看5.1、5.2章節(jié)。
0
8
版本控制
更接近CMS的博客系統(tǒng)通常提供版本控制功能,允許用戶(hù)回滾文章或頁(yè)面的歷史版本。設(shè)計(jì)版本控制的時(shí)候,不能只考慮往前回滾,得還能再滾得回來(lái)。通常,用戶(hù)每次編輯一篇已經(jīng)寫(xiě)好的文章,就會(huì)產(chǎn)生一個(gè)新版本,類(lèi)似于git對(duì)于一個(gè)文件的commit。博客的版本控制也類(lèi)似于代碼版本控制,你可以選擇保存一篇文章的完整內(nèi)容作為歷史版本,也可以選擇每次只保存變化量信息(delta)。保存完整內(nèi)容不容易后續(xù)花費(fèi)大量時(shí)間精力 ,但是會(huì)占用較多存儲(chǔ)空間。保存內(nèi)容變化量節(jié)省數(shù)據(jù)庫(kù)空間,但實(shí)現(xiàn)代碼容易占用大量精力。
0
9
主題及個(gè)性化
好用的博客系統(tǒng)通常支持主題,畢竟個(gè)性化是博客本身應(yīng)有的特點(diǎn)之一。WordPress積累了大量的主題庫(kù),也允許自制主題。但是我的博客只支持更改主題色,還有很大上升空間。
1
0
用戶(hù)及權(quán)限
博客系統(tǒng)分為個(gè)人、團(tuán)隊(duì)及博客平臺(tái)。個(gè)人博客系統(tǒng)一般為單用戶(hù)(例如我的博客),不需要設(shè)計(jì)權(quán)限、注冊(cè)等功能。多用戶(hù)博客則需要實(shí)現(xiàn)不同的角色和權(quán)限,比如博客管理員、審核專(zhuān)員、撰稿人、評(píng)論管理員等等。無(wú)論是單用戶(hù)還是多用戶(hù)博客,集成一套成熟的三方RBAC方案可能是最高效的選擇,多數(shù)三方方案也都支持SSO,例如我博客支持的Azure AD。
1
1
插件
插件功能可以在不更改博客代碼的情況下,按需拓展博客的功能。WordPress以及BlogEngine都支持插件,但Moonglade還不行。
(圖:WordPress的插件市場(chǎng))
1
2
圖片及附件的處理
圖片格式
在2020年,圖片格式已經(jīng)非常自由,一般的博客JPG居多,程序員的博客PNG居多(畢竟都是屏幕截圖),像微信公眾號(hào)那樣采用WEBP格式現(xiàn)在同樣可取,只要讀者的設(shè)備兼容即可。一般BMP格式由于體積大會(huì)導(dǎo)致網(wǎng)絡(luò)傳輸慢,所以不推薦。同樣道理,GIF也要注意限制尺寸。
博客系統(tǒng)輸出圖片時(shí),需要采用正確的Mime Type,以保證客戶(hù)端的兼容性。一般直接輸出靜態(tài)文件本身不需要博客編寫(xiě)者手工處理Mime Type,但有專(zhuān)門(mén)圖片處理邏輯的博客(例如我的Moonglade)則需要留意保留圖片原本的Mime Type。
圖片水印
給上傳的圖片自動(dòng)加水印有助于保護(hù)版權(quán),水印內(nèi)容一般是博客的地址或博主名字。添加水印時(shí)要注意圖片尺寸調(diào)整水印的比例,以免擋住圖中重要內(nèi)容影響閱讀。對(duì)于過(guò)小的圖片,可選擇性的忽略水印。
另外,考慮到博客有可能會(huì)在發(fā)展過(guò)程中改名,建議添加水印的時(shí)候在系統(tǒng)中保留一份原始圖片,以便于后期更新水印內(nèi)容。
具體方法可參考我的文章《ASP.NET Core 給上傳的圖片加水印》。
圖片存儲(chǔ)
圖片存哪里是個(gè)值得思考的問(wèn)題。一般有3個(gè)地方存放:文件系統(tǒng)、數(shù)據(jù)庫(kù)、云上的Blob存儲(chǔ)服務(wù)。Moonglade支持文件系統(tǒng)及Azure Blob存儲(chǔ)。這三者各有優(yōu)缺點(diǎn)。
文件系統(tǒng)的優(yōu)勢(shì)在于直接serve static file速度最快,但如果圖片目錄本身位于網(wǎng)站目錄底下,會(huì)導(dǎo)致目錄不只讀而引起潛在安全問(wèn)題。比如初中時(shí)候很流行的給DVBBS上傳個(gè)改了拓展名的ASP web shell,盡管給web服務(wù)器上傳可執(zhí)行文件在2020年已經(jīng)基本絕跡了,但依然存在隱患,就好比就算你家里請(qǐng)了007當(dāng)保鏢也是需要夜間鎖好門(mén)。
數(shù)據(jù)庫(kù)存圖安全性最高,并且讓博客的數(shù)據(jù)只位于一個(gè)位置,方便管理和備份,十幾年前很流行這么做,但其實(shí)讀寫(xiě)圖片對(duì)數(shù)據(jù)庫(kù)有一定開(kāi)銷(xiāo),并且再由網(wǎng)站輸出,雙倍開(kāi)銷(xiāo),一般不推薦。
而云端Blob存儲(chǔ)服務(wù)目前來(lái)說(shuō)是最適合這個(gè)時(shí)代的方案,將圖片存儲(chǔ)在Blob中不僅能保證服務(wù)器目錄只讀,又能采用云本身的安全特性限制非正常訪(fǎng)問(wèn),還能通過(guò)CDN加速圖片輸出。要硬說(shuō)缺點(diǎn),就是云服務(wù)需要額外的金錢(qián),而沒(méi)錢(qián),是自己的問(wèn)題,不是云的問(wèn)題。
圖 | 網(wǎng)絡(luò)
圖片防盜鏈
作為網(wǎng)站開(kāi)發(fā)者,我們有時(shí)候不希望自己網(wǎng)站的圖片被其他網(wǎng)站直接引用。這在某些場(chǎng)景下會(huì)導(dǎo)致自己數(shù)據(jù)中心里巨大的帶寬消耗,也就意味著別人使用我們的圖片,我們要為此付錢(qián)。例如,你的網(wǎng)站是a.com,你有一張圖片是http://a.com/facepalm.jpg,而b.com在他們的網(wǎng)站上使用一個(gè)img標(biāo)簽來(lái)引用了你的圖片,這導(dǎo)致網(wǎng)絡(luò)請(qǐng)求是進(jìn)入你的數(shù)據(jù)中心,消耗你的資源。因此博客可選擇性的啟用防盜鏈功能,具體方法可參考我的文章《ASP.NET / Core 網(wǎng)站圖片防盜鏈》。
? 附 件
通常程序員的技術(shù)博客會(huì)提供讀者下載代碼樣例等附件。設(shè)計(jì)附件功能和設(shè)計(jì)圖片存儲(chǔ)非常類(lèi)似,完全可行。但我更建議技術(shù)博客將代碼示例等附件托管到其他網(wǎng)站(例如GitHub)提供讀者下載。
自己博客實(shí)現(xiàn)附件下載的壞處有:
大文件
不同的Web服務(wù)器及防火墻產(chǎn)品對(duì)文件尺寸的限制不同,而部署博客的用戶(hù)很可能無(wú)權(quán)管理這些限制,就會(huì)導(dǎo)致大附件無(wú)法提供下載。
域及IP黑名單
某些公司或組織(特別是安全規(guī)范較高的軟件公司)會(huì)屏蔽非白名單域的文件下載,盡管你可以用瀏覽器正常打開(kāi)該域的網(wǎng)頁(yè),但無(wú)法下載文件(防火墻只允許HTML/CSS/JS等,而不允許ZIP、EXE等)。而程序員博客的讀者很有可能就處在這樣的公司里。
CDN資源耗費(fèi)
如果你的附件較多,較大,并且你也像設(shè)計(jì)圖片存儲(chǔ)一樣給附件系統(tǒng)套了個(gè)CDN,此時(shí)根據(jù)CDN服務(wù)商計(jì)費(fèi)模式的不同,如果按流量計(jì)費(fèi),恐怕你的附件下載會(huì)導(dǎo)致你的錢(qián)包加速瘦身。
而采用三方文件下載(如GitHub、OneDrive)的好處有:
√ 你的文件不僅可以分享到博客文章中,也可以分享到別的位置;
√?這些三方服務(wù)有自己的CDN,而不用擔(dān)心消耗你自己的錢(qián)包;
√?許多文件托管服務(wù)有完整的管理功能,例如文件刪除、恢復(fù)、版本控制、權(quán)限等,要是自己在博客系統(tǒng)里寫(xiě)一個(gè)這個(gè),需要花費(fèi)大量時(shí)間……
1
3
敏感詞過(guò)濾及評(píng)論審查
博客難免引來(lái)一些抱有敵意的人,也會(huì)引來(lái)發(fā)廣告的人,所以通常需要敏感詞過(guò)濾和評(píng)論審查。如果沒(méi)有審查直接將用戶(hù)的評(píng)論顯示在文章下,那么可能會(huì)對(duì)博主和網(wǎng)站本身帶來(lái)不良影響。例如,有人發(fā)了政治敏感的言論或者不合規(guī)的廣告,沒(méi)有經(jīng)過(guò)后臺(tái)審核就直接顯示出來(lái)了,而你的博客部署在大陸,那么你的博客很可能會(huì)被馬上關(guān)停整頓,并且自己也會(huì)解鎖程序員從入門(mén)到如入獄的成就。也千萬(wàn)不要以為部署在境外就沒(méi)事了,一些仇恨性質(zhì)的言論甚至可以幫你引來(lái)黑客,在你的博客里下毒,勒索你或你的讀者。
圖 | 網(wǎng)絡(luò)
因此我強(qiáng)烈建議個(gè)人博客啟用敏感詞過(guò)濾及評(píng)論審查功能。WordPress及我的Moonglade博客系統(tǒng)均支持敏感詞過(guò)濾和評(píng)論審查。
1
4
靜態(tài)化
早期的新聞系統(tǒng)、博客、CMS為了提高大訪(fǎng)問(wèn)量下的響應(yīng)速度,都會(huì)采用靜態(tài)化技術(shù),即將服務(wù)端渲染完的頁(yè)面保存為真正的HTML文件于磁盤(pán)上,進(jìn)行static file的輸出,Web服務(wù)器輸出static file的效率非常高,對(duì)于不變的內(nèi)容,用戶(hù)的后續(xù)訪(fǎng)問(wèn)不會(huì)hit數(shù)據(jù)庫(kù),因此極大減小了服務(wù)器的壓力。在2020年的今天,靜態(tài)化已經(jīng)不是唯一的方案,Redis Cache也可以幫助我們減少對(duì)數(shù)據(jù)庫(kù)的頻繁訪(fǎng)問(wèn)。對(duì)于個(gè)人博客來(lái)說(shuō),如果你的訪(fǎng)問(wèn)量不高,其實(shí)并不需要996一個(gè)靜態(tài)化或Redis出來(lái)增加開(kāi)發(fā)和維護(hù)成本。但如果你設(shè)計(jì)的是博客平臺(tái),那么最好還是用上靜態(tài)化或Redis吧。
1
5
通知系統(tǒng)
博客通常通過(guò)Email的形式給管理員或用戶(hù)發(fā)送通知。但是沒(méi)有規(guī)范或或約定表示博客是否一定得使用Email進(jìn)行通知推送,可由博客系統(tǒng)設(shè)計(jì)者自行決定。
通知通常包括:
向博主發(fā)送的通知:新評(píng)論、文章被他人博客引用(參見(jiàn)第5.8, 5.9章)。
向用戶(hù)發(fā)送通知:新文章發(fā)布(訂閱Newsletter)、評(píng)論被回復(fù)、評(píng)論審核通過(guò)或被拒。
Email通知系統(tǒng)要注意垃圾郵件及用戶(hù)隱私保護(hù)問(wèn)題。
圖 | 網(wǎng)絡(luò)
垃圾郵件發(fā)給博主本身問(wèn)題并不大,但得注意郵件系統(tǒng)是否會(huì)允許未經(jīng)博主許可的針對(duì)讀者的郵件發(fā)送,其中可能會(huì)被人利用發(fā)垃圾郵件,從而導(dǎo)致服務(wù)器被封禁。有些服務(wù)器供應(yīng)商,例如微軟Azure,對(duì)于郵件有更加嚴(yán)格的規(guī)定,部署在部分PaaS業(yè)務(wù)上的代碼調(diào)用SMTP終端會(huì)被直接屏蔽。
對(duì)于用戶(hù)隱私問(wèn)題,在用戶(hù)向博客系統(tǒng)提供Email地址的同時(shí),需要告知用戶(hù)該Email地址會(huì)被如何使用(可寫(xiě)在隱私協(xié)議或頁(yè)面可見(jiàn)區(qū)域),也可以讓用戶(hù)勾選是否允許博主使用該Email進(jìn)行通知推送。另一個(gè)問(wèn)題是郵件地址暴露,這通常發(fā)生在Newsletter的訂閱群發(fā),如果把所有訂戶(hù)的Email地址都放在To或CC里,那么每個(gè)用戶(hù)都會(huì)知道其余所有人的Email地址,從而互相約炮、欺詐,因此Newsletter請(qǐng)采用BCC或單獨(dú)發(fā)送,并允許用戶(hù)退訂。
Moonglade的通知系統(tǒng)采用Email方式,但設(shè)計(jì)比較基礎(chǔ)。一個(gè)完善的通知系統(tǒng)需要采用消息隊(duì)列及事件設(shè)計(jì),并采用三方服務(wù)。例如Azure上可以使用Storage Queue + Function App + SendGrid,以免遇到大批量Email發(fā)送的時(shí)候原地爆炸。
下篇將主要介紹
【博客協(xié)議或標(biāo)準(zhǔn)】
歡迎關(guān)注
汪宇杰博客
.NET | Azure |?微軟MVP
長(zhǎng)按二維碼獲取我的最新技術(shù)分享
喜歡本篇內(nèi)容請(qǐng)點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的博客系统知多少:揭秘那些不为人知的学问(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【新插件发布】AzureAD运维Exce
- 下一篇: 博客系统知多少:揭秘那些不为人知的学问(