簡體   English   中英

HTTP 標頭以什么格式返回?

[英]What Format Do HTTP Headers Return As?

我一直在嘗試對 HTTP 響應標頭進行單元測試。 我需要從標題接收 cookie。 我得到了兩個Set-Cookie標頭,但我需要一個用於身份驗證。 返回的標題是:

HTTP/1.1 200 OK
Server: Cowboy
Connection: close
Set-Cookie: heroku-session-affinity=ADaDaANoA24IARpRKtf///8HYgABgzdiAAJZ5WECbAAAAAJtAAAABXdlYi4ybQAAAAV3ZWIuMWpcXMFamSToBPxyiOHM7o5AwvVZ3g__; Version=1; Expires=Thu, 12-Jan-2017 01:45:27 GMT; Max-Age=86400; Domain=xxxxxxxx.xxxx.xx; Path=/; HttpOnly
X-Powered-By: Express
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8
Content-Length: 30914
Etag: W/"78c2-veX2kgrO3zh118nYsOP80A"
Set-Cookie: connect.sid=s%3Adl1_47SY9vlKlHOguBvjZpmaa2WTUhHG.O2j9YOShB4AX0rAC5RRj%2BeCXAB11s5q1DB4x4fiHE4A; Path=/; Expires=Fri, 13 Jan 2017 01:45:27 GMT; HttpOnly
Date: Wed, 11 Jan 2017 01:45:27 GMT
Via: 1.1 vegur

我添加了一個包含以下值的測試文件:

{
    "Server": "Cowboy",
    "Connection": "close",
    "Set-Cookie": "heroku-session-affinity=ADaDaANoA24IAXtpQOD///8HYgAAKehiAA6V12ECbAAAAAJtAAAABXdlYi4ybQAAAAV3ZWIuMWrNqkap0u4H0uG3Btrtlamaq2nQ5w__; Version=1; Expires=Wed, 11-Jan-2017 01:12:09 GMT; Max-Age=86400; Domain=xxxxxxxx.xxxx.xx; Path=/; HttpOnly",
    "X-Powered-By": "Express",
    "Vary": "Origin",
    "Access-Control-Allow-Credentials": "true",
    "Content-Type": "application/json; charset=utf-8",
    "Content-Length": "30914",
    "Etag": "W/\"78c2-veX2kgrO3zh118nYsOP80A\"",
    "Set-Cookie": "connect.sid=s%3ACX3tfhPk9nlRtU8e8gtouQIx1kpP07h9.iExm%2F96Dgzuh289nmjwbYO49E0Bq0WwUHmN539IkudI; Path=/; Expires=Thu, 12 Jan 2017 01:12:09 GMT; HttpOnly",
    "Date": "Tue, 10 Jan 2017 01:12:09 GMT",
    "Via": "1.1 vegur"
}

我需要第二個Set-Cookie值,但是當我嘗試訪問它的值時,我得到的是第一個Set-Cookie 我假設是因為我將標題放在字典中。 但是當我在單元測試中存根響應時,標頭所需的格式是字典。 我只得到一個Set-Cookie標頭,因為字典中不能有兩個相同的鍵。

我做錯了什么嗎?

RFC 7230 第 3.2.2 節介紹了應如何處理 HTTP 標頭; 它取代了 RFC 2616。特別是,它說:

發送方不得在消息中生成多個具有相同字段名稱的頭字段,除非該頭字段的整個字段值被定義為逗號分隔列表 [即,#(values)] 或頭字段是一個井-已知異常(如下所述)。

而且,不幸的是,對於您的用例, Set-Cookie那些提到的“眾所周知的例外”之一,因為它的語法(由RFC 6265涵蓋)不容易適用於以逗號分隔的 cookie 值列表。

這意味着使用字典/哈希表結構來表示 HTTP 標頭通常有效,但在Set-Cookie等情況下會中斷。 還有其他獲取標題的方法; 例如,請參閱此 StackOverflow 帖子 或者,如果你能做到比其他標題您的單元測試Set-Cookie ,這可能是另一種方法。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM