Some sites and pages are accesible through two or more similar hostnames or URIs. In general, this is bad because the server is the only machine aware that both addresses yield the same thing. Humans, of course, realise this quickly, but can't be entirely certain just by examining the content obtained through both addresses. And then this uncertainty means that indexing robots (and other URI-managing software) cannot afford to make such assumptions at all. The result is that two distinct entries appear in the index, or in your bookmarks, or…

For example, content for a URI ending in a slash / is often taken from a file which is also available by appending index.html or default.htm.

A more coarse example is when a site has two slightly different domain names, e.g., www.example.com and example.com. Now every page is duplicated. If you want to link to it, which do you choose?

The most robust solution is probably to configure your server to only serve through one URI per resource (notwithstanding content negotiation). If you want to have multiple addresses for convenience (say, publishing a short address in a TV advert), define one address as canonical, then make the others generate a 301 Moved Permanently to point to the canonical one. This tells both machines and humans that the link they are using to refer to your page is incorrect, and should be fixed. If it's not strictly incorrect, and you intend it to remain a valid shortcut indefinitely, it's reasonable to use a 302 Found.

The other aspect to solving this problem is simply not to publish any non-canonical URIs, and is particularly applicable when dealing with index.html or default.htm. You could reasonably choose to always link to the names explicitly, avoiding the server's facility to locate them itself, or you could simple turn off that facility.