HTTP 請求的工作原理

從開始到結束,當你在瀏覽器中輸入URL時會發生什麼事情 HTTP協議 我僅分析URL請求 與macOS / Linux相關的事情 DNS查找階段 gethostbyname TCP請求握手 發送請求 請求行 請求標頭 請求主體 響應 解析HTML 本文描述了瀏覽器如何使用HTTP/1.1協議進行頁面請求 如果你曾經參加過面試,可能會被問到:“當你在Google搜索框中輸入內容並按下Enter鍵時會發生什麼”. 這是一個最常問的問題之一。人們只是想看看你是否能解釋一些相當基本的概念,以及你是否對互聯網的工作原理有任何了解。 在這篇文章中,我將分析當你在瀏覽器的地址欄中輸入URL並按下Enter鍵時會發生什麼。 這是一個非常有趣的主題,我可以在單獨的文章中深入探討其中的許多技術。 這項技術很少更改,並且為人類所建造的最複雜和最廣泛的生態系統之一提供動力。 HTTP協議 首先,我特別提到HTTPS,因為使用HTTPS連接的情況有所不同。 我僅分析URL請求 現代瀏覽器具有知道你在地址欄中輸入的是實際URL還是搜索詞的能力,如果不是有效的URL,它們將使用默認搜索引擎。 我假設你輸入的是實際URL。 當你輸入URL並按下Enter鍵時,瀏覽器首先構建完整的URL。 如果你只輸入了一個域名,例如flaviocopes.com,瀏覽器默認會在前面添加 HTTP://,使用預設的HTTP協議。 與macOS / Linux相關的事情 只是提一下。Windows可能會略有不同。 DNS查找階段 瀏覽器開始進行DNS查找以獲取服務器的IP地址。 域名對於我們人類來說很方便,但互聯網根據IP地址對服務器的精確位置進行組織,IP地址是一組類似 222.324.3.1(IPv4)的數字。 首先,它檢查DNS本地緩存,看看域名最近是否已被解析。 Chrome有一個方便的DNS緩存可視化工具,你可以在chrome://net-internals/#dns查看。 如果在那裡找不到任何內容,瀏覽器將使用DNS解析器,使用gethostbyname POSIX系統調用檢索主機信息。 gethostbyname gethostbyname首先在本地主機文件中查找,該文件在macOS或Linux中位於/etc/hosts,以查看系統是否在本地提供該信息。 如果這沒有提供有關該域的任何信息,系統將向DNS服務器發送請求。 DNS服務器的地址存儲在系統首選項中。 下面是兩個常用的DNS服務器: 8.8.8.8:Google公共DNS服務器 1.1.1.1:CloudFlare DNS服務器 大多數人使用由其網絡提供商提供的DNS服務器。 瀏覽器使用UDP協議執行DNS請求。 TCP和UDP是計算機網絡的兩個基礎協議。它們處於相同的概念層級,但TCP是面向連接的協議,而UDP是無連接的協議,更加輕量級,用於以較小開銷發送消息。 如何進行UDP請求不在本教程的範圍內 DNS服務器可能在緩存中有域的IP。如果沒有,它將向樹狀DNS服務器發送請求。這是一個由13台實際服務器(分佈在全球各地)組成的系統,該系統驅動整個互聯網。 DNS服務器不知道地球上每個域名的地址。它只知道頂級DNS解析器的位置。頂級域是域名的擴展名:.com,.it,.pizza等。 一旦根DNS服務器收到請求,它會將請求轉發給頂級域(TLD)DNS服務器。假設你正在尋找flaviocopes.com,根域DNS服務器會返回.com TLD服務器的IP。 現在我們的DNS解析器將緩存該TLD服務器的IP,所以它不需要再次向根DNS服務器請求。 TLD DNS服務器將具有我們正在查找的域的權威名稱服務器的IP地址。 如何做到的?當你購買一個域名時,域名註冊商會向相應的TDL發送名稱服務器。當你更新名稱服務器(例如,當你更換主機提供商時),你的域名註冊商將自動更新此信息。 這些是主機提供商的DNS服務器。通常有不止1個,以作為備份。 例如: ns1.dreamhost.com ns2.dreamhost.com ns3.dreamhost.com DNS解析器從第一個開始,並嘗試查詢你正在查找的域名(包括子域名)的IP。 這是IP地址的終極真相來源。 現在我們有了IP地址,可以繼續我們的旅程。 TCP請求握手 有了服務器的IP地址後,瀏覽器現在可以與服務器建立TCP連接。...

使用Axios进行HTTP请求

Axios是一个非常受欢迎的JavaScript库,可用于执行HTTP请求,并可在浏览器和Node.js平台上运行。 介绍Axios 安装 Axios API GET请求 给GET请求添加参数 POST请求 介绍Axios Axios是一个非常受欢迎的JavaScript库,可用于执行HTTP请求,并可在浏览器和Node.js平台上运行。 它支持所有现代浏览器,包括对IE8及更高版本的支持。 它基于Promise,这使得我们可以使用async/await代码来轻松地执行XHR请求。 与原生的Fetch API相比,使用Axios有很多优势: 支持较旧的浏览器(Fetch需要一个polyfill) 支持中止请求的方式 支持设置响应超时的方式 内置的CSRF保护 支持上传进度 执行自动的JSON数据转换 在Node.js中工作 安装 可以使用npm在Node.js中安装Axios: npm install axios 在浏览器中,可以使用unpkg.com将其包含在页面中: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 需要注意的是,API调用必须启用CORS,以便在浏览器中访问,否则请求将失败。 Axios API 可以从"axios"对象开始一个HTTP请求: axios({ url: 'https://dog.ceo/api/breeds/list/all', method: 'get' }) 这将返回一个promise。您可以使用async/await来解析该promise以获取响应对象: ;(async () => { const response = await axios({ url: 'https://dog.ceo/api/breeds/list/all', method: 'get' }) console.log(response) })() 为方便起见,通常会使用以下方法: axios.get() axios.post() 与jQuery中的$.ajax()相比,它们提供了更简洁的语法。例如: ;(async () => { const response = await axios.get('https://dog.ceo/api/breeds/list/all') console.log(response) })() Axios提供了所有HTTP动词的方法,虽然它们不太常用,但仍然会被使用:...

使用curl進行HTTP請求的指南

curl是一個強大的工具,可以讓你從命令行創建網絡請求。 curl是一個命令行工具,用於在網絡上傳輸數據。 它支持許多協議,包括HTTP、HTTPS、FTP、FTPS、SFTP、IMAP、SMTP、POP3等。 在調試網絡請求方面,curl是最好的工具之一。 這是一個工具,一旦你知道如何使用它,你就會再次使用。它是程序員最好的朋友。 它是通用的,可以在Linux、Mac、Windows上運行。請參考官方安裝指南在你的系統上安裝它。 有趣的事實:curl的作者和維護人員是瑞典人,因他的工作(curl和libcurl)對計算世界的貢獻而被瑞典國王授予獎項。 讓我們深入介紹一些與HTTP請求一起工作時,你最有可能執行的命令和操作。 這些示例涉及與HTTP一起工作,這是最常用的協議。 執行HTTP GET請求 獲取HTTP響應頭 僅獲取HTTP響應頭 執行HTTP POST請求 執行HTTP POST請求並發送JSON 執行HTTP PUT請求 跟隨重定向 將響應保存到文件中 使用HTTP驗證 設置不同的User Agent 檢查請求和響應的所有詳細信息 將任意瀏覽器網絡請求複製為curl命令 執行HTTP GET請求 當你執行一個請求時,curl將返回響應的主體: curl https://flaviocopes.com/ 獲取HTTP響應頭 默認情況下,curl在輸出中隱藏響應頭。要顯示它們,使用i選項: curl -i https://flaviocopes.com/ 僅獲取HTTP響應頭 使用I選項,你可以僅獲取響應頭,而不是響應體: curl -I https://flaviocopes.com/ 執行HTTP POST請求 X選項允許你更改HTTP方法。默認情況下,使用GET,等同於: curl -X GET https://flaviocopes.com/ 使用-X POST將執行POST請求。 你可以執行URL編碼的POST請求: curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/ 在這種情況下,發送application/x-www-form-urlencoded的Content-Type。 執行HTTP POST請求並發送JSON 與上面的示例不同,你可能希望發送JSON。 在這種情況下,你需要明確設置Content-Type頭,使用H選項: curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes....