fix:修改服务端静态资源跨域配置
This commit is contained in:
@@ -7,6 +7,10 @@ import (
|
|||||||
func CORSMiddleware(allowedOrigins []string) gin.HandlerFunc {
|
func CORSMiddleware(allowedOrigins []string) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
origin := c.Request.Header.Get("Origin")
|
origin := c.Request.Header.Get("Origin")
|
||||||
|
path := c.Request.URL.Path
|
||||||
|
|
||||||
|
// 检查是否是静态文件路径(/static 或 /assets)
|
||||||
|
isStaticPath := len(path) >= 7 && (path[:7] == "/static" || path[:7] == "/assets")
|
||||||
|
|
||||||
allowed := false
|
allowed := false
|
||||||
for _, o := range allowedOrigins {
|
for _, o := range allowedOrigins {
|
||||||
@@ -16,13 +20,22 @@ func CORSMiddleware(allowedOrigins []string) gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if allowed {
|
// 对于静态文件,如果有 Origin 头,总是允许跨域访问
|
||||||
|
if isStaticPath && origin != "" {
|
||||||
|
allowed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if allowed && origin != "" {
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
|
c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
|
||||||
|
} else if allowed && origin == "" {
|
||||||
|
// 如果没有 Origin 头但是允许的请求,设置为 *
|
||||||
|
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||||
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE, PATCH")
|
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE, PATCH")
|
||||||
|
c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length, Content-Type, Content-Disposition")
|
||||||
|
|
||||||
if c.Request.Method == "OPTIONS" {
|
if c.Request.Method == "OPTIONS" {
|
||||||
c.AbortWithStatus(204)
|
c.AbortWithStatus(204)
|
||||||
|
|||||||
Reference in New Issue
Block a user