如何在firebase hosting中托管单页webapp的静态文件,并在其他服务器中部署web API

如何在firebase hosting中托管单页webapp的静态文件,并在其他服务器中部署web API,firebase,firebase-hosting,Firebase,Firebase Hosting,我有一个单页webapp,它使用通过同一个域公开的restapi。目前,静态文件由公开RESTAPI的同一台服务器提供 我正试图卸载服务于firebase主机的静态文件。如果我将静态文件移动到firebase主机,我必须将域的DNS条目指向firebase主机,这将使webapp也向firebase主机发出REST请求 我可以更新webapp,使其将REST请求发送到当前服务器地址,而不是firebase主机,但这会使请求变慢,因为浏览器会在发出每个由于CORS的请求之前使用飞行前请求 有人知道

我有一个单页webapp,它使用通过同一个域公开的restapi。目前,静态文件由公开RESTAPI的同一台服务器提供

我正试图卸载服务于firebase主机的静态文件。如果我将静态文件移动到firebase主机,我必须将域的DNS条目指向firebase主机,这将使webapp也向firebase主机发出REST请求

我可以更新webapp,使其将REST请求发送到当前服务器地址,而不是firebase主机,但这会使请求变慢,因为浏览器会在发出每个由于CORS的请求之前使用飞行前请求

有人知道如何正确解决这个问题吗?

这可以通过使用重定向来解决,特别是使用重定向,您可以引用位置
/foo
作为静态url路径,并让它从
/bar
加载内容

“托管”:{
// ...
//对于到“/foo”(但不是“/foo/**”)的请求,返回到“/bar”的永久重定向
“重定向”:[{
“来源”:“/foo”,
“目的地”:“/bar”,
“类型”:301
} ]
}
如果您需要使用重写等方式来处理云函数,还有其他选择,我怀疑组合将适合您的需要。请查看文档中的以供参考

更新:

要设置不带cors的API路由,可以执行以下操作

app.get(“/apiPath”,cors({origin:false}),(req,res)=>{
/...
})

我不希望向浏览器发送重定向,因为这会增加延迟(浏览器需要在收到重定向(包括飞行前请求)后再次向我的REST端点发送请求)。另外,将我的REST服务迁移到
云运行
对我来说也不是一个简单的解决方案。如果是这样,您是否考虑过使用子域指向web API的域
api.myapp.com
这是相当标准的,允许您在事件的DNS端重定向,而不是依赖于中间宿主自己一旦涉及不同的域,CORS就会出现,浏览器必须发送飞行前请求,从而增加延迟,对吗?您可以使用no cors标志-但是大多数API从一开始就已经涉及cors。无论如何,如果您不需要cors,它将您的请求限制为HEAD、GET和POST,并且您仅限于简单的头,谢天谢地,这些只是API需要的
授权
头和一些其他头的一个小不便,因此请求不属于简单请求的类别。