这是我参与「第四届青训营 」笔记创作活动的的第4天
本次大项目中,我花费最多的时间是用来排查connection refuse与403 forbidden error这方面,因为我一直是本地部署,且基础不好,所以仅以此文章帮助其他新手排查connection refuse与403 forbidden错误。目前排查主要以先服务端,再前端为主
1. 调整Egg.js的安全设定--CSRF
Egg.js的本身安全策略设置较高,所以为了防止security有关的错误,我们将部分设置关闭;
config.security = {
xframe:{
enable:false,
},
csrf:{
ignoreJSON:true,
},
};
2. 把post请求输入console,检查no-cors与403 forbidden设定,来允许非同源请求,然后再次尝试,可以即是可以,否则的话尝试其余项
const response = await fetch(url, {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'no-cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
body: JSON.stringify({
schema
})
3. 如果报错持续,将Post请求修改为Get请求尝试,如果Get请求尝试未成功,尝试直接访问URL,看看是否会成功,如果仍不成功,检查第6项
如:
router.post('/api/schemas', controller.home.saveSchema);
router.get('/api/schemas',controller.home.saveSchema)
4. 其中,测试是否可以拿到return response,如果有return response则可以获取,如果没有显示则排查其余项
ctx.response.set('Access-Control-Allow-Origin','*');
5. 测试return值是否为空,下面为例子,其中schema为返回值,如果页面显示123则可以获取,如果页面没有显示则排查其余项
ctx.body = schema || 123;
6. 最后排查,localhost与127.0.0.1是否同源,部分IPV6网址,为::1,其可能与127.0.0.1不同源,且访问ipv4的127.0.0.1会connection error;解决方法为修改hosts,或者先尝试修改获取内容的尝试中的url值
# const url = 'http://127.0.0.1:7001/api/schemas';
const url = 'http://localhost:7001/api/schemas';