Charles maplocal 解决跨域预请求(OPTIONS请求)的一种方法

一、先说说OPTIONS请求
OPTIONS请求称为"预检"请求(preflight),它的作用是:询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP请求和头信息字段。只有得到肯定答复,浏览器才会发出正式的HttpRequest(GET、POST等)第二次请求;否则就报错,也不会进行第二次请求。

二、遇到的问题
直接maplocal修改该接口的response,会把option接口的response也修改掉,最后导致二次请求无法发送
正常请求
image
image

maplocal
image

使用maplocal后接口异常
image
image

三、解决办法
观察到maplocal后直接把option的响应头和响应体也修改了,经过一番尝试后发现用rewrite修改实现修改该接口的响应头可以解决该问题

步骤1
参照正常option请求的响应头用rewrite修改状态码等数据


步骤2
再开启maplocal

观察到修改成功
image

总结
感谢直播课上思寒老师给的思路,此外思寒老师和一个同学还提出了几种解决思路,如果后面实现了会一起分享出来:
1.增加过滤器,区分request mothod
2.定制自己的代理服务器
3.两次请求之间,对文件内容镜像修改。利用map remote,自己做个小的cgi服务,判断下第一次访问不修改,第二次访问修改
4.用有赞开源的代理工具进行二次开发

2 个赞

期待你后面的改进思路