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來說速度更快。

創建一個帶有自簽名證書的 Express HTTPS 伺服器

如何為 Node.js 創建一個自簽名的 HTTPS 證書以在本地測試應用程式 要能夠從本地主機上提供 HTTPS 的網站,您需要創建一個自簽名證書。 自簽名證書足以建立一個安全的 HTTPS 連接,用於開發目的。儘管瀏覽器會報錯說該證書是自簽名的(並且因此不受信任)。 要創建證書,您必須在系統上安裝 OpenSSL。 您可能已經安裝了它,只需在終端中嘗試鍵入 openssl 即可。 如果沒有,在 Mac 上,您可以使用 brew install openssl(如果您使用的是 Homebrew)。否則,請在 Google 上搜索“如何在 ”。 安裝了 OpenSSL 之後,運行以下命令: openssl req -nodes -new -x509 -keyout server.key -out server.cert 您會被提示回答幾個問題。第一個是國家名稱: Generating a 1024 bit RSA private key ...........++++++ .........++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request....

如何在本地主機上配置React應用程序的HTTPS

如果您使用create-react-app建立應用程序並在本地計算機上運行它,則默認情況下它將使用HTTP協議進行服務。 任何在生產環境運行的應用程序都將使用HTTPS,它是HTTP的安全版本。 在大多數情況下,您將輕而易舉地獲得HTTPS,特別是如果您使用像Netlify或Vercel這樣的現代平台來提供應用程序的話。 但是在本地環境中,情況會比我們希望的要複雜一些。 讓我們看看您可以如何實現這一點! 正如您所知,create-react-app應用程序是通過npm run start或簡單地通過npm start運行的,因為在package.json文件的scripts部分中,我們有這一行: "start": "react-scripts start" 將其更改為: "start": "HTTPS=true react-scripts start" 這將HTTPS環境變量設置為true值。 但這還不夠。 現在,我們還需要生成一個本地證書。這一步對於任何應用程序都是有效的,不僅僅限於create-react-app應用程序,但我將在本文中包含它作為參考。 注意:我在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文件。 現在將package.json文件中的start腳本更改為: "start": "export HTTPS=true&&SSL\_CRT\_FILE=cert.pem&&SSL\_KEY\_FILE=key.pem react-scripts start", 如果您運行npm run start,並訪問https://localhost:3000(或您的應用程序使用的端口,如果不同-在我的情況下是3008),您應該會看到此警告消息: 要在macOS上解決此問題,請按照我的教程如何在macOS上安裝本地證書的說明進行操作。 一旦您這樣做了,您就可以正常查看使用SSL提供的應用程序了:

如何配置 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 是必需的):...