最近所在技术团队在开发webapp项目,前端angularjs+后端.Net MVC API,API登陆接口定义为PUT提交方式,在作兼容测试时发现UC、safari、微信浏览器下均可以登陆,但在华为自带浏览器下登陆接口老是报错,抓包发现PUT提交请求体为空,用Inisomnia模拟提交空值获得和华为浏览器同样的接口返回信息,初步判断为浏览器提交了空值,Google了一下确实存在部分手机浏览器不支持PUT提交的状况,后在华为官网上了看下了,已有人遇到过来相似的状况,看来该浏览器确实不支持PUT提交。前端
最终解决方案以下:angularjs
查找资料得知PUT和POST差异仅在于Method标识不同,遂决定前端加入判断,若为华为浏览器且为PUT提交时,则将这次提交Method改成POST,同时加入Head信息字段为"Real-Method",代表这次提交所须要的真实方法;后端用MVC自带过滤器判断,若Request中头信息包含"Real-Method"字段,则将本次请求Method修改成Real-Method的值。web
这样的好处在于,不用修改原有的PUT接口,依然能够支持POST请求,以此来兼容那些不支持PUT的手机浏览器,且因为接口还要公共给移动端APP,这样移动端APP端以前已完成的逻辑就不须要作任何修改了。后端
(咱们仅发如今华为6 PLUS、4A上有这样的问题,P8没有)浏览器
附上代码以下:微信
后端:app