【问题标题】:Can I have a deploy with only publicly mapped frontend?我可以只使用公开映射的前端进行部署吗?
【发布时间】:2021-12-25 00:54:15
【问题描述】:

我想使用两个独立的代码库制作一个 Web 应用程序 - 使用 Spring Boot 构建后端,使用 sveltekit 构建前端。

此外,我希望在部署整个堆栈时只公开前端端点。
(例如:避免对后端 API 的任何形式的直接或垃圾邮件攻击)

这可能吗?

我很困惑,因为我发现的所有示例都使用localhost 来获取后端 API;并且永远不会,例如:公共 IP 地址。
如果我有这样的组件(伪代码):

ShowUserListComponent extends Component {
    val users = null
    
    fun fetchUsers() {
        users = axios.fetch("localhost:8080/users")
    }
    
    render() {
        <button onClick={fetchUsers}>
        foreach(user in users) {
            <div>{{ user.name }}</div>
        }
    }
}

这里的请求/响应和数据流是什么?像什么?:

  • 用户访问地址www.my-cool-page.com
  • sveltekit 将整个应用程序(HTML、CSS、javascript)下载到客户端(SPA 是这样工作的吗?)
  • 用户导航到/users路由->浏览器本地将组件更改为ShowUserListComponent
  • 如果后端的 API 不公开,本地组件如何获取数据?

【问题讨论】:

    标签: reactjs spring-boot single-page-application vuejs3 sveltekit


    【解决方案1】:

    这就是CORS(跨域资源共享)的用途。您可以告诉后端服务器哪些域可以访问哪些路由。从而防止未经您授权的 URL 访问您的 API。

    您可以在此处找到有关如何为 spring 启用 CORS 的指南:https://spring.io/guides/gs/rest-service-cors/

    【讨论】:

    • 但这是否意味着后端的API需要公开?即便如此,如果组件在客户端设备上运行,那么后端应该允许所有来源(=IP 地址),不是吗?
    • @milkamar 所以你的前端将托管在某个地方,假设你将前端托管在www.my-app.com,然后你可以告诉后端只允许来自www.my-app.com的请求,当有人试图从另一个 URL 访问后端,它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多