views:

241

answers:

4

Is there consistency and/or a standard on how browsers send a url to a host related to trailing slashes?

Meaning, if I type in http://example.com in the address bar of a web browser, is the browser suppose to add a trailing slash (http://example.com/) or not?

A: 

If I know correctly, basically the server at the site redirects you to http://example.com/something/ from http://example.com/something.

As for the pure domain names, it always sends a request ending with a slash. (The domain name itself is not included in the path section of an HTTP request, just as Greg Hewgill and the others wrote. It is, however, included in the headers.)

You can check it with a tool like Fiddler, though.

Venemo
I think you're thinking of the case where a path refers to a *directory* on the server and the browser has not sent a trailing slash. The OP's question relates to an empty path.
Greg Hewgill
Oh, so the server does this - not the browser?
Hank
Yep, empty path
Hank
Edited my post to clarify it. :)
Venemo
Sorry, but you are incorrect by saying that "domain name itself is not included in an HTTP request". It is included in headers (which are part of request), not in request path.
jholster
This is what I meant.
Venemo
+8  A: 

The HTTP request sent from the browser to the server does not include the domain name, only the "path" portion (starting from the first slash after the domain name). Since the path cannot be empty, a / is sent in that case.

A sample GET request for the root of a web site might be:

GET / HTTP/1.0

The / above cannot be omitted.

Greg Hewgill
To clarify this, domain is sent in `Host` header (HTTP 1.1 only).
jholster
So what you're saying is that even if you have an empty path, the URL is guaranteed to have a trailing slash?
Hank
@Hank: What I'm saying is that *if* you have an empty path, a single `/` is sent. This doesn't say anything about trailing slashes if the path portion is *not* empty (in that case, the browser sends exactly what is on the URL bar, but the server may choose to redirect the browser in its response).
Greg Hewgill
(Sorry for intervention.) In other words: if the path is empty, browser adds /. If path is not empty, the trailing / is added by server (if added at all).
jholster
+6  A: 

Note that it's a very different matter when the URL has a path element:

http://example.com/dir

is a different URL than

http://example.com/dir/

and could in fact contain different content, and have a different search engine ranking.

Michael Borgwardt
this is a good point. It's recommended to end the url with "/"
Claudio Redi
@Claudio, some reference please?
jholster
@Yaggo: take a look on google "trailing slash url". I don't remember a single place where I've read it, sorry man.
Claudio Redi
I did and found no evidence, only personal opinions. URIs without trailing slash are extremely popular (which alone doesn't quarantee anything) and I have never seen fact-based arguments against them. (Back when the web was mainly static files, appending / to directories was maybe de-facto standard, but I don't see a reason to prefer that nowdays.)
jholster
well, a url without "/" could be a file or a directory so the web server must do an extra check. If I'm not wrong some web server could by default do a redirect from www.whatever.com/dir to www.whatever.com/dir/. If I have to select an approach, trailing backslash would be the safer I think
Claudio Redi
The concept of 'directory' is vague in today's web. Leaving out trailing slash doesn't force server make "extra check" _per se_. URIs don't necessarily reflect a file hierarchy or have anything to do with files. I think your point of view is about statistic files, while I'm talking about web applications generally.
jholster
Yes, for rewritten URLs urls probably it's only question of prefference. I see your point.
Claudio Redi
+2  A: 

As RFC 2616 tells:

3.2.2 http URL

The "http" scheme is used to locate network resources via the HTTP
protocol. This section defines the scheme-specific syntax and
semantics for http URLs.

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

If the port is empty or not given, port 80 is assumed. The semantics
are that the identified resource is located at the server listening for TCP connections on that port of that host, and the Request-URI for the resource is abs_path (section 5.1.2). The use of IP addresses in URLs SHOULD be avoided whenever possible (see RFC 1900 [24]). If the abs_path is not present in the URL, it MUST be given as "/" when used as a Request-URI for a resource (section 5.1.2). If a proxy receives a host name which is not a fully qualified domain name, it MAY add its domain to the host name it received. If a proxy receives a fully qualified domain name, the proxy MUST NOT change the host name.

Read more: http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGbpjYWa

5.1.2 Request-URI
...
For example, a client wishing to retrieve the resource above directly from the origin server would create a TCP connection to port 80 of the host "www.w3.org" and send the lines:

   GET /pub/WWW/TheProject.html HTTP/1.1
   Host: www.w3.org

followed by the remainder of the Request. Note that the absolute path cannot be empty; if none is present in the original URI, it MUST be given as "/" (the server root).

Read more: http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGcaRbqU

Dor