一份 Cookie 轉換器的速查表,把 HTTP Cookie 請求標頭嚴格的序列化規則濃縮成一份在除錯工作階段、檢視日誌、或將真實 cookie 字串移轉成 JSON 以供工具使用時可快速掃讀的參考。這份速查表之所以有效,是因為 Cookie 請求格式已被完整定義:以 name=value 撰寫配對,多組配對之間以恰好一個分號加一個 ASCII 空白分隔,名稱採用 RFC token 規範。一個嚴格的本地轉換器會強制執行這些界線,而不是悄悄地把格式錯誤的輸入標準化,這也使它成為速查表的理想形狀 —— 每一列都代表一個被接受或被拒絕的輸入。下方各列涵蓋裸 Cookie 值、選用的 Cookie: 前綴、空白規則、百分號序列、base64 風格的填補、引號包裹的值、空值,以及原型風險的鍵。當你需要確認某個特定輸入的精確行為時,可將 Cookie to JSON 轉換器 與本速查表搭配使用。

cookie converter cheat sheet
cookie converter cheat sheet

一個嚴格的 Cookie-to-JSON 轉換器會在每次貼上時檢查四個層次:選用的欄位名稱前綴、配對層級的分隔符、名稱與值的語法,以及重複鍵規則。下表列出開發者最常貼上的模式、嚴格轉換器回傳的判定,以及每個判定背後的規則,讓你在提交輸入之前就能預測結果。

輸入片段判定原因
SID=abc; lang=en-USAccepted裸 Cookie 請求值,兩組配對,精確的 `; ` 分隔符
Cookie: SID=abc; lang=en-USAccepted精確的 Cookie: 前綴,配對符合嚴格序列化
COOKIE:SID=abcAccepted欄位名稱比對不區分大小寫
Cookie : SID=abcRejected名稱與冒號之間的空白屬於格式錯誤
SID=abc; lang=en-US Accepted整行周圍的外部 ASCII 空白會被忽略
SID = abc; lang=enRejected結構等號周圍的邊界空白不會被標準化
SID=abc;; lang=enRejected分隔符之間出現空配對屬於無效
SID=abc;lang=enRejected分號分隔符之後缺少一個空白
SID=abc; lang=enRejected分隔符之後出現兩個空白不會被標準化
SID=abc;Rejected結尾的分號後面沒有接續的配對
=abcRejected空名稱不符合 RFC token 規範
SIDRejected配對缺少結構等號
SID=abc; SID=defRejected重複的名稱採用區分大小寫的比較
Set-Cookie: SID=abc; lang=enRejected回應標頭不是 Cookie 請求欄位
__proto__=x; a=1Rejected原型風險鍵在兩個方向上都會被阻擋
constructor=x; a=1Rejected原型風險鍵在兩個方向上都會被阻擋
token=%2Fpath; a=1Accepted百分號序列按字面保留,保留三個字元
sig=abc==; a=1Accepted結構等號之後多出的等號仍視為值資料
pref=; a=1Accepted空值屬於有效的 Cookie 配對
pref="quoted"; a=1AcceptedDQUOTE 包覆的值,前後引號會被保留

兩個方向共用同一套界線檢查。JSON-to-Cookie 會驗證輸入可解析為恰好一個非空 JSON 物件,接著對每個解碼後的鍵套用相同的 RFC token 規則,並對每個解碼後的值套用相同的 cookie-value 規則。JSON 跳脫字元會在 Cookie 驗證之前先解碼,因此任何解析為禁用字元的字面跳脫都會被拒絕 —— 例如一個跳脫後的換行會失敗,因為解碼後的控制字元並非合法的 cookie-value 資料。重複的解碼鍵會在任何序列化開始之前被偵測出來,因此像 a 和 \u0061 這種跳脫後拼法會被視為相同的鍵,即便一般 JSON.parse 只會悄悄保留其中一個。

嚴格轉換器只會在當前的瀏覽器分頁內執行。輸出為唯讀區域中的純文字,不會傳送至 Lizely 或任何外部服務。可用於除錯 Cookie 請求欄位、將審核過的字串對應移轉成 JSON,或從審核過的 JSON 字串產生請求標頭值。

  1. 選擇 Cookie to JSON 方向,並貼上嚴格的裸 Cookie 請求值,例如 SID=abc; lang=en-US,或加上精確的 Cookie: 欄位名稱前綴。欄位名稱比對不區分大小寫(因此 COOKIE: 也可使用),但 Cookie : 在冒號前帶有空白屬於格式錯誤,會被拒絕。整行周圍的外部 ASCII 空白會被移除以利使用。
  2. 或切換至 JSON to Cookie 方向,提供恰好一個非空 JSON 物件,其解碼後的鍵為 RFC token,且解碼後的值為 JSON 字串。數字、布林值、null、陣列、巢狀物件、註解、尾端逗號,以及右大括號之後的任何文字都會被拒絕。跨跳脫的解碼重複項目,包括 a 和 \u0061,會在 join 步驟執行前失敗。
  3. 轉換後,檢視每一個保留的字串與配對數,然後複製完整的本地輸出。剪貼簿寫入是非同步的,每次複製嘗試都帶有世代識別碼,因此較舊的權限回應無法在編輯、重試或切換方向後恢復「已複製」狀態。剪貼簿遭拒時,完整輸出仍會保持可見以便手動選取,而不是回報一個假的成功。

反向方向以相反順序遵循相同的 Cookie 規範。被接受的配對會以精確的分隔符 `; ` (分號後接一個 ASCII 空白)進行串接,解碼後的鍵會重新驗證為 RFC token,解碼後的值會重新驗證為可接受的 cookie-value。轉換器不會對禁用字元進行百分號編碼、不會自動加上引號、不會移除輸入原本帶有的引號、不會排序成員、不會推論路徑,也不會產生任何 Set-Cookie 屬性。成員順序會依詞彙配對掃描保留以便輸出使用,但 Cookie 語意不應依賴序列化順序 —— 伺服器可以使用此轉換器所不知道的應用程式專屬規則來解讀 cookie 值。

兩個方向都會在序列化之前阻擋 __proto__、prototype 與 constructor 這些原型風險鍵。正向方向使用一個 null 原型的內部對應,搭配兩個空格的 JSON 縮排,因此那些名稱永遠不會成為輸出物件上的自身屬性。反向方向會在 join 步驟之前拒絕它們,因此輸出的 Cookie 值絕不會以配對形式帶有它們。即使 JSON 文字能夠表示這些字串,且內部正向對應沒有原型,仍然會發生拒絕 —— 這道界線是用來防止下游程式碼把產生的輸出當成安全的指派來源。本工具並未聲稱任意下游 JSON 處理是安全的,消費者仍必須安全地解析與合併未受信任的資料。

本轉換器僅處理 Cookie 請求標頭。它不會解析 Set-Cookie 回應標頭,也不會把 Domain、Path、Expires、Max-Age、Secure、HttpOnly、SameSite、Partitioned、Priority 或任何其他擴充屬性視為請求 cookie。這些屬性是由伺服器在 Set-Cookie 中提供,瀏覽器不會在 Cookie 請求欄位中將其回傳。因此,Cookie 標頭無法揭露 cookie 的到期時間、允許的主機、允許的路徑、僅限安全連線狀態,或 HttpOnly 狀態。貼上精確的 Set-Cookie: 前綴會產生明確的錯誤,而不是誤導性的 JSON;沒有值的裸名稱(例如 HttpOnly)會因為缺少結構等號而以配對形式失敗;而語法上有效的 name=value 配對(例如 Path=/ 或 Domain=example.com)則會因為轉換器並未對屬性名稱特別處理,而被當作一般的 Cookie 請求配對接受。

本轉換器強制執行的嚴格剖析規範來自 RFC 6265,即 HTTP 狀態管理機制,當中定義了 cookie 名稱 token 規範、cookie-octet 值規範,以及請求序列化格式。後續的 draft-ietf-httpbis-rfc6265bis 在同一道界線周邊精煉了這些定義,上方速查表的各列追蹤的正是該界線,而非任何瀏覽器專屬的標準化方式。

限制與轉換器不會做的事

輸入上限為恰好 100,000 個 UTF-16 碼位,完整輸出上限為 200,000 個碼位。恰好等於上限會被接受,超過一個單位則會被拒絕,因此界線是可預期的。介面並未使用 maxLength 來悄悄阻擋輸入,轉換過程也絕不會切片、截斷、取樣、略過,或部分回傳輸入。長度為零或無效的輸出長度會被拒絕,因此空白的轉換絕不會顯示為成功。任何錯誤都會在發布訊息之前先移除前一次的成功結果,編輯輸入或切換方向會清除先前的輸出、錯誤橫幅、配對數、剪貼簿狀態與剪貼簿計時器。

工作或問題本工具是否處理
將嚴格的 Cookie 請求標頭剖析成扁平 JSON 字串對應Yes
從扁平的 JSON 字串物件產生嚴格的 Cookie 請求標頭值Yes
剖析 Set-Cookie 回應標頭或還原其屬性No —— 那些屬性不在請求欄位中
進行 URL 解碼、百分號解碼,或以其他方式解讀百分號序列No —— 三個字面字元會被原樣保留
揭露 cookie 是否為 Secure、HttpOnly 或僅限工作階段No —— 請求欄位並未帶有此類訊號
悄悄標準化格式錯誤的分隔符空白或加引號的配對No —— 以嚴格拒絕取代標準化
讀取 document.cookie 或修改瀏覽器的 cookie 存放區No —— 除了貼上的文字之外,不會讀寫任何內容
將貼上的文字傳出裝置No —— 兩個方向都完全在當前分頁內執行
在分享前作為憑證清理工具No —— 應將貼上的文字視為已屬敏感

若要在嚴格 Cookie 規範之外處理一般 JSON 工作,JSON Formatter 與 JSON Validator 涵蓋可讀格式與精確的錯誤位置,JSON Minifier 則在不引入 cookie 規則表面的情況下產生嚴格的精簡形式。

Cookie 標頭通常包含即時的工作階段密鑰。請僅貼上您打算處理的內容,將複製的輸出視為機密資料,並輪換任何已透過螢幕擷圖、記錄檔或共用輸出而外洩的憑證。轉換器會非同步地將資料寫入剪貼簿,且每次複製嘗試都會收到一個世代識別碼,由掛載狀態守衛強制執行,因此舊提示的權限回應無法在編輯、方向變更、重試或卸載後還原「已複製」狀態。剪貼簿遭拒時,完整輸出仍會保持可見以供手動選取,而不會回報偽成功;複製是此頁面唯一與網路相關的副作用 — 並沒有 fetch、XHR、WebSocket 或 postMessage 呼叫。

編輯輸入內容或切換方向會清除先前的輸出、錯誤橫幅、配對計數、剪貼簿狀態與剪貼簿計時器,因此陳舊的結果不會被誤認為是新的轉換結果。轉換器不會從 document.cookie 讀取任何內容,絕不會修改瀏覽器的 Cookie 存放區,也絕不會發出 HTTP 請求。請將其用於偵錯 Cookie 請求欄位、將已審核的字串對應轉為 JSON,或從已審核的 JSON 字串產生請求標頭值;請勿用於檢查瀏覽器儲存空間、建立 Set-Cookie 回應、保留屬性、解碼應用程式的工作階段格式、判斷 Cookie 是否安全,或在共用前清理憑證。

如需更深入的說明,請參閱 Excel 公式速查表:常用公式的替代方案。

如需更深入的說明,請參閱 ASCII 速查表:4 種標記法中的全部 128 個代碼。