This question already has an answer here:
- Is a URL allowed to contain a space? 11 answers
w3fools claims that URLs can contain spaces: http://w3fools.com/#html_urlencode
Is this true? How can a URL contain an un-encoded space?
I'm under the impression the request line of an HTTP Request uses a space as a delimiter, being formatted as {the method}{space}{the path}{space}{the protocol}
:
GET /index.html http/1.1
Therefore how can a URL contain a space? If it can, where did the practice of replacing spaces with +
come from?
A URL must not contain a literal space. It must either be encoded using the percent-encoding or a different encoding that uses URL-safe characters (like application/x-www-form-urlencoded that uses
+
instead of%20
for spaces).But whether the statement is right or wrong depends on the interpretation: Syntactically, a URI must not contain a literal space and it must be encoded; semantically, a
%20
is not a space (obviously) but it represents a space.The information there is I think partially correct:
As you noted, an URL can NOT use spaces. The HTTP request would get screwed over. I'm not sure where the
+
is defined, though%20
is standard.Spaces are simply replaced by "%20" like :
http://www.example.com/my%20beautiful%20page
They are indeed fools. If you look at RFC 3986 Appendix A, you will see that "space" is simply not mentioned anywhere in the grammar for defining a URL. Since it's not mentioned anywhere in the grammar, the only way to encode a space is with percent-encoding (
%20
).In fact, the RFC even states that spaces are delimiters and should be ignored:
and
Curiously, the use of
+
as an encoding for space isn't mentioned in the RFC, although it is reserved as a sub-delimeter. I suspect that its use is either just convention or covered by a different RFC (possibly HTTP).