首頁  >  文章  >  後端開發  >  HTTP請求頭

HTTP請求頭

PHPz
PHPz原創
2017-04-04 15:49:102752瀏覽

客戶端使用服務端API介面時,需建構HTTP請求頭,一般情況下是初始化一個NSMutableURLRequest,然後設定請求方法、請求體,請求頭,如下:

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:bodyData];
    [request setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];
    [request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)bodyData.length] forHTTPHeaderField:@"Content-Length"];
    [request setValue:authorization forHTTPHeaderField:@"Authorization"];

猿題庫的網路請求(YTKNetwork)已把請求方法、請求體,請求頭等封裝好允許使用者重載自訂。請求頭通過重寫方法

- (NSDictionary *)requestHeaderFieldValueDictionary;

返回一個字典,然後在方法- (AFHTTPRequestSerializer *)requestSerializerForRequest:(YTKBaseRequest *)request;
中將網路請求序列化,供建構NSURLSessionTask使用。 #表示本地可以接收壓縮格式的數據,而伺服器在處理時就將大文件壓縮再發回客戶端。 #gzip:用於UNⅨ系統的檔案壓縮,HTTP協定上的gzip編碼是一種用來改進WEB應用程式效能的技術。 WWW伺服器中安裝的一個功能,當有人來造訪這個伺服器中的網站時,伺服器中的這個功能就將網頁內容壓縮後傳送到來訪的電腦瀏覽器中顯示出來。文字內容可壓縮到原大小的40%,使得資料傳輸速度加快。 deflate:一種使用LZ77演算法與哈夫曼編碼(Huffman Coding)的一個無損資料壓縮無專利演算法的壓縮技術。 HTTP協定中,可以對內容(也就是body部分)進行編碼, 可以採用gzip這樣的編碼。看到文檔的內容。所以我們說HTTP壓縮,其實就是HTTP內容編碼的一種。

HTTP壓縮的過程:

1、客戶端發送Http request 給Web伺服器,  request 中有Accept-Encoding: gzip, deflate。 (告訴伺服器, 瀏覽器支援gzip壓縮)。
    2、伺服器接到request後, 產生原始的Response, 其中有原始的Content-Type和Content-Length。
  • 3、伺服器透過gzip,來對Response進行編碼, 編碼後header中有Content-Type和Content-Length(壓縮後的大小), 並且增加了Content-Encoding:gzip.  然後把Response送到客戶端。

    4、客戶端接到Response後,依照Content-Encoding:gzip來對Response 進行解碼。 取得到原始response後, 然後處理資料的顯示。

  • 其它:compress顯示實體採用Unix的檔案壓縮程式;identity表示沒有對實體進行編碼。當沒有Content-Encoding header時, 就預設為這種情況。 gzip, compress, 以及deflate編碼都是無損壓縮演算法,用於減少傳輸封包的大小,不會導致資訊損失。 其中gzip通常效率最高, 使用最廣泛。

  • Content-Type

  • 表示內容類型,一般是指客戶端存在的Content-Type,用來定義網路檔案的類型和網頁的編碼,決定客戶端將以什麼形式、什麼編碼讀取這個檔案。即用於識別發送或接收到的資料的類型,客戶端根據該參數來決定資料的開啟方式。

  • application/x-www-form-urlencoded:資料被編碼為名稱/值對,這是標準的編碼格式;multipart/form-data: 窗體資料編碼為一則訊息,頁上的每個控制項對應訊息中的一個部分。 text/plain: 窗體資料以純文字形式編碼,其中不含任何控製或格式字元。
    1、當action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form資料轉換成一個字符串(name1=value1&name2=value2…),然後把這個字串append到url後面,用?分割,載入這個新的url。
    2、action為post時候,瀏覽器把form資料封裝到http body中,然後傳送到server。 如果沒有type=file的控件,用預設的application/x-www-form-urlencoded就可以了。 但如果有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控制項為單位分割,並為每個部分加上Content-Disposition(form-data或file),Content-Type(預設為text/plain),name(控制項name)等訊息,並加上分割符(boundary)。

Content-Length

  • 表示述HTTP訊息實體的傳輸長度。訊息實體長度:即Entity-length,壓縮之前的message-body的長度;
    訊息實體的傳輸長度:Content-length,壓縮後的message-body的長度。 (參數拼接成的字典)

Authorization

  • #HTTP基本認證是用來允許網路瀏覽器,或其他客戶端程序在請求時提供以使用者名稱和口令形式的憑證的登入方式。 授權機制根據服務端定的規則決定。

  • 認證(authentication) 和授權(authorization) 的區別:你要登機,你需要出示你的身分證和機票,身分證是為了證明你張三確實是你張三,這就是authentication;而機票是為了證明你張三確實買了票可以上飛機,這就是authorization。 你要登陸論壇,輸入用戶名張三,密碼1234,密碼正確,證明你張三確實是張三,這就是authentication;再一check用戶張三是個版主,所以有權限加精別人刪帖,這就是authorization。

POST與GET區別

  • 站在HTML角度:
    1、GET在瀏覽器回退時是無害的,而POST會再次提交請求。
    2、GET產生的URL位址可以被Bookmark,而POST則不行。
    3、GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
    4、GET請求只能進行url編碼,而POST支援多種編碼方式。
    5、GET請求參數會被完整地保留在瀏覽器歷史記錄裡,而POST中的參數不會被保留。
    6、GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
    7、對參數的資料型態,GET只接受ASCII字符,而POST沒有限制。
    8、GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感資訊。
    9、GET參數透過URL傳遞,POST放在Request body。

  • 站在HTTP的角度:
    1、HTTP是基於TCP/IP的關於資料如何在萬維網中如何通訊的協定。 HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP連結。 GET和POST能做的事情是一樣一樣的。你要為GET加上request body,給POST帶上url參數,技術上是完全行的通的。 HTTP只是個行為準則,而TCP才是GET和POST怎麼實現的基本。
    2、HTTP沒有要求,如果Method是POST資料就要放在BODY中。也沒有要求,如果Method是GET,資料(參數)就一定要放在URL中而不能放在BODY中。也就是說,GET和POST與資料如何傳遞沒有關係。 HTTP協定對GET和POST都沒有長度的限制。安全不安全和GET、POST沒有關係。
    3、GET產生一個TCP封包;POST產生兩個TCP封包。對於GET方式的請求,瀏覽器會把http header和data一併發送出去,伺服器回應200(返回資料);而對於POST,瀏覽器先發送header,伺服器回應100 continue,瀏覽器再發送data,伺服器回應200 ok(返回資料)。

HTTP狀態碼大全

1、1**    訊息,伺服器收到請求,需要請求者繼續執行作業
2、2* *    成功,操作成功接收並處理
3、3**    重定向,需要進一步的操作以完成請求
4、4**    客戶端錯誤,請求包含語法錯誤或無法完成請求
5、5**    伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

以上是HTTP請求頭的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn