Accept 表示请求方希望的资源类型,或者能解解析识别的类型
Content-Type 表示实际发送的资源类型
这里资源类型通过 MIME types 表示。
Accept 是浏览器发送的请求头,用于表示想要的资源类型。根据请求的上下文不同,所设置的 Accept 请求头会相应变化。服务器根据 content negotiation 规则选择最合适的类型设置 Content-Type 并返回。
例如请求路由页面时,Chrome 设置 Accept 为
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8对于页面中的样式文件 css,其 Accept 为:
Accept: text/css,*/*;q=0.1可用的值有以下几种:
<MIME_type>/<MIME_subtype>,精确指定,示例: text/html
<MIME_type>/*, 不限制子类型,比如 image/* 会匹配 image/png, image/svg, image/gif 以及其他任何图片类型
*/* 任意 MIME 类型
;q= (q-factor weighting) 多种类型组合的情况,通过指定权重(quality value)来表明每种类型的优先级
Quality valueHeader 中逗号分隔的值,每项的权重,或优先级。
比如:
表示:
值 优先级text/html 和 application/xhtml+xml 1.0
application/xml 0.9
*/* 0.8
Content-Type
用来表示资源的类型。某些情况下,浏览器会对资源的类型进行嗅探而忽略掉服务器返回的 Content-Type。如果想强制客户端使用服务器返回的类型,可加上 X-Content-Type-Options:nosniff 响应头。
支持的值有:
media-type,常见的 Content-Type
charset,指定资源编码类型
boundary, 多个资源实例情况下,指定资源的分界符。比如 form 表单提交时分隔多个表单字段,见后面示例。
一般情况下,包含在由服务器发送给客户端的响应头里。但也存在浏览器发送给服务器的情况,比如 POST 请求,表单提交这种由浏览器向服务器发送数据的情况下。
表单的提交类型form 表单中,提交的内容类型通过 enctype 指定。包含两种,
application/x-www-form-urlencoded 较古老的格式,只支持简单文本,不支持文件上传
multipart/form-data 较新,支持文件上传,尺寸较大的二进制数据等
一个表单提交示例通过 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 :3000`);