diff options
| author | chrislusf <chris.lu@gmail.com> | 2015-04-16 10:02:53 -0700 |
|---|---|---|
| committer | chrislusf <chris.lu@gmail.com> | 2015-04-16 10:02:53 -0700 |
| commit | 087b839354d3d5d3376e87b919b46595548cbe53 (patch) | |
| tree | 5530370c429df9bbdaeec774c3ee1eb0cea73e5b | |
| parent | 67146ffa785fa35e216f603bcb80fb65c69f088c (diff) | |
| download | seaweedfs-087b839354d3d5d3376e87b919b46595548cbe53.tar.xz seaweedfs-087b839354d3d5d3376e87b919b46595548cbe53.zip | |
Nomalize url before redirecting.
| -rw-r--r-- | go/util/http_util.go | 7 | ||||
| -rw-r--r-- | go/weed/weed_server/master_server_handlers_admin.go | 2 | ||||
| -rw-r--r-- | go/weed/weed_server/volume_server_handlers_read.go | 3 |
3 files changed, 10 insertions, 2 deletions
diff --git a/go/util/http_util.go b/go/util/http_util.go index 52579d746..e2391887e 100644 --- a/go/util/http_util.go +++ b/go/util/http_util.go @@ -104,3 +104,10 @@ func DownloadUrl(fileUrl string) (filename string, content []byte, e error) { func Do(req *http.Request) (resp *http.Response, err error) { return client.Do(req) } + +func NormalizeUrl(url string) string { + if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") { + return url + } + return "http://" + url +} diff --git a/go/weed/weed_server/master_server_handlers_admin.go b/go/weed/weed_server/master_server_handlers_admin.go index e02423c60..074d7c441 100644 --- a/go/weed/weed_server/master_server_handlers_admin.go +++ b/go/weed/weed_server/master_server_handlers_admin.go @@ -123,7 +123,7 @@ func (ms *MasterServer) redirectHandler(w http.ResponseWriter, r *http.Request) } machines := ms.Topo.Lookup("", volumeId) if machines != nil && len(machines) > 0 { - http.Redirect(w, r, "http://"+machines[rand.Intn(len(machines))].PublicUrl+r.URL.Path, http.StatusMovedPermanently) + http.Redirect(w, r, util.NormalizeUrl(machines[rand.Intn(len(machines))].PublicUrl)+r.URL.Path, http.StatusMovedPermanently) } else { writeJsonError(w, r, http.StatusNotFound, fmt.Errorf("volume id %d not found", volumeId)) } diff --git a/go/weed/weed_server/volume_server_handlers_read.go b/go/weed/weed_server/volume_server_handlers_read.go index c5a1b861a..a3cb11cef 100644 --- a/go/weed/weed_server/volume_server_handlers_read.go +++ b/go/weed/weed_server/volume_server_handlers_read.go @@ -13,6 +13,7 @@ import ( "github.com/chrislusf/weed-fs/go/images" "github.com/chrislusf/weed-fs/go/operation" "github.com/chrislusf/weed-fs/go/storage" + "github.com/chrislusf/weed-fs/go/util" ) var fileNameEscaper = strings.NewReplacer("\\", "\\\\", "\"", "\\\"") @@ -38,7 +39,7 @@ func (vs *VolumeServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) lookupResult, err := operation.Lookup(vs.GetMasterNode(), volumeId.String()) glog.V(2).Infoln("volume", volumeId, "found on", lookupResult, "error", err) if err == nil && len(lookupResult.Locations) > 0 { - http.Redirect(w, r, "http://"+lookupResult.Locations[0].Url+r.URL.Path, http.StatusMovedPermanently) + http.Redirect(w, r, util.NormalizeUrl(lookupResult.Locations[0].PublicUrl)+r.URL.Path, http.StatusMovedPermanently) } else { glog.V(2).Infoln("lookup error:", err, r.URL.Path) w.WriteHeader(http.StatusNotFound) |
