aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-10-31 16:44:03 -0700
committerChris Lu <chris.lu@gmail.com>2020-10-31 16:44:03 -0700
commit306062b4e7cacf9fbeae227965eeeef08ccfeb92 (patch)
tree0148fb84a5b306e4269b2a1ae267b0db493f7fb6
parent05acc3329411d50e62a973cb9e93edfa7216995f (diff)
downloadseaweedfs-306062b4e7cacf9fbeae227965eeeef08ccfeb92.tar.xz
seaweedfs-306062b4e7cacf9fbeae227965eeeef08ccfeb92.zip
filer: add CORS support
-rw-r--r--weed/server/filer_server_handlers.go25
-rw-r--r--weed/server/volume_server_handlers.go6
-rw-r--r--weed/server/volume_server_handlers_read.go7
3 files changed, 29 insertions, 9 deletions
diff --git a/weed/server/filer_server_handlers.go b/weed/server/filer_server_handlers.go
index 18f78881c..3f2946339 100644
--- a/weed/server/filer_server_handlers.go
+++ b/weed/server/filer_server_handlers.go
@@ -10,6 +10,10 @@ import (
func (fs *FilerServer) filerHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Server", "SeaweedFS Filer "+util.VERSION)
+ if r.Header.Get("Origin") != "" {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Access-Control-Allow-Credentials", "true")
+ }
start := time.Now()
switch r.Method {
case "GET":
@@ -32,11 +36,19 @@ func (fs *FilerServer) filerHandler(w http.ResponseWriter, r *http.Request) {
stats.FilerRequestCounter.WithLabelValues("post").Inc()
fs.PostHandler(w, r)
stats.FilerRequestHistogram.WithLabelValues("post").Observe(time.Since(start).Seconds())
+ case "OPTIONS":
+ stats.FilerRequestCounter.WithLabelValues("options").Inc()
+ OptionsHandler(w, r, false)
+ stats.FilerRequestHistogram.WithLabelValues("head").Observe(time.Since(start).Seconds())
}
}
func (fs *FilerServer) readonlyFilerHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Server", "SeaweedFS Filer "+util.VERSION)
+ if r.Header.Get("Origin") != "" {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Access-Control-Allow-Credentials", "true")
+ }
start := time.Now()
switch r.Method {
case "GET":
@@ -47,5 +59,18 @@ func (fs *FilerServer) readonlyFilerHandler(w http.ResponseWriter, r *http.Reque
stats.FilerRequestCounter.WithLabelValues("head").Inc()
fs.GetOrHeadHandler(w, r, false)
stats.FilerRequestHistogram.WithLabelValues("head").Observe(time.Since(start).Seconds())
+ case "OPTIONS":
+ stats.FilerRequestCounter.WithLabelValues("options").Inc()
+ OptionsHandler(w, r, true)
+ stats.FilerRequestHistogram.WithLabelValues("head").Observe(time.Since(start).Seconds())
}
}
+
+func OptionsHandler(w http.ResponseWriter, r *http.Request, isReadOnly bool) {
+ if isReadOnly {
+ w.Header().Add("Access-Control-Allow-Methods", "GET, OPTIONS")
+ } else {
+ w.Header().Add("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS")
+ }
+ w.Header().Add("Access-Control-Allow-Headers", "*")
+} \ No newline at end of file
diff --git a/weed/server/volume_server_handlers.go b/weed/server/volume_server_handlers.go
index 6f44b9a0a..7852c950a 100644
--- a/weed/server/volume_server_handlers.go
+++ b/weed/server/volume_server_handlers.go
@@ -44,7 +44,8 @@ func (vs *VolumeServer) privateStoreHandler(w http.ResponseWriter, r *http.Reque
vs.guard.WhiteList(vs.PostHandler)(w, r)
case "OPTIONS":
stats.ReadRequest()
- vs.guard.WhiteList(vs.OptionsHandler)(w, r)
+ w.Header().Add("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS")
+ w.Header().Add("Access-Control-Allow-Headers", "*")
}
}
@@ -63,7 +64,8 @@ func (vs *VolumeServer) publicReadOnlyHandler(w http.ResponseWriter, r *http.Req
vs.GetOrHeadHandler(w, r)
case "OPTIONS":
stats.ReadRequest()
- vs.OptionsHandler(w, r)
+ w.Header().Add("Access-Control-Allow-Methods", "GET, OPTIONS")
+ w.Header().Add("Access-Control-Allow-Headers", "*")
}
}
diff --git a/weed/server/volume_server_handlers_read.go b/weed/server/volume_server_handlers_read.go
index 909b674a4..15fd446e7 100644
--- a/weed/server/volume_server_handlers_read.go
+++ b/weed/server/volume_server_handlers_read.go
@@ -270,10 +270,3 @@ func writeResponseContent(filename, mimeType string, rs io.ReadSeeker, w http.Re
})
return nil
}
-
-func (vs *VolumeServer) OptionsHandler(w http.ResponseWriter, r *http.Request) {
- w.Header().Add("Access-Control-Allow-Origin", "*")
- w.Header().Add("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS")
- w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
- w.Header().Add("Access-Control-Allow-Credentials", "true")
-} \ No newline at end of file