diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-08-24 13:23:15 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-08-24 13:23:15 +0200 | 
| commit | 0b48c8ae1c27bfcc1f5b3f611e64f47321cd18c6 (patch) | |
| tree | 107ba5c251175c7ce0d07eeb4748967510c548e2 /src/pkg/http/server.go | |
| parent | 825e92f34920934f09dbf4c614dbd2913ba464cb (diff) | |
| download | golang-0b48c8ae1c27bfcc1f5b3f611e64f47321cd18c6.tar.gz | |
Imported Upstream version 2011.08.17
Diffstat (limited to 'src/pkg/http/server.go')
| -rw-r--r-- | src/pkg/http/server.go | 27 | 
1 files changed, 14 insertions, 13 deletions
| diff --git a/src/pkg/http/server.go b/src/pkg/http/server.go index 1955b67e6..b634e27d6 100644 --- a/src/pkg/http/server.go +++ b/src/pkg/http/server.go @@ -25,6 +25,7 @@ import (  	"strings"  	"sync"  	"time" +	"url"  )  // Errors introduced by the HTTP server. @@ -716,8 +717,8 @@ func StripPrefix(prefix string, h Handler) Handler {  // Redirect replies to the request with a redirect to url,  // which may be a path relative to the request path. -func Redirect(w ResponseWriter, r *Request, url string, code int) { -	if u, err := ParseURL(url); err == nil { +func Redirect(w ResponseWriter, r *Request, urlStr string, code int) { +	if u, err := url.Parse(urlStr); err == nil {  		// If url was relative, make absolute by  		// combining with request path.  		// The browser would probably do this for us, @@ -740,35 +741,35 @@ func Redirect(w ResponseWriter, r *Request, url string, code int) {  		}  		if u.Scheme == "" {  			// no leading http://server -			if url == "" || url[0] != '/' { +			if urlStr == "" || urlStr[0] != '/' {  				// make relative path absolute  				olddir, _ := path.Split(oldpath) -				url = olddir + url +				urlStr = olddir + urlStr  			}  			var query string -			if i := strings.Index(url, "?"); i != -1 { -				url, query = url[:i], url[i:] +			if i := strings.Index(urlStr, "?"); i != -1 { +				urlStr, query = urlStr[:i], urlStr[i:]  			}  			// clean up but preserve trailing slash -			trailing := url[len(url)-1] == '/' -			url = path.Clean(url) -			if trailing && url[len(url)-1] != '/' { -				url += "/" +			trailing := urlStr[len(urlStr)-1] == '/' +			urlStr = path.Clean(urlStr) +			if trailing && urlStr[len(urlStr)-1] != '/' { +				urlStr += "/"  			} -			url += query +			urlStr += query  		}  	} -	w.Header().Set("Location", url) +	w.Header().Set("Location", urlStr)  	w.WriteHeader(code)  	// RFC2616 recommends that a short note "SHOULD" be included in the  	// response because older user agents may not understand 301/307.  	// Shouldn't send the response for POST or HEAD; that leaves GET.  	if r.Method == "GET" { -		note := "<a href=\"" + htmlEscape(url) + "\">" + statusText[code] + "</a>.\n" +		note := "<a href=\"" + htmlEscape(urlStr) + "\">" + statusText[code] + "</a>.\n"  		fmt.Fprintln(w, note)  	}  } | 
