GraphQL 的核心設計理念圍繞著結構化資料的查詢與變更 (query and mutation)。它的請求和回應都是基於 JSON 這類的文字格式。傳統上,GraphQL 請求透過 HTTP POST 方法,將一個 JSON 物件作為請求主體 (request body) 發送到伺服器。這個 JSON 物件包含了查詢字串 (query string)、變數 (variables) 和操作名稱 (operation name)。
然而,檔案,特別是二進位檔案,本質上並非 JSON 這類結構化的文字資料。直接將二進位檔案嵌入 JSON 中,不僅會造成龐大的效能開銷(舉例來說,將檔案編碼成 Base64 字串會額外增加約 33% 的資料量),而且對伺服器的解析與處理也極為不便。
因此,GraphQL 規範本身並沒有提供直接處理檔案上傳的內建機制。開發者通常需要仰賴現有的 HTTP 機制或其他協定,來補足這方面的功能。