Почему некоторые URL-адреса сайтов не содержат расширение файла? - PullRequest
26 голосов
/ 03 сентября 2010

Я просматривал Интернет и заметил, что, например, YouTube содержит URL-адрес, подобный этому, для обозначения страницы видео: http://www.youtube.com/watch?v=gwS1tGLB0vc.

Мой сайт использует такой URL-адрес для страницы темы: http://www.example.com/page.php?topic_id=6f3246d0sdf42c2jb67abba60ce33d5cc.

Разница в том, что если вы еще не заметили, что на youtube нет расширения файла для их страницы просмотра, поэтому мне интересно, почему некоторые сайты не используют расширения файлов и для чего они служат

Ответы [ 13 ]

34 голосов
/ 03 сентября 2010

Расширения файлов не используются из-за идеи, что URI (и, следовательно, URL) должны быть независимыми от реализации - если вы хотите получить доступ к адресам Джорджа Буша-младшего, вы можете перейти к http://www.whitehouse.gov/presidents/georgewbush/addresses (например).Используют ли серверы Белого дома PHP, Python или Perl, не имеет значения для конечного пользователя, поэтому они не должны этого видеть.Конечному пользователю не важно, как была сгенерирована страница, потому что все веб-языки выводят одинаковый HTML, CSS и т. П., И они просто просматривают страницу в своем веб-браузере.

Большинство веб-сайтовфреймворки встраивают эту функциональность по умолчанию, именно по этой причине, и это может быть выполнено независимо от переписывания URL в большинстве веб-серверов.Этот идеал кодифицирован в Руководстве по стилю W3C, которое, несомненно, является большим сторонником того, что эта идея так широко принята.Это указано в их руководстве, "Классные URI не меняются" , которое должно прояснить ситуацию, если вы до сих пор не совсем поняли причину здесь.Этот документ является основным документом по этому вопросу и стандартом де-факто для фреймворков.

Стоит отметить, что обычно файлы, которые в итоге загружаются (а иногда и файлы данных, используютсяв AJAX) по-прежнему сохраняются их расширения файлов - http://example.com/song.mp3 или http://example.com/whitepaper.pdf - поскольку они предназначены для сохранения на компьютере конечного пользователя, где имеют значение расширения файла.Расширения не включены для страниц, которые просто отображаются - это большинство страниц.

12 голосов
/ 03 сентября 2010

То, что вы видите, является примером маршрутизации URL.Вместо указания на определенный файл (например, page.php) сервер использует таблицу маршрутизации или конфигурацию, которая направляет запрос обработчику, который фактически отображает html (или что-либо еще, в зависимости от возвращаемого типа mime).Если вы заметили, StackOverflow использует тот же механизм.

7 голосов
/ 03 сентября 2010

Наличие или отсутствие расширения не имеет значения.Браузер работает с типом MIME, возвращаемым сервером, а не с любым расширением, используемым в URL.

6 голосов
/ 03 сентября 2010

Когда вы спросите «Почему?»Вы спрашиваете по технической причине или по причине дизайна?Некоторые уже ответили на технические вопросы, поэтому я просто прокомментирую дизайн.

По сути, это сводится к тому, что URL является конечной точкой.Это место, куда пользователи / службы должны попасть.Расширение не имеет значения в большинстве случаев.Если пользователь просматривает Интернет и переходит на http://site.com/users, он ожидает список пользователей.Ему все равно, что там не написано .html или .php.И как дизайнер, использующий эти расширения, не имеет смысла.Вы хотите, чтобы ваше приложение имело смысл, и эти расширения на самом деле не дают какой-либо информации о том, что нужно пользователю.

Времена, когда вы захотите их использовать, были, если вы создавали службу, которую использовали бы другие приложения.Затем вы можете использовать расширение, чтобы указать, какие данные можно ожидать получить (.json, .xml и т. Д.).Есть люди, работающие над рекомендациями по дизайну и спецификациями для этого материала, но все рано

В основном эти расширения используются, потому что именно так работают веб-серверы / клиенты по умолчанию.По мере развития веб-разработки мы стали более профессионально относиться к URL-адресам и старались, чтобы они имели смысл для людей, читающих / использующих их.

5 голосов
/ 03 сентября 2010

Хотя расширения не имеют значения для браузера, который просто использует переданные ему заголовки, чтобы определить, что отображать и как отображать его, скорее всего, они имеют значение на сервере. Например, на вашем компьютере может быть установлен интерпретатор php и ruby, но на вашем веб-сервере есть файлы конфигурации для сопоставления расширений файлов с типами MIME. Например, из Apache php5.conf:

  AddType application/x-httpd-php .php .phtml .php3

