HTTP Header
- 我們知道
HTTP
協(xié)議中定義了Header
畦徘,是一組KV集合膀息。 - 在請求時(shí)可以把信息放在
Header
中帶給服務(wù)端等孵,在響應(yīng)時(shí)也可以利用Header
輸出部分信息。
Header使用場景
- 常用場景包括在
Header
中標(biāo)明請求的Content-Type
逐抑,Accept-Language
膏燕,甚至請求的Cookie
信息也是在Header
中傳輸钥屈。 - 特別地,在
Restful Api
中坝辫,我們經(jīng)常將登錄認(rèn)證信息(Token
)放在請求的Authorization
里篷就,服務(wù)端解析認(rèn)證信息來判斷登錄是否有效。
瀏覽器環(huán)境下的限制
- 今天遇到一個(gè)問題近忙,項(xiàng)目定義的
Rest
認(rèn)證協(xié)議中竭业,用到了Header
里的Authorization
和Date
字段。 - 這些接口一般情況是由服務(wù)端發(fā)起調(diào)用及舍,并沒有任何問題永品。
- 但是最近我在寫一個(gè)web版的工具,想在瀏覽器環(huán)境下構(gòu)造請求訪問這些接口击纬,但是發(fā)現(xiàn)請求的
Header
中無法寫入我指定的Date
值鼎姐。 - 查閱相關(guān)資料才發(fā)現(xiàn),原來在web環(huán)境下,為了一些安全原因炕桨,瀏覽器會(huì)限制手動(dòng)構(gòu)造的
HTTP
請求中的Header
內(nèi)容饭尝。其中包括:
- accept-charset
- accept-encoding
- access-control-request-headers
- access-control-request-method
- connection
- content-length
- content-transfer-encoding
- cookie
- cookie2
- date
- expect
- host
- keep-alive
- origin
- referer
- te
- trailer
- transfer-encoding
- upgrade
- via
解決和結(jié)論
- 既然在瀏覽器層面限制了在,我也只好繞過這個(gè)問題献宫。具體方案有二:
- 修改服務(wù)端認(rèn)證協(xié)議钥平,兼容另一個(gè)
Header
字段來當(dāng)作Date
。 - WEB前端請求本地服務(wù)端姊途,本地服務(wù)端中轉(zhuǎn)接口再請求
Rest
服務(wù)涉瘾。
- 修改服務(wù)端認(rèn)證協(xié)議钥平,兼容另一個(gè)
- 在定義私有協(xié)議的時(shí)候,最好事先了解一下大環(huán)境下的通用協(xié)議捷兰,避免與之產(chǎn)生沖突立叛。