當前位置:
首頁 > 最新 > HTTP Header小知識

HTTP Header小知識

在日常web開發中,經常會自定義一些HTTP Header用以傳遞參數,好像使用起來很簡單,沒什麼需要注意的,其實不然,邊界問題還是需要了解一下的,以免掉進一些小陷阱。

一、Header-Key大小寫敏感問題

RFC2616 4.2定義的標準是不區分大小寫的,但是具體的web伺服器實現並不完全遵循標準,兼容性比較好的做法是可以認為所有web實現都是大小寫敏感的,設值取值時使用相同的KEY,同時避免定義通過大小寫來區分不同的Header-Key;RFC2616標準預定義的Request Header和Response Header都是首字母大寫,自定義的Header通常使用大寫字母,並以X-開頭。

二、Header-Value前後的空白字元會被忽略

SP:空格

HT:水平製表符

CRLF:回車換行

LWS:線性空白,語法=[CRLF] 1*(SP | HT)

RFC2616定義Header-Value語法 = *( field-content | LWS ),如果field-content前後包含LWS的話是會被忽略掉的;推薦的做法是在Header-Value之前添加一個空格,設置Header的時候對field-content進行trim操作,去掉前後的LWS字元。

一個案例:Header中有3個參數UID、KEY、SIGN,其中SIGN=sign(UID+KEY),服務端接受請求後會對SIGN進行校驗,如果UID開頭或者結尾包含LWS字元,那麼就會導致後端取到的UID與前端傳遞的UID不一致,從而導致SIGN校驗失敗。

三、編碼問題

CHAR =

token (標記) = 1*

separators(分割符) = "(" | ")" | "" | "@"| "," | ";" | ":" | "" | | "/" | "[" | "]" | "?" |"="| "{" | "}" | SP | HT

field-name = token

Header-Key可以是除去一些控制字元和特殊字元與分割字元以外的任意ascii碼組成的字元串。Header-Value:比較複雜,不同的協議版本以及不同伺服器的實現都不一樣;簡單一點可以認為與Header-Key一樣,直接傳遞中文是會出現亂碼的;但是有時候必須要傳中文或者其他非ASCII值時怎麼辦呢?做法就是在設置Header-Value之前對其進行URLEncode,服務端接受後進行對應的URLDecode即可。

總結一下,盡量不要在Header中傳遞複雜的參數,避免不必要的麻煩。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 攻城獅進階 的精彩文章:

TAG:攻城獅進階 |