用 node 写接口控制跨域的时候无意发现一个网站的请求头中的 origin 是小写的,而自己的 Origin 是大写的,同样都是 POST 请求。
我目前的认知是:origin 是浏览器在请求过程中自动加入请求头的,是不允许修改的。
但是,为什么都是在 chrome 的屋檐下,会有不同的 origin/Origin
尝试在页面请求中手动修改 Request Headers 中的 origin/Origin,结果符合预期,被浏览器给拦截了
//环境 node10+express4,在请求中打印如下信息
console.log(Object.keys(req.headers));
console.log(`从 req.headers 中直接获取:小写的 origin:${req.headers.origin}-----大写的 Origin:${req.headers.Origin}`);
console.log(`使用 req.set 方法获取:小写的 origin:${req.get('origin')}-----大写的 Orgin:${req.get('Origin')}`);
代码图片貌似更方便看,附上:
在 node 服务端拿到的 header 对象中,origin 的键值就是小写的,使用大写的键 Origin 是取不到值的。但是使用 express 中的 req.set 方法(该方法专门用来获取请求头中的指定值),小写的 origin 和大写的 Origin 都是可以正确获取到 origin 的值,所以说是有着特定的容错(兼容)处理嘛?十分疑惑。
刚入行半年萌新前端一枚,尝试搜索的很多关键字但是并没有找到答案,虽然是个很无聊的小问题但是真的太困扰了,望路过的大佬给指条路,十分感谢
: )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.