HTTP vs HTTPS

探索HTTP和HTTPS之間的主要差異,了解為什麼HTTPS對於一切都更快更好。 HTTP(超文本傳輸協議)是我們所知的網絡的協議基礎。 它位於TCP之上,TCP位於IP之上。 網頁可以使用HTTP或HTTPS(超文本傳輸協議安全版)。 它們有什麼不同?為什麼現在Chrome將HTTP標記為不安全呢? 安全性 當您從服務器請求一個HTTP頁面時,數據會通過許多不同的網絡,每個網絡都由一個單獨的公司或實體控制。 從WiFi路由器開始,可能是咖啡店擁有的,也可能是城市公共網絡基礎設施擁有的,網絡中的每個節點都可以看到請求和響應,並以任何方式修改它。 它們可能會注入廣告,可能會注入惡意軟件,可能會記錄您輸入的任何憑據。中間的服務器可以充當中間人,發送被破壞的信息。 這也適用於任何未安全的Internet協議。 HTTPS流量是端到端加密的,這意味著在您和網絡另一端的服務器之間交換的信息中間沒有任何人可以閱讀。 端口 默認情況下,HTTP使用端口80提供服務,而HTTPS使用端口443提供服務。這些是默認端口,但Web服務器可以選擇在不同的隨機端口上提供內容,此時您需要在地址欄中指定: http://flaviocopes.com http://flaviocopes.com:80/javascript https://flaviocopes.com:8081/javascript HTTPS速度慢嗎? 不是!相反地。 有一個關於頁面速度的神話。人們認為為了HTTPS所需要的TLS握手會使頁面速度變慢,但實際上,HTTPS頁面可以比HTTP頁面加載得更快。 為什麼?因為有了HTTP/2,HTTP協議的最新版本。HTTP/2可以並行提供請求,並要求建立安全連接,因此,如果您的服務器使用支持HTTP/2的現代Web服務器,那麼使用HTTPS時,您的網頁將會有顯著的速度提升。 HTTP/2引入了更好的並行處理、多路複用和壓縮,這是HTTP的一個很好的更新。 請參閱以下網頁的示例:<https://www.httpvshttps.com/>和<https://www.troyhunt.com/i-wanna-go-fast-https-massive-speed-advantage/> HTTPS是否會影響SEO? 是的。 特別是,Google表示,HTTPS在SEO方面會給您帶來優勢。 此外,Google將會在其Chrome瀏覽器中正式將HTTP網站標記為不安全,這清楚地表明,如果您關心Google的需求並且想利用這一點,您應該盡快切換到HTTPS。最好的時間應該是3年前,下一個最好的時間就是今天。 實施HTTPS是否困難? 一點也不。由於Let’s Encrypt提供免費的SSL證書,對HTTPS的推動產生了巨大的影響,現在每個體面的託管提供商都免費為所有帳戶實施它。多虧了這一點,在2018年HTTPS連接比HTTP連接更多。 在過去,對於一個普通網站來說,獲得SSL證書是一個高級選項,只有少數人願意為之支付費用,因為該網站不會賺錢或者不處理用戶數據。 如今已經沒有任何藉口了。

HTTPS協議

HTTPS協議是HTTP(超文本傳輸協議)的一個擴展,提供了安全的通信。 HTTP本身設計上存在不安全性。 當你在瀏覽器中打開並請求網頁時,你的數據需要經歷2次傳輸:一次從瀏覽器到網頁服務器,一次從網頁服務器到瀏覽器。 此外,根據網頁內容的不同,可能需要更多的連接來獲取CSS文件、JavaScript文件、圖片等等。 在這些連接中,你的數據可能會被任何網絡節點進行檢視和操控。 這可能帶來嚴重的後果:你的所有網絡活動可能被一個你甚至不知道其存在的第三方監視和記錄,一些網絡可能會注入廣告,而且你可能會成為中間人攻擊的目標,這是一種安全威脅,攻擊者可以操縱你的數據,甚至冒充你的計算機進行網絡操作。對於某個人來說,只要在公共的未加密的Wi-Fi網絡上聽取HTTP數據包是非常容易的。 HTTPS旨在從根本上解決這個問題:你的瀏覽器和網頁服務器之間的整個通信過程都是加密的。 隱私和安全是當今互聯網的一個重大關注點。幾年前,你可能只需要在登錄保護的頁面或電子商務結帳時使用加密連接。由於SSL證書的價格和複雜性,大多數網站僅使用HTTP。 而今天,任何網站都需要使用HTTPS。整個Web中超過50%的網站正在使用HTTPS。Google Chrome最近開始將HTTP網站標記為不安全,只為了給你一個強制在所有網站上強制使用HTTPS的合理理由。 使用HTTP時,默認的服務器端口是80,使用HTTPS時是443。如果服務器使用默認端口,則無需額外添加。 HTTPS有時也被稱為HTTP over SSL或HTTP over TLS。 兩者之間的區別很簡單:TLS是SSL的後繼者。 使用HTTPS時,唯一不加密的是網頁服務器的域名和服務器端口。 其他所有信息,包括資源路徑、標頭、Cookie和查詢參數都是加密的。 我不會詳細分析TLS協議的工作原理,但你可能認為它會增加相當多的開銷,你是對的。 在處理網絡資源時增加的任何計算都會給客戶端、服務器端和傳輸的數據包大小帶來開銷。 然而,HTTPS使得使用最新的協議HTTP/2成為可能,這相對於HTTP/1.1具有巨大的優勢:速度更快。 原因有很多,其中之一是標頭壓縮,另一個是資源多路徑。還有服務器推送功能,當請求某個資源時,服務器可以同時推送所需的所有資源(圖片、CSS、JS)。 除此之外,HTTP/2相對於HTTP/1.1有著更多的優點,前提是使用現代的設置進行合理配置,這使得HTTPS相對於HTTP來說速度更快。

