Accept 與 Content-Type
Accept
這裏資源類型通過 MIME types 表示。 Accept 是瀏覽器發送的請求頭,用於表示想要的資源類型。根據請求的上下文不同,所設置的 Accept 請求頭會相應變化。服務器根據 content negotiation 規則選擇最合適的類型設置 例如請求路由頁面時,Chrome 設置 Accept 為
對於頁面中的樣式文件 css,其 Accept 為:
可用的值有以下幾種:
Quality valueHeader 中逗號分隔的值,每項的權重,或優先級。
表示:
Content-Type用來表示資源的類型。某些情況下,瀏覽器會對資源的類型進行嗅探而忽略掉服務器返回的 支持的值有:
一般情況下,包含在由服務器發送給客戶端的響應頭裏。但也存在瀏覽器發送給服務器的情況,比如 POST 請求,表單提交這種由瀏覽器向服務器發送數據的情況下。 表單的提交類型form 表單中,提交的內容類型通過
一個表單提交示例通過 koa.js 搭建一個簡單的表單提交示例,以查看 Content-Type。 server.js const { createReadStream } = require("fs"); const Koa = require("koa"); const app = new Koa(); const router = require("koa-router")(); const koaBody = require("koa-body"); router .get("/", async ctx => { ctx.type = "html"; ctx.body = createReadStream("form.html"); }) .post( "/submit", koaBody({ multipart: true }), ctx => { console.log("form data is:", ctx.request.body); ctx.body = JSON.stringify(ctx.request.body); } ); app.use(router.routes()); app.listen(3000); console.log(`server started at http://localhost:3000`); form.html <form action="/submit" method="POST" enctype="multipart/form-data"> foo:<input type="text" name="foo" /> bar:<input type="text" name="bar" /> <button type="submit">submit</button> </form> 訪問頁面並提交後,可在 Chrome DevTools 網絡面板看到, Request Headers
Form Data
內容協商/Content Negotiation前面提到客戶端通過設置 Accept 請求頭設置請求資源的類型,服務器根據 content negotiation 規則返回。 Content negotiation 是這麽一種機制,同一 URI可響應多種資源,客戶端可自行決定請求何種資源(譬如文檔的語言,圖片格式,文件編碼類型)。 內容協商包含兩種方式
除了 Accept ,用於主動發起內容協商的請求頭還有
服務器驅動的內容協商由客戶端發送一組期望的類型,服務器根據自己的算法決定出最合適的類型進行返回,具體實現因服務器類型而異。服務器驅動是最常見的方式,但其也有一些明顯的缺點:
客戶端驅動的內容協商
得到真實資源前多了一次選擇的請求。 參考
|
Accept 與 Content-Type