这两天为之前写的接口做拦截控制。实际上拦截控制已经做到了。但是我后来发现如使用ajax调用接口的时候。每发送一次请求,响应头的set-cookies都是不一样的,这种现象导致了很多页面调用不了数据。后面在百度上查找原因。发现很多网友都是瞎几把说的。诸如,session中间件需要放在业务路由之前以及session的resave option应该设置为false之类的。尽管这些都做了。还是半点效果没看到。请求一直被拦截。而且很多开发者都遇上我遇到的问题,然而没有给出一个明确的解决方案
后来只能硬着头皮去StackOverFlower搜索国外大神的解决方案。发现自己对http协议的内容还是有一些模糊。然后又去查询http的api,终于,找到了一个http服务端头设置:
Access-Control-Allow-Credentials,true
然后我又加上了这一个响应头设置
因为允许了跨域认证以后
用postman测试了一下,果然可以,然后我满心欢喜地拿着两个get请求url在浏览器测试。我看了看两次发送的响应cookies的值,果然是相同的。这下心想好了。然后我又将接口交给$http去调用。并将$httpProvider拦截器设置为允许跨域(withCredentials=true)才注意到之前发送请求的时候忘了看页面的响应。看到控制台接口报出警告.
已拦截跨源请求:同源策略禁止读取位于 http://192.168.199.239:8880/login?username=xzh&passwd=sjh 的远程资源。(原因:CORS 头 'Access-Control-Allow-Origin' 不匹配 '*')。
然后我又去找原因:
Access-Control-Allow-Orginal就不能设置为*了。需要设置为一个具体的域。
然后将*改为本地测试的ip地址。在使用Apeach容器将项目打开。访问localhost:8080/resources,以为可以了。然而发现并没有什么卵用。还是报出同样的警告。
最后我又去找文献,然后又得知,这样的ip虽然是域名,但是对于响应头来说,不算一个严格意义上的域。这下差不多绝望了。而且这种限制于一个域的状态我也不想要。
所以再找资料,在看了很多很多贴和文章之后。看到有一个网友遇到跟我一摸一样的问题。他在他的笔记中说了,中文意思大概就是“本地ip并不是严格意义上的domain,需要先用nginx反向代理去将这个ip变换成形式上的Internet域名”
最最最后,我又开始去看nginx反向代理的东西了,还在学习中,这篇笔记只是记录一下这个问题的解决过程。并没有什么卵用。待我将这个问题解决之后,直接上代码,不说半句废话。
网友评论