什麼是反向代理?

了解什麼是反向代理以及其有什麼用處! 在談到伺服器時,聽到「反向代理」這個詞是很常見的。 在本文中,我想解釋什麼是反向代理,以及它的作用。 首先,讓我們談一下「代理」這個詞。代理是一個伺服器,接受客戶端的連接,這些客戶端在其網絡設置中主動配置了代理伺服器。 當客戶端與伺服器建立連接時,請求始終通過該代理伺服器傳遞。 這種做法有幾種用途。公司和組織可以設置代理伺服器來過濾連接、提供更高的安全性並記錄流量。如果不使用代理,客戶端無法連接到外部網絡。代理伺服器還有助於提供隱私並避免國家政府對網絡的限制。 另一方面,反向代理是由伺服器設置的。對於客戶端而言,它是完全透明的,他們不知道這個中間人的存在,但它在伺服器上做了一個非常有用的工作,過濾請求並將它們發送到處理這些請求的相應服務。 常常使用Nginx作為反向代理(也可以參考我們的nginx反向代理文章),並且運行在內部端口上的Node.js服務不可以外界訪問。 在這種情況下,Nginx充當主要的請求處理程序,並將相應的請求發送到特定的服務,例如將特殊子文件夾或URL鏈接到特定服務。 我們可以有兩個完全不同的Node.js應用程序,而用戶不需要知道該信息。 除了我們開發人員主要使用的路由功能之外,反向代理還非常適合過濾和保護避免攻擊,作為防火牆,引入緩存,配置SSL,處理負載平衡,AB測試等等。

如何生成本地 SSL 證書

註:我在 macOS 上運行了這些命令。Linux 應該以相同的方式運行。我不能保證 Windows 的運行結果。 在專案的根目錄下運行以下命令: openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365 現在運行以下命令: openssl rsa -in keytmp.pem -out key.pem 現在你應該在資料夾中有 cert.pem 和 key.pem 兩個文件。 使用 Express/Node.js,你可以使用以下代碼加載證書和私鑰: const fs = require('fs') const https = require('https') const app = express() app.get('/', (req, res) => { res.send('Hello HTTPS!') }) https.createServer({ key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }, app).listen(3000, () => { console.log('Listening...') }) 如果你使用的是 create-react-app,請將 package.json 文件中的 start 腳本更改為:...

如何配置 Nginx 进行 HTTPS

如何使用 Let’s Encrypt 在您的 Web 服务器上设置 HTTPS 最近,我使用官方的 Node.js droplet 在 DigitalOcean 上设置了一个 VPS,它会安装 Ubuntu Linux 并将 Node 和 Nginx 配置为反向代理,也就是说,它是用户和您的 Node.js 应用程序之间的中间人。 默认情况下,droplet 配置为使用 HTTP,但我们希望我们的应用程序使用 HTTPS,这是 HTTP 的安全版本。 因此,我们需要进行一些操作,包括使用 Certbot 通过 Let’s Encrypt 获取 SSL 证书,并配置 Nginx 使用该证书。 我们将按照以下步骤进行操作: 安装 Certbot 和 Certbot Nginx 包 设置 Nginx 使用 Certbot 生成 SSL 证书 安装 Certbot 和 Certbot Nginx 包 以下说明假设您使用的是 Ubuntu、Debian 或任何使用 apt-get 管理软件包的其他 Linux 发行版: sudo apt-get install certbot python3-certbot-nginx 设置 Nginx 编辑 /etc/nginx/sites-available/default 文件以设置正确的服务器名称(这对于 SSL 是必需的):...