題外話:最近經歷面試,被問到至少三次這個問題,想起來總結一下。其實這個問題可以換個問法:請描述一下一次完整的http請求過程。
1、域名解析
域名解析的過程:
1).查詢瀏覽器自身DNS緩存
2).若上面沒有查找到,則搜索操作系統自身的dns緩存
3).若上面沒有找到,則嘗試讀取hosts文件
4).若上面沒有找到,向本地配置的首選DNS服務器發送請求
5).win系統 如果上面沒有找到,操作系統查找NetBIOS name cache
6).win系統 如果上面沒有找到,查詢wins服務器
7).win系統 如果上面沒有找到,廣播查找
8).win系統 如果上面沒有找到,讀取LMHOSTS文件
若以上多沒有找到,解析失敗
2、 TCP三次握手
3、瀏覽器向服務器發送http請求
一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令。例如:GET/sample/hello.jsp HTTP/1.1。
4、瀏覽器發送請求頭信息
瀏覽器發送其請求命令之后,還要以頭信息的形式向Web服務器發送一些別的信息,之后瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
5、服務器處理請求
服務器軟件收到http請求,確定執行什么(ASP.net PHP RUBY JAVA等)來處理他。讀取參數並進行邏輯操作后,生成指定的數據。
6、服務器做出應答
客戶機向服務器發出請求后,服務器會客戶機回送應答,HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態嗎
7、服務器發送應答頭信息
正如客戶端會隨同請求發送關於自身的信息一樣,服務器也會隨同應答向用戶發送關於它自己的數據及被請求的文檔。
8、服務器發送數據
Web服務器向瀏覽器發送頭信息后,它會發送一個空白行來表示頭信息的發送到此為結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。
9、tcp連接關閉
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼:
Connection:keep-alive
TCP連接在發送后將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬
推薦閱讀: