瀏覽器請求過程-http

瀏覽器

  1. 用戶在瀏覽器中輸入 URL 網(wǎng)址
  2. 瀏覽器解析用戶輸入的 URL 地址 => 域名 + 端口
  3. 瀏覽器會先檢查本地緩存中有沒有這個域名 => IP
    • 如果有, 則直接使用IP進行訪問
    • 如果沒有, 則瀏覽器發(fā)起一個 DNS 系統(tǒng)調(diào)用(操作系統(tǒng)進行查找)
      • 操作系統(tǒng)檢查自己的緩存里有沒有這個域名
      • 沒有的話找系統(tǒng)的 hosts 文件中有沒有這個域名
      • 如果都沒有找到, 會對 DNS 服務(wù)器發(fā)起一個系統(tǒng)調(diào)用
  4. 瀏覽器通過一個本機的隨機端口建立一個與服務(wù)器指定端口(80)之間的連接通道
  5. 瀏覽器會將客戶端的一些信息打上一個“包”, 將這個“包”通過這個連接通道發(fā)送到服務(wù)端
  6. 打開服務(wù)端返回過來的“包”, 找到 Content-type, 決定如何處理響應(yīng)的內(nèi)容
  7. 如果是 HTML 則渲染到界面上
  8. “包”的概念是請求報文

注: 谷歌使用 chrome://net-intermals 查看瀏覽器緩存

服務(wù)器

  1. 打開客戶端提交過來的“包”, 拿到“包”里面的請求路徑
  2. 根據(jù)請求的路徑對應(yīng)文件擴展名找到文件的類型(MIME Type)
  3. 判斷文件類型是否為靜態(tài)文件
    • 如果是靜態(tài)文件, 則直接讀取這個文件的內(nèi)容
    • 如果不是靜態(tài)文件, 則交給“外包公司”執(zhí)行代碼
  4. 服務(wù)端拿到執(zhí)行的結(jié)果, 把要發(fā)給客戶端的數(shù)據(jù)打上一個“包”
  5. 將這個“包”再通過之前的連接通道發(fā)給客戶端

請求報文

image

響應(yīng)報文

image

可以利用 PHP 對響應(yīng)頭進行一些配置

<?php
// php 中 header 函數(shù)專門用于設(shè)置響應(yīng)頭, 不能設(shè)置兩個相同的, 會被覆蓋
// 設(shè)置響應(yīng)類型
header('Content-type: text/css');

// 設(shè)置跳轉(zhuǎn)(重定向)頁面
header('location: xxx.php');

// 讓文件下載
header('Content-type: application/octet-stream');

// 設(shè)置默認下載文件名
header('Content-Disposition: attachment; filename=demo.txt');

// 設(shè)置cookie
header('Set-Cookie: key=value');
?>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容