Universal resource locator (URL)s are an HTTP construct. There is nothing in any of the other network layers that knows or cares about URLs as such. The Domain name system (DNS) cares about the domain name portion, but it doesn’t know anything about the larger URL into which it is embedded; it’s up to the HTTP client to extract the domain name and resolve it to an IP address.

It is up to the HTTP server to decide what, if anything, to make of the URL. The idea that URLs correspond one-to-one with files is a relic of the early web, though often a subset of URLs at a given domain still do (e.g., static assets).

The URL contains at least one obvious boundary violation: you can specify a UDP port by appending :<port #> after the domain name. This really shouldn’t be the business of HTTP, and it’s almost never used outside of development, but it’s convenient for that. It is nearly useless for security, though; don’t “secure” a service by changing its port.