Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"在浏览器中打开" 无法使用 webDav, 报错: CORS 错误 #19

Open
iamqiz opened this issue Nov 30, 2023 · 15 comments
Open

"在浏览器中打开" 无法使用 webDav, 报错: CORS 错误 #19

iamqiz opened this issue Nov 30, 2023 · 15 comments

Comments

@iamqiz
Copy link

iamqiz commented Nov 30, 2023

访问 http://127.0.0.1:58309/plugins/keepass/keeweb/app/?v=0.2.0
More>webDav 输入登录信息后, 报错: access to fetch at 'xxx' from origin 'http://127.0.0.1:58309' has been blocked by CORS policy
如下图
Snipaste_环境返回_2023-11-30__11-00-53

@iamqiz
Copy link
Author

iamqiz commented Nov 30, 2023

如果先在思源客户端中登录webDav,然后打开浏览器访问keeWeb, 在保存kdbx时也会报上面的错

@Zuoqiu-Yingyi
Copy link
Owner

这是 webdav 服务提供者 CORS 策略的问题,在浏览器中不太容易绕过

@iamqiz
Copy link
Author

iamqiz commented Nov 30, 2023

@Zuoqiu-Yingyi 下面这个文章说的是需要webdav服务提供者去设置的吗?
WebDAV Config · keeweb/keeweb Wiki
https://github.com/keeweb/keeweb/wiki/WebDAV%20Config

@Zuoqiu-Yingyi
Copy link
Owner

@Zuoqiu-Yingyi 下面这个文章说的是需要webdav服务提供者去设置的吗? WebDAV Config · keeweb/keeweb Wiki https://github.com/keeweb/keeweb/wiki/WebDAV%20Config

看了一下, 确实是这样的
KeeWeb 的 FAQ 还挺周到👍

@iamqiz
Copy link
Author

iamqiz commented Nov 30, 2023

@Zuoqiu-Yingyi 这样行不
让浏览器keeWeb发送消息给内核,内核再转发消息给客户端里的keeWeb, 最后在客户端里发送webDav http请求

@Zuoqiu-Yingyi
Copy link
Owner

@Zuoqiu-Yingyi 这样行不 让浏览器keeWeb发送消息给内核,内核再转发消息给客户端里的keeWeb, 最后在客户端里发送webDav http请求

可以实现, 欢迎 PR
我看 WebDAV 相关的请求是这一部分
https://github.com/Zuoqiu-Yingyi/keeweb/blob/edceb0a8b50252862ddbe34733d81af0b470c947/app/scripts/storage/impl/storage-webdav.js#L295-L387

@iamqiz
Copy link
Author

iamqiz commented Dec 1, 2023

@Zuoqiu-Yingyi 看了keeWeb的代码, 看不懂, 它是啥架构的?

@Zuoqiu-Yingyi
Copy link
Owner

@Zuoqiu-Yingyi 看了keeWeb的代码, 看不懂, 它是啥架构的?

就是个用 vanilla js 实现的单页面 web 应用

@iamqiz
Copy link
Author

iamqiz commented Dec 2, 2023

@Zuoqiu-Yingyi 搜嘎
话说如果是docker部署的思源,那这个KeePass插件是不是也不能使用webDav了?( 因为是浏览器+跨域访问?)

@Zuoqiu-Yingyi
Copy link
Owner

@Zuoqiu-Yingyi 搜嘎 话说如果是docker部署的思源,那这个KeePass插件是不是也不能使用webDav了?( 因为是浏览器+跨域访问?)

有不少 WebDAV 服务的跨域策略比较宽松, 这种可以正常使用
或者可以直接将 *.kdbx 文件保存在思源里面, 这样旧可以稳定加载了

@iamqiz
Copy link
Author

iamqiz commented Dec 3, 2023

@Zuoqiu-Yingyi 这个问题要是解决的话,其它很多插件也能受益,
查了些资料,我觉得让插件网页端通过内核作为代理服务器去访问跨域应该可行,
我现在遇到的问题是前端有哪些库支持使用http代理访问https (axios试了会报错 SSL routines:ssl3_get_record:wrong version number)
golang作代理,找到了这个库: https://github.com/snail007/goproxy , 但不能免费商用
萌佬剩下靠你了!

@Zuoqiu-Yingyi
Copy link
Owner

Zuoqiu-Yingyi commented Dec 3, 2023

内核有一个 API /api/network/forwardProxy 应该够用了

@iamqiz
Copy link
Author

iamqiz commented Dec 3, 2023

@Zuoqiu-Yingyi 我去,已经有了! nice! 我测试一下

@iamqiz
Copy link
Author

iamqiz commented Dec 4, 2023

@Zuoqiu-Yingyi 用了forwardProxy ,插件可以跨域访问webDAV了!
不过感觉不太优雅,改动大,要把payload和response进行类型转换,对于response还要转换数据结构,xhr.response属性还是只读的
有没有好用的支持proxy的http库? (除了axios)

@Zuoqiu-Yingyi
Copy link
Owner

有没有好用的支持proxy的http库? (除了axios)

这我就不太清楚了, 因为我也没相关的经验

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants