mirror of
https://github.com/golang/go
synced 2024-11-18 18:14:43 -07:00
net/url: normalize scheme to lower case (http not HTTP)
Also document %2f vs / ambiguity in URL.Path. Fixes #3913. Fixes #3659. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7225076
This commit is contained in:
parent
d314e3a68e
commit
4085426f7d
@ -220,6 +220,12 @@ func escape(s string, mode encoding) string {
|
|||||||
//
|
//
|
||||||
// scheme:opaque[?query][#fragment]
|
// scheme:opaque[?query][#fragment]
|
||||||
//
|
//
|
||||||
|
// Note that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.
|
||||||
|
// A consequence is that it is impossible to tell which slashes in the Path were
|
||||||
|
// slashes in the raw URL and which were %2f. This distinction is rarely important,
|
||||||
|
// but when it is a client must use other routines to parse the raw URL or construct
|
||||||
|
// the parsed URL. For example, an HTTP server can consult req.RequestURI, and
|
||||||
|
// an HTTP client can use URL{Opaque: "/Go%2f"} instead of URL{Path: "/Go/"}.
|
||||||
type URL struct {
|
type URL struct {
|
||||||
Scheme string
|
Scheme string
|
||||||
Opaque string // encoded opaque data
|
Opaque string // encoded opaque data
|
||||||
@ -371,6 +377,7 @@ func parse(rawurl string, viaRequest bool) (url *URL, err error) {
|
|||||||
if url.Scheme, rest, err = getscheme(rawurl); err != nil {
|
if url.Scheme, rest, err = getscheme(rawurl); err != nil {
|
||||||
goto Error
|
goto Error
|
||||||
}
|
}
|
||||||
|
url.Scheme = strings.ToLower(url.Scheme)
|
||||||
|
|
||||||
rest, url.RawQuery = split(rest, '?', true)
|
rest, url.RawQuery = split(rest, '?', true)
|
||||||
|
|
||||||
|
@ -251,6 +251,15 @@ var urltests = []URLTest{
|
|||||||
},
|
},
|
||||||
"file:///home/adg/rabbits",
|
"file:///home/adg/rabbits",
|
||||||
},
|
},
|
||||||
|
// case-insensitive scheme
|
||||||
|
{
|
||||||
|
"MaIlTo:webmaster@golang.org",
|
||||||
|
&URL{
|
||||||
|
Scheme: "mailto",
|
||||||
|
Opaque: "webmaster@golang.org",
|
||||||
|
},
|
||||||
|
"mailto:webmaster@golang.org",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// more useful string for debugging than fmt's struct printer
|
// more useful string for debugging than fmt's struct printer
|
||||||
|
Loading…
Reference in New Issue
Block a user