, который сообщает Apache, что файлы, оканчивающиеся на .php, .phtml и .php3, должны распознаваться как файлы PHP.

Однако, поскольку расширения ничего не значат для клиента, URL-адреса часто выглядят «лучше» без них. Для этого можно использовать такие технологии, как Apache mod_rewrite, чтобы «переписать» URL-адреса клиентских земель, чтобы иметь значение на сервере.

Например, вы можете установить правила mod_rewrite для перезаписи URL-адреса, например http://yourblog.com/article/the-article-you-wrote (выглядит лучше и проще для ввода и запоминания), до http://yourblog.com/articles.php?title=the-article-you-wrote, который Apache может использовать для правильной маршрутизации запроса PHP скрипт.

2 голосов
/ 29 апреля 2011

URL-адрес должен рассматриваться как часть пользовательского интерфейса. Как таковой, он должен быть предназначен для передачи информации о том, где пользователь находится на сайте, и структуре сайта.

URL-адрес, такой как:

mysite.com / спорт / футбол / brazil_wins_worldcup

много говорит пользователю о структуре сайта и о том, где он сейчас находится. Для сравнения:

mysite.com / article.php? Cateogry = 12 & articleid = 371

бесполезен, вместо этого он раскрывает нерелевантные детали реализации, например, какой язык используется для создания сайта и какой идентификатор этой статьи (вероятно, хранится в базе данных под этим идентификатором)

В дополнение к этому эстетическому аргументу (не подвергайте пользователя ненужным деталям реализации), он также помогает сделать сайт перспективным. Потому что, если вы никогда не раскрывали язык по своему выбору, вы можете позже перейти на Ruby или Python без каждой ссылки в мире, указывающей на вас, которая теперь составляет 404.

Дизайн URL-адресов имеет смысл для пользователей, и , чтобы быть ориентированными на будущее.

2 голосов
/ 03 сентября 2010

Ну, расширения файлов бесполезны в интернете.Браузеру все равно, какое расширение файла.Вы можете использовать файл CSS как .avi.Так почему бы просто не оставить это?Это позволяет использовать короткие URL-адреса.

Более того, «перезапись» URL-адреса позволяет получить более читаемые URL-адреса.Вы можете не понимать /categories.php?id=455, но вы делаете /455-some-category.

Если вы хотите сделать это самостоятельно и используете Apache, взгляните на mod_rewrite.

2 голосов
/ 03 сентября 2010

Ключ - поле Content-Type заголовка ответа HTTP. Примерно так:

HTTP 200 OK
Content-Type: video/flv
Content-Length: 102345

DATA-DATA-DATA-DATA-DATA-DATA-....

Смотри также:

Content-Disposition: attachment; filename=genome.jpeg;
     modification-date="Wed, 12 Feb 1997 16:29:51 -0500";

Подробнее: http://en.wikipedia.org/wiki/MIME

1 голос
/ 03 сентября 2010

Обычным поведением веб-сервера является сопоставление запрошенного пути URI с файлом где-то в корневом каталоге документа.Так что http://example.com/foo/bar просто отображается на /path/do/document/root/foo/bar.Кроме того, веб-сервер должен знать, как обрабатывать файл.Это часто делается расширением имени файла.Таким образом, файлы с расширением имени файла .php обрабатываются интерпретатором PHP.

Теперь, помимо этого нормального поведения, большинство веб-серверов имеют функции, которые позволяют изменять оба сопоставления (например, перезапись URL * ) и способ обработки файла без расширения имени файла.

В случае веб-сервера Apache первое можно сделать с помощью mod_rewrite :

RewriteEngine on
RewriteRule ^/watch$ /watch.php

И последнее можно сделать с помощью mod_mime :

<File watch>
    ForceType application/x-httpd-php
</File>

(Да, на самом деле это не функция mod_mime, а core ).

1 голос
/ 03 сентября 2010

Есть много возможных ответов на это.Именно так настроены ваши серверы веб-приложений, что приводит к интерпретации вашего веб-браузера.Могут быть ситуации, когда вы используете перезапись или маршрутизацию URL-адреса и, как уже говорили другие, какие обработчики вы предоставляете для запрошенных URL-адресов или расширений.

У меня может быть URL-адрес типа "http://cory.com/this/really/doesnt/exist" и он должен указывать на "http://cory.com/this.does.exist.123", если бы я хотел.

...