nginx基礎(3)


我叫張賀,貪財好色。一名合格的LINUX運維工程師,專注於LINUX的學習和研究,曾負責某中型企業的網站運維工作,愛好佛學和跑步。
個人博客:傳送陣
筆者微信:zhanghe15069028807,非誠勿擾。

HTTP首部

首部:指的就是一種格式而已,而這種格式指的就是名稱+值,比如content-type:images/gif明確要求要傳輸的內容類型必須是gif的圖片,這是一個響應的報文,在一個報文當中首部可以有多個.

首部大體可以分為五類:

  1. 通用首部

  2. 請求首部

  3. 響應首部

  4. 實體首部,用於指定實體的屬性

  5. 擴展首部:非標准首部,可能是由程序開發者創建的,例如X-Forward-For

1、通用首部

一看名字就知道這是通用的首部,哪個和哪個通用呢?當中是請求和響應通用

connection:定義c/s之間關於請求的有關選項,比如對於http1.0版本來講有一個首部有這樣的
connection:keep-alive  #由於1.0並不是原生支持保持連接,所以我們要明確指定,1.0默認是不支持的。
VIA:     #報文經過了哪些代理,比如一個游戲服務器其實是內網,用的端口映射到外網,那么這防火牆就是一個代理。
cache-control:  #緩存指示,1.1比較常用在這里先提一下,后面還會再講,用於控制緩存的生效機制
pragma        #這個選項知道即可,主要用於1.0的版本當中,功能與cache-control類似,與緩存相關

2、請求首部

2.1 必有首部

Client-IP     客戶端的IP地址,為會要加IP?不是在封裝的時候會封裝的嗎?下文當中有解釋
HOST:			請求的主機名和端口號,加虛擬主機的原因是虛擬主機環境下用於不同的虛擬主機
Rferer:		指明了請求當前資源的原始資源的URL,從哪里跳轉過來的,可用於防止盜鏈
User-Agent:	用戶代理,使用什么工具發出的請求,就是用的什么瀏覽器
Accept首部:	用戶標明客戶自己更傾向的使用的方式。
accept-charset:支持使用字符表
accept-encoding:支持使用的編碼方式
accept-language:支持使用的語言

client-ip:在這里加IP的原因是,當客戶端的請求到達服務器的時候,源/目標IP 源/目標端口 都會被內核拆掉,應用層不知道這個數據認誰發起的,如果想要讓位於用戶空間的的http進程知道的話就得在應用層的信息也要加上IP地址,其實這個不加也是可以的,服務器也會有別的辦法的。

rferer:如果我們在A網頁還有超鏈接那么我們可以到B網頁,那么到B網頁的方式有兩種,一是在瀏覽器輸入URL,二就是從別的網頁當中跳轉過來,而rferer就是請求是從哪里過來的,不要小看這個功能,有的網站為了防止盜鏈就會拒絕從別的域名鏈接過來的連接,只能從通過URL訪問。

accept:客戶端要會要求服務器發送什么媒體類型,比喻客戶端會要求服務器發什么字符集、編碼、是否壓縮、支持什么語言,接不接收圖片,有的網址很有可能提供多種語言的頁面,如果客戶端在三次握手之后給服務器發送一個accept-language:chinaese,那么服務器如果有中文的網站就會把中文網頁返回客戶端,而不是只知道傻傻的返回英文網頁。

2.2 條件請求首部

如果一個網站有很多的圖片,客戶端通過瀏覽器訪問一次之后在客戶端本地是有緩存的,我們下一次再訪問這個網站的時候,客戶端並不會上來就請求其頁面,而是看看本地有沒有緩存的,一旦有緩存的就會向服務器發送一個條件請求:自從XX時間之后有沒有修改過資源,如果服務器回應沒有修改過(304),客戶端就使用本地緩存的,而不會請求新的,如果服務器回應有過改動的話(200),那么客戶端會再次GET一個新的網頁到本地。

expect:     客戶端告訴服務器自己期待的行為
If-Modified-since:是否在指定時間以后修改過此資源
if-none-match:  #一個都不匹配

2.3 安全相關首部

authorization: 客戶端提交給服務端的認證數據,如賬號密碼
cookie:   第一版cookie客戶端發送給服務器的身份標識
cookie2:  第二版cookie

cookie是客戶端從服務器發送的身份標識。HTTP無狀態的,也主是說我們訪問一個網頁之后過一會再次訪問的話之前的痕跡也就沒有了,因為HTTP是無狀態的,但是實際上我們使用時情況並不是這樣,用戶通過網頁版騰訊視頻看了幾個節目,下個星期之后再次打開騰訊視頻,發現還有歷史記錄,這是怎樣實現的呢?

如上圖:其實是通過cookie來實現的,cookie只是有一個瀏覽器集成的軟件,當我們訪問某個網站的時候,網站給我們發一個令牌(cookie)用於驗證我們的令牌,而cookie還有一個服務端在網站服務器上,HTTP由於是無連接的,所以並不記錄我們的訪問記錄,而cookie是記錄的,cookie令牌默認是保存到瀏覽器當中,當再次訪問之前的網站時cookie就會結合服務器上的一個cookie服務端還原用戶上次訪問時的歷史記錄,當然瀏覽會先出示cookie而服務器會追蹤cookie,cookie的工作機制在下文當中會有詳細的介紹。

3、響應首部

3.1 必有首部

age:     響應持續時間,知道即可
server:   向客戶端標明服務器程序名稱和版本,告訴客戶端是使用的apatch的哪個版本

3.2 協商首部

accept-ranges:   對當前的資源來講,自己所能夠接受的范圍類型
vary:     首部列表,服務器會把各種搭配做成幾個列表,讓客戶端挑一個客戶端可以接收的列表,服務器會根據列表當中的內容挑選出最適合的版本發送給客戶端

比如客戶端告訴服務器自己可以接收gzip壓縮的文件和不是xz壓縮的格式,而服務器告訴客戶端自己只能發送rar壓縮的資源那么這次通信就會失敗了。

3.3 安全相關首部

set-cookie: 服務器在某客戶端第一次請求發給的令牌,上面說的cookie就是這里發的
set-cookie2: 這是二版的令牌
www-authentication: 質詢,即要求客戶提供賬號和密碼,51CTO就是這樣

4、實體首部

4.1 必有首部

locationi: 資源的新位置,在使用301或者302時指定新的文件位置在什么地方
allow:  允許對此資源使用的請求方法,比如客戶端使用options方法去測試服務器可以使用的資源請求方法,服務器會用allow返還

4.2 內容首部

content-encoding:告訴客戶端自己的編碼格式是什么
content-languge告訴客戶端使用的語言是什么
content-location資源所處的實際位置
content-range 資源所處的范圍
content-type 資源所有的類型

4.3 緩存首部

etag: 實體標簽
expires: 過期期限,一個資源可以緩存多長時間
last-modified: 上一次的修改時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM