Cookie 轉 JSON 轉換器負責處理夾在 JSON cookie 匯出與 Netscape 格式標頭字串之間、嚴格的名稱=值配對層,所有處理都在當前的瀏覽器分頁中完成,不會上傳你的資料。轉換器使用 RFC 6265 的 cookie-pair 設定檔來剖析每一組配對,將每個名稱驗證為 RFC token,每個值驗證為 cookie-octet 或以 DQUOTE 包覆的 cookie-octet,並在分隔符格式錯誤時予以拒絕,而不是默默修復。反向操作時,它只接受一個已解碼的鍵與字串值皆符合相同 Cookie 設定檔的非空 JSON 物件,然後將接受的配對以「分號加一個空格」連接起來。此工具完全在當前瀏覽器分片中執行,於唯讀區域產生純文字,且絕不會將貼上的資料傳送至任何服務。雙向轉換皆會保留百分號編碼序列、可接受的引號字元,以及值內部額外的等號,因此類似 Base64 的填補字元、簽署過的權杖,以及含有等號的網址,都能在來回轉換中完整保留。

「Netscape 格式」實際上需要什麼
Netscape HTTP Cookie File 格式是一種純文字格式,最初是為 Netscape 瀏覽器所設計,現在則供 curl、wget、youtube-dl 及類似的命令列工具用來從檔案載入 cookie。Netscape cookie 檔案中的每一行代表一個 cookie,並包含以 Tab 分隔的欄位:網域、路徑、安全旗標、到期時間戳記、名稱與值。這在根本上比 Cookie 要求標頭更為豐富,後者僅帶有名稱=值的配對,且不含網域、路徑、到期、安全或 HttpOnly 等資訊。
由於那些額外欄位是由伺服器在 Set-Cookie 回應標頭中提供,並不會由瀏覽器在 Cookie 要求欄位中回傳,因此 Cookie 要求標頭無法告訴你某個 cookie 的到期時間、允許的主機、允許的路徑、僅限安全連線的狀態,或 HttpOnly 狀態。因此,只能讀取 Cookie 要求標頭的工具,只能產生 Netscape 行的名稱與值部分,而無法產生周圍的中繼資料。一開始就了解這項差異,能讓你避免去尋找那些承諾一鍵完成 JSON 轉 Netscape 檔案、卻默默捏造網域與路徑欄位的工具。
| 欄位 | Cookie 要求標頭 | JSON (扁平物件) | Netscape cookies.txt |
|---|---|---|---|
| 網域 | 未帶 | 不在此工具的輸出中 | 必要 (以 Tab 分隔) |
| 路徑 | 未帶 | 不在此工具的輸出中 | 必要 |
| 安全旗標 | 未帶 | 不在此工具的輸出中 | 必要 (0 或 1) |
| 到期 | 未帶 | 不在此工具的輸出中 | 必要 (Unix 時間戳記) |
| 名稱 | RFC token,區分大小寫 | 字串鍵 | 必要 |
| 值 | cookie-octet 或加引號的 cookie-octet | 字串值 | 必要 |
| 分隔符 | "; " (分號 + 一個空格) | 物件語法 | 欄位之間以 Tab 分隔,cookie 之間以換行分隔 |
| 來源 | 瀏覽器在要求時送出 | 中介格式 | 供 curl/wget 使用的檔案 |
為何嚴格的 Cookie 轉 JSON 轉換器很重要
當你進行 JSON 轉 Netscape 的工作流程時,名稱=值這一層的完整性,決定下游工具究竟能不能使用其輸出。curl 與 wget 會以 Tab 分割每一行,並讀取最後兩個欄位作為名稱與值;若某個名稱含有空格或分隔字元,或是某個值被默默改寫,所產生的要求將與伺服器預期的 cookie 不相符。Cookie 轉 JSON 轉換器拒絕默默修復格式錯誤的輸入。等號周圍的空格、分隔空格的缺漏、多餘的分隔空格、結尾的分號,以及空配對,全都會被拒絕,而非予以標準化。
轉換器也會區分大小寫地拒絕重複的 cookie 名稱,而不是採用「先出現者優先」或「最後出現者優先」的行為。由於 JSON 物件無法在不解碼名稱重複時保留兩個同名的成員,因此工具會在轉換前的詞彙掃描中偵測重複。像 a 與 \u0061 這類跳脫形式即使一般的 JSON.parse 只會默默保留其中一個,仍會被偵測為同一個鍵。這表示你能在轉換當下就發現問題,而不必在除錯某個莫名把你登出的工作階段時才察覺。
如何將 Cookie JSON 轉換為 Netscape 可用的標頭字串
- 在瀏覽器分頁中開啟 Cookie 轉 JSON 轉換器,並選擇 JSON 轉 Cookie 的方向。
- 貼上一個非空 JSON 物件,其中每個屬性的值皆為 JSON 字串。例如:{"SID":"abc","lang":"en-US"}。請勿包含數字、布林值、null、陣列、巢狀物件、註解或結尾逗號;轉換器會將其拒絕。
- 點擊 Convert。工具會解碼 JSON 字串跳脫、偵測重複的解碼鍵、將每個解碼鍵驗證為 RFC token、將每個解碼值驗證為可接受的 cookie-value,然後將接受的配對以「分號加一個空格」連接起來。
- 檢視輸出。每個名稱與值都應與你提供的完全一致,可接受的引號字元會以字面保留。輸出即為你在線路上送出的 Cookie 要求標頭值,已可用於 Netscape 一行的名稱=值部分。
- 複製完整的輸出,並將其作為名稱與值欄位,交給組裝最終 Netscape cookies.txt 的步驟;若原始 JSON 中含有網域、路徑、安全旗標與到期等欄位,也請從中取出。
轉換器對 Cookie 輸入強制執行的規則
在反向 (Cookie 轉 JSON) 方向上,轉換器強制執行嚴格的序列化設定檔。每組配對都必須是名稱=值。多組配對必須以「一個分號加一個 ASCII 空格」分隔。若你加上選擇性的欄位名稱前綴,則 "Cookie" 之後必須緊接冒號;"Cookie :" 屬於格式錯誤。欄位名稱本身的比對不區分大小寫,因此 COOKIE:a=1 可被接受。
每組配對中,僅第一個等號具結構意義。其他等號仍屬於值資料,因此 abc== 能完整保留、查詢字串中的等號也會保留,簽署過的權杖也不會被截斷。空值 (如 preference=) 為有效;若名稱為空或配對不含等號則屬失敗。Cookie 名稱使用 RFC token 設定檔,且區分大小寫,因此 SID 與 sid 是兩個不同的名稱。含有空格、分隔符、控制字元或其他非 token 字元的名稱會被拒絕。完整的要求標頭設定檔記載於 RFC 6265。
值使用 RFC cookie-value 設定檔:一段未加引號、由允許的 cookie octet 組成的序列,或同樣的序列以雙引號包覆。百分號編碼序列不會被 URL 解碼、跳脫、標準化或解讀;%2F 仍會保留為「百分號、2、F」三個字元。原始的空格、逗號、分號、反斜線、控制字元,以及 cookie-octet 以外的字元,都會被拒絕。圍繞可接受引號值的引號字元會在 JSON 與反向轉換中保留,因為它們屬於此工具所使用的序列化 Cookie 欄位值的一部分。
原型安全性、限制與本機處理
轉換器以 null-prototype 內部物件組裝其正向對應表。__proto__、prototype 與 constructor 三個鍵在雙向皆會被阻擋,作為防禦深度的原型污染界線。即使 JSON 文字可以表示這些字串,且內部正向對應表並無原型,拒絕它們仍可避免下游程式將產生的輸出視為安全的指派來源。此工具並未聲明任意下游 JSON 處理皆為安全;消費者仍須以安全方式剖析並合併未受信任的資料。
輸入上限為 100,000 個 UTF-16 程式碼單位,完整輸出上限為 200,000 個程式碼單位。剛好達到上限會被接受,超過一個單位則會被拒絕。介面並未使用 maxLength 來默默阻止輸入,轉換過程絕不會切割、上限、取樣、略過或部分回傳輸入。零或無效的輸出長度會被拒絕。不會從 document.cookie 讀取任何 cookie,不會修改瀏覽器的 cookie 儲存區,也不會發出 HTTP 要求。剪貼簿寫入為非同步,並使用世代識別碼與掛載狀態守衛,防止較舊的權限回應在編輯、方向變更、重試或卸載後回復「已複製」狀態;剪貼簿被拒時,完整輸出仍可見以供手動選取。
此工具適用與不適用的情境
當你需要除錯 Cookie 要求欄位、將已審核的字串對應轉為 JSON,或從已審核的 JSON 字串產生要求標頭值時,請使用 Cookie 轉 JSON 轉換器。若你的 JSON 來自瀏覽器擴充功能的匯出,且只需要名稱與值欄位,此轉換器會為你產生完全符合線路傳輸的字串。若你在同一工作流程中處理 Cookie 標頭這一面,在瀏覽器中將 Cookie 標頭與 JSON 互轉指南會以範例說明反向操作。
請勿將其用於檢查瀏覽器儲存區、建構 Set-Cookie 回應、保留 Domain 或 Path 等屬性、解碼應用程式的工作階段格式、判斷 cookie 是否安全,或在分享前清理憑證。Cookie 標頭經常含有使用中的工作階段密鑰,因此請妥善保密並輪替已外洩的憑證。若要取得含有全部六個 Tab 分隔欄位的完整 JSON 轉 Netscape 檔案,你需要能讀取 Set-Cookie 回應資料的工具或腳本,因為僅靠 Cookie 要求欄位本身永遠無法提供這些資訊。若是一般的 JSON 作業,請先使用 JSON 驗證器確認 JSON 為嚴格且可剖析的狀態;若想要較易讀的檢視,則可使用 JSON 格式化器。
若你正在權衡選項,Cookie 轉換器 API 替代方案:在瀏覽器中執行對此有詳細說明。