学习koa开发API(三)--- OPTIONS请求的理解和处理
HTTP的Method
上文中我们学习了用koa-router
请求不同的url,而且我们还使用了不同的method。
http的请求方式,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT等八种请求方式。其中,get与post只是我们常用的请求方式。此次我们主要学习一下option
请求。
options的定义
OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
简单的解释就是我们在发送请求时,浏览器会发送一次预检请求,获得服务端返回的信息,看后台是否允许进行访问。
如何产生options请求
-
跨域请求;
-
自定义请求头;
-
请求头中的
content-type
是application/x-www-form-urlencoded,multipart/form-data,text/plain
之外的格式。
处理OPTIONS
为了方便后期前端在调用复杂请求或者跨域的情况下,我们的接口能有良好的反馈,所以我们需要使用allowedMethods
。
现在我们的代码是这样的:
router.get("/banners",(ctx,next)=>{ ctx.body = "获得get banners"; }); router.post("/banners",(ctx,next)=>{ ctx.body = "post banners"; });
当我们在postman调用http://localhost:3000/mall/banners
时使用的是options方法时,返回的是NOT FOUND。
我们在添加这样一行代码:
app.use(router.allowedMethods());
再调用一次请求,返回体为空,查看headers
它会告诉我们这个请求支持这样几种方法。
注释掉app.use(router.allowedMethods());
,在postman调用http://localhost:3000/mall/banners
时使用的是以上三种方法(HEAD GET POST)之外的方法时,结果是NOT FOUND,
加上app.use(router.allowedMethods());
是这样的结果:
后续
昨天本来是想做商城API开发,想了想工作量有点大,要考虑的也多,怕后续顾着写业务了...虽然假期变长了~不过还是希望疫情早日稳定,大家早日康复。
从原先想做商城API改成做个豆瓣影评的东西,不过总体还没考虑好,希望后期能坚持2333~