??????????????????????前面我們已經說過http請求分為三部分,請求行,請求頭和請求體
請求頭包含若干個屬性:格式為屬性名:屬性值,這篇文章我們就來介紹一下http請求頭中一些常見屬性的含義
我們以淘寶網為例進行講解
🏍?🏍?🏍?屬性1:Accept
含義:瀏覽器支持的MIME媒體類型,比如text/html(HTML文本),application/json(json文件),image/webp(webp格式的文件),等
觀察上圖我們可以發現,Accept屬性里支持很多格式的圖片,比如svg,webp等,image/*表示支持所有格式的圖片
🏍?🏍?🏍?屬性2:Accept—Encoding和Accept—Language
Accept-Encoding:瀏覽器發給服務器,聲明瀏覽器支持的編碼類型,比如gzip,deflate等
Accept-Language:客戶端接受的語言格式,比如zh-CN
如下圖所示,可以看到這兩個屬性值
🏍?🏍?🏍?屬性3:Connection:keep-alive
含義:開啟HTTP持久連接
🏍?🏍?🏍?屬性4:Host
含義:服務器的域名
如下圖,百度服務器的域名是www.baidu.com
🏍?🏍?🏍?屬性5:Origin
含義:告訴服務器請求從哪里發起,僅包括協議和域名
下圖是淘寶登錄頁的Origin屬性
如果存在跨域請求CORS,可以看到響應頭中就會出現對應的Access-Control-Allow-Origin屬性
🏍?🏍?🏍?屬性6:Referer(非常重要)
含義:告訴服務器請求的原始資源的URL,其用于所有類型的請求,并且包括協議+域名+參數
應用場景說明:
很多電商的搶購服務會用這個作為限制,必須通過某個入口地址進來才有效,比如上圖的Referer指定淘寶首頁下的某個路徑才有效,這樣就可以防止用戶通過某些特殊渠道直接進入到搶購頁面不停的刷單刷屏而導致其他用戶無法進入
🏍?🏍?🏍?屬性7:User-Agent(非常重要)
含義:服務器通過這個請求頭判斷用戶的軟件的應用類型,操作系統,軟件開發商以及版本號,瀏覽器內核信息等
應用場景說明:
風控系統,反作弊系統,反爬蟲系統的信息參考,舉個例子,我們通過自己偽造的某臺設備去爬取某網站的數據,而只有通過瀏覽器訪問的設備才有對應的設備信息,我們偽造的設備是不具有這類信息的,這樣瀏覽器就會檢測到虛假信息從而起到攔截爬蟲的作用
🏍?🏍?🏍?屬性8:Cookie
含義:表示服務端給客戶端傳的http請求狀態,也是多個key=value(鍵值對形式組合 ),比如登錄后的令牌等,后續會詳細講解
🏍?🏍?🏍?屬性9:Content—Type
含義:HTTP請求提交的內容類型,一般只有post提交時才需要設置,比如文件上傳,表單提交
下圖表示的是UTF-8編碼的純文本格式,關于Content-type的具體屬性值,后續會講解
🏍?🏍?🏍?知識拓展1:什么是跨域請求
跨域請求(Cross-Origin Request)發生在瀏覽器中,當網頁通過前端代碼(如JavaScript)請求與當前頁面不同源的資源時。?源(Origin)?由協議(如HTTP/HTTPS)、域名和端口號共同定義,三者任一不同即視為跨域。例如:?
當前頁面URL為https://a.com,請求https://b.com/data(域名不同)
當前頁面URL為http://a.com,請求https://a.com/api(協議不同)
當前頁面URL為http://a.com:80,請求http://a.com:8080(端口不同)
🏍?🏍?🏍?知識拓展2:跨域請求的解決方案(CORS)
跨域請求(CORS - Cross-Origin Resource Sharing)是一種W3C標準,用于解決Web應用(尤其是使用XMLHttpRequest或Fetch API發起請求的Ajax應用)因瀏覽器同源策略而導致的跨域數據訪問限制問題。同源策略是瀏覽器的一項安全機制,規定了一個源(origin,由協議、域名、端口號三者組合而成)下的文檔或腳本只能與同源的資源交互,禁止不同源之間的讀寫操作,以防止惡意網站竊取敏感數據。
在CORS機制下,服務器通過在HTTP響應頭中添加特定的標志來告知瀏覽器允許哪些源進行跨域請求。Access-Control-Allow-Origin是核心字段,用來指定允許哪些源可以訪問資源
簡單請求(如GET/POST/HEAD)直接發送,非簡單請求(如PUT/DELETE)需預檢(OPTIONS)
如果服務器沒有正確配置CORS響應頭,或者拒絕了來自特定源的請求,瀏覽器會阻止客戶端腳本獲取響應內容,從而保護用戶的隱私和安全。