Ajax: он отправляет меня на другой URL-адрес [дубликат]

Это делает ваш код намного более расширяемым и более простым в обслуживании, когда у вас есть схожие классы. Я младший программист, поэтому я не эксперт, но я только что закончил проект, требующий чего-то подобного.

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

Я решил, что было бы лучше создать абстрактный базовый класс для каждого типа управления, который будет содержать почти всю реальную логику, а затем производные типы, чтобы заботиться о различиях между этими двумя компонентами. Однако базовые классы не могли бы выполнять операции над этими компонентами, если бы мне приходилось беспокоиться о типах все время (ну, они могли бы иметь, но в каждом методе был бы оператор «if») .

Я определил простой интерфейс для этих компонентов, и все базовые классы общаются с этим интерфейсом. Теперь, когда я что-то меняю, он почти «работает» везде, и у меня нет дублирования кода.

173
задан TylerH 26 August 2015 в 19:32
поделиться

12 ответов

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

158
ответ дан Daniel Vassallo 21 August 2018 в 21:40
поделиться
  • 1
    +1 Согласен. Может быть (несколько) раз, когда абсолютные URL-адреса лучше, например, при использовании CDN, или если вам нужно изменить веб-сайт контента. Поиск доменного имени намного проще, чем поиск относительных URL-адресов IMHO. – Sune Rievers 5 January 2010 в 11:52
  • 2
    Для целей обслуживания может быть проще использовать абсолютные URL-адреса без имени домена. т. е. на StackOverflow используйте абсолютный URL '/ questions / 2005079 / absolute-vs-relative-urls' для ссылки на этот вопрос. «/» На передней панели делает URL абсолютным. Этот подход оправдывается при переходе файлов или изменении структуры каталогов вашего проекта. – Mike 5 June 2012 в 05:48
  • 3
    @Baumr Но можете ли вы это сделать? Я определенно являюсь поклонником / сторонником использования этого метода, но попадаю в более крупную структуру, и большие рефакторинги - это очень сложная задача. Хотя вы думали, что можете переключить их все, даже в интеллектуальную среду IDE, часто их можно пропустить, если они закодированы в строки или динамически созданы. Хуже всего то, что обычно эти пропущенные ссылки не пойманы до тех пор, пока ваше решение не вернется в производство ... :( – dudewad 21 December 2013 в 05:22
  • 4
    @Mike, почему бы вы называть корневым относительным URL «абсолютным»? – törzsmókus 22 March 2015 в 09:51
  • 5
    @ törzsmókus хороший вопрос. Это не позволяет мне редактировать, и это было много лет назад, прежде чем я даже натолкнулся на термин «корень». – Mike 25 March 2015 в 22:48
0
ответ дан Amal Murali 21 August 2018 в 21:40
поделиться

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

Существует довольно приличная статья об абсолютных относительных URL-адресах , проверьте ее.

5
ответ дан Ben Everard 21 August 2018 в 21:40
поделиться

Я собираюсь не согласиться с большинством здесь.

Я думаю, что относительная схема URL-адреса «прекрасна», когда вы хотите быстро что-то запустить и запустить, а не думать нестандартно, особенно если ваш проект мал с небольшим количеством разработчиков (или только вы сами).

Однако, как только вы начнете работать над большими, жирными системами, где вы постоянно переключаете домены и протоколы, я считаю, что более элегантный подход находится в порядке.

Когда вы сравниваете абсолютные и относительные URL по существу, Absolute выигрывает. Зачем? Потому что он никогда не сломается. Когда-либо. Абсолютный URL - это именно то, что он говорит. Уловка - это когда вам нужно ПОДДЕРЖАТЬ абсолютные URL-адреса.

Слабый подход к абсолютной привязке URL-адресов на самом деле жестко кодирует весь URL-адрес. Не лучшая идея и, вероятно, виновник того, почему люди считают их опасными / злыми / раздражающими для поддержания. Лучший подход - написать себе простой в использовании генератор URL-адресов. Они легко записываются и могут быть невероятно мощными - автоматически обнаруживают ваш протокол, легко конфигурируются (буквально устанавливают URL-адрес один раз для всего приложения) и т. Д., И он сам внедряет ваш домен. Самое приятное в этом: вы продолжаете кодирование с использованием относительных URL-адресов, и во время выполнения приложение вставляет ваши URL-адреса в полные абсолюты «на лету». Удивительный.

Увидев, как практически все современные сайты используют какой-то динамический back-end, именно в этом интересе этот сайт должен делать это именно так. Абсолютные URL-адреса делают больше, чем просто дают вам определенную информацию о том, где они указывают, - они также могут улучшить производительность SEO.

Могу добавить, что аргумент, что абсолютные URL-адреса каким-то образом изменяет время загрузки страницы, является мифом. Если ваш домен весит более нескольких байт, и вы в модеме в 80-х годах, конечно. Но это уже не так. https://stackoverflow.com/ - 25 байт, тогда как файл topbar-sprite.png, который они используют для навигационной области сайта, весит 9+ кб. Это означает, что дополнительные URL-данные составляют 0,2% от загруженных данных по сравнению с файлом спрайта, и этот файл даже не считается большим хитом производительности.

Это большое неоптимизированное полностраничное фоновое изображение гораздо более вероятно замедлит ваше время загрузки.

Интересное сообщение о том, почему относительные URL не следует использовать, находится здесь: http://yoast.com/relative-urls-issues/

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

Или, возможно, разработчик забыл переключить указатель и вдруг проиндексировал Google всю тестовую среду.

Абсолюты могут быть опасны, но при правильном использовании и таким образом, что не может сломать вашу сборку , они доказали, что они более надежный. Посмотрите на статью выше, которая дает кучу причин, почему генератор url Wordpress является супер удивительным.

:)

172
ответ дан Community 21 August 2018 в 21:40
поделиться
  • 1
    Использует ли абсолютные URL-адреса страницу быстрее, чем по сравнению с использованием относительных URL-адресов? (Любое время, потраченное на разрешение относительного пути?) – shasi kanth 17 February 2014 в 14:44
  • 2
    Любая возможная разница была бы настолько маленькой, что вам не нужно беспокоиться о том, насколько она измерима вообще. – PeeHaa 17 February 2014 в 14:45
  • 3
    Пример включения JQuery Google в качестве протокола: & lt; script src = & quot; // ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" & GT; & Lt; / сценарий & GT; – shasi kanth 17 February 2014 в 14:52
  • 4
    Когда вы говорите абсолютный URL-адрес, вы имеете в виду полный URL-адрес или используя / для ссылки на базовый путь? т.е. /products/wallets/thing.html в отличие от thing.html в отличие от http://www.myshop.com/products/wallets/thing.html – Bradley Flood 14 April 2014 в 02:12
  • 5
    Предварительная подготовка с помощью & quot; / & quot; Я полагаю, всегда будет относиться к корню домена. Поэтому, если ваш домен «www.example.com», любые ссылки, закодированные как «/image1.jpg" будет интерпретироваться как «www.example.com/image1.jpg" ;. Элементы без косой черты интерпретируются как относительно корня запроса. Когда я говорю «абсолютный URL», Я имею в виду полноценный URL. Я сжимаю, чтобы отправлять ссылки MSDN через Интернет, но на самом деле это довольно неплохая разбивка: msdn.microsoft.com/en-us/library/windows/desktop/… – dudewad 15 April 2014 в 00:09
  • 6
    Это нынешняя лучшая практика, хотя многие люди еще этого не осознали. Мне нравятся маршруты, например, в Кохане, где вы можете использовать echo Route::url('route_name') для создания абсолютного URL-адреса, используя URL-адрес сайта и информацию о маршруте, с возможностью сделать это через HTTPS. – J.Money 15 May 2014 в 16:57
  • 7
    Этот ответ предполагает, что абсолютные URL-адреса не генерируются динамически, что решает каждую упомянутую проблему. – J.Money 15 May 2014 в 17:06
  • 8
    Я чувствую необходимость указать, что модемы модемов не были оставлены в 80-х годах. Есть много людей, у которых нет выбора, кроме dialup или супер завышенного очень ограниченного спутникового интернета ... и если вы бедны, что может быть лучше, чем бесплатный набор? Мне действительно мешает видеть разработчиков, которые считают, что dialup больше не существует. Это может занять 5-10 минут (!!!), чтобы войти на сайт моего банка на dialup ... Paypal, Amazon и Ebay не намного лучше. Пещера Яйца (виртуальный сайт любимца) и Facebook просто не работают на dialup. Это затрагивает многих людей, которые живут в сельской местности. – Kat Cox 4 April 2015 в 11:34
  • 9
    Хорошо, да, в то время как есть некоторые люди в dialup, огромное (огромное) большинство пользователей not на dialup. Он также имеет много общего с демографическим. Если вы снимаете мега-огромные ультраэффективные результаты, начните обрезать свой домен с вашего URL-адреса. Но главным моментом этого комментария было подчеркнуть, что производительность обычно встречается в других областях - вы можете получить все времени передачи, которое вы потеряли в байтах url, оптимизируя одно изображение. но, если 20% или более ваших пользователей находятся на dialup, я думаю, это важно. В 2015 году и для всех практических целей это просто не так. – dudewad 6 April 2015 в 18:54
  • 10
    J.Money - это правильно. Современные веб-структуры имеют понятие «обратная маршрутизация». чтобы вы могли создавать URLS с одной из ваших страниц на другую вашу страницу (она должна быть на другой странице на вашем же сайте). Они позволяют указать имя URL-адреса, а затем использовать это имя вместо URL-адреса. Таким образом, если вы когда-либо захотите изменить URL-адрес, вы можете изменить URL-адрес в одном месте, так как везде вы только ссылаетесь на этот URL по его названию. – Kevin Wheeler 15 September 2015 в 18:54
-5
ответ дан Dougal 21 August 2018 в 21:40
поделиться

См. это: http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax

foo://username:password@example.com:8042/over/there/index.dtb;type=animal?name=ferret#nose
\ /   \________________/\_________/ \__/            \___/ \_/ \_________/ \_________/ \__/
 |           |               |       |                |    |       |           |       |
 |       userinfo         hostname  port              |    |       parameter query  fragment
 |    \_______________________________/ \_____________|____|____________/
scheme                  |                               | |  |
 |                authority                           |path|
 |                                                    |    |
 |            path                       interpretable as filename
 |   ___________|____________                              |
/ \ /                        \                             |
urn:example:animal:ferret:nose               interpretable as extension

Абсолютный URL-адрес включает части перед частью «пути» - другими словами, он включает в себя схему (http в http://foo/bar/baz) и имя хоста (foo в http://foo/bar/baz) (и опционально порт, userinfo и порт).

Относительный URL-адреса начинаются с пути.

Абсолютные URL-адреса, ну, абсолютны: местоположение ресурса может быть разрешено, глядя только на сам URL-адрес. Относительный URL-адрес в некотором смысле неполный: для его решения вам нужна схема и имя хоста, и они обычно берутся из текущего контекста. Например, на веб-странице в

http://myhost/mypath/myresource1.html

вы можете поместить ссылку так:

<a href="pages/page1">click me</a>

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

http://myhost/mypath/myresource1.html

, поэтому схема, имя хоста и ведущий путь к ним берутся и добавляются к pages/page1, что дает

http://myhost/mypath/pages/page1

Если ссылка была бы:

<a href="/pages/page1">click me</a>

(обратите внимание на /, появляющуюся в начале URL-адреса), тогда это было бы разрешено как

http://myhost/pages/page1

, потому что ведущий / указывает корень хоста.

В веб-приложении я бы посоветовал использовать относительные URL-адреса для всех ресурсов, принадлежащих вашему приложению. Таким образом, если вы измените расположение страниц, все будет работать. Любые внешние ресурсы (могут быть страницы полностью вне вашего приложения, а также статический контент, который вы доставляете через сеть доставки контента) всегда должны указывать на использование абсолютных URL-адресов: если вы этого не делаете, просто нет способа найти их, потому что они проживает на другом сервере.

55
ответ дан Erenor Paz 21 August 2018 в 21:40
поделиться
  • 1
    Относительные URL-адреса not должны начинаться с URL-адреса. //example.com/…, ?foobar и #foobar также являются относительными URL-адресами и не начинаются с URL-адреса (ну хорошо, для ?foobar вы можете сказать, что он начинается с пути empty ). – Gumbo 5 January 2010 в 11:03
  • 2
    @Gumbo, являются //example.com/… -типами URL-адреса, называемые относительными? это ново для меня. – törzsmókus 22 March 2015 в 09:52
  • 3
    @ törzsmókus В условиях RFC 2396 : «Относительные ссылки URI отличаются от абсолютного URI тем, что они не начинаются с имени схемы». – Gumbo 22 March 2015 в 16:30

URL-адрес, который начинается со схемы URL и конкретной схемы (http://, https://, ftp:// и т. д.), является абсолютным URL-адресом.

Любой другой URL-адрес является относительным URL-адресом и ему нужен базовый URL-адрес, из которого относительный URL-адрес разрешен (и, следовательно, зависит от него), который является URL-адресом ресурса, в котором используется ссылка, если не объявлено иначе.

Взгляните на RFC 2396 - Приложение C для примеров разрешения относительных URL.

4
ответ дан Gumbo 21 August 2018 в 21:40
поделиться

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

Absolute

Абсолютные URL-адреса связывают ваш код с протоколом и доменом. Это можно преодолеть с помощью динамических URL-адресов.

<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>

Absolute Pros:

  1. Control - управлять субдоменом и протоколом. Люди, которые входят через неясную субдомену, будут перенаправлены в соответствующий субдомен. Вы можете прыгать туда и обратно между безопасными и незащищенными, если это необходимо.
  2. Настраивается - разработчики любят, чтобы вещи были абсолютными. При использовании абсолютных URL-адресов вы можете создавать опрятные алгоритмы. URL-адреса могут быть настроены так, чтобы URL-адрес можно обновлять по всему сайту с одним изменением в одном файле конфигурации.
  3. Clairvoyance - вы можете искать людей, соскабливающих ваш сайт, или, возможно, забрать дополнительные внешние Ссылки.

Корневой относительный

Корневые относительные URL привязывают ваш код к базовому URL. Это можно преодолеть с помощью динамических URL-адресов и / или базовых тегов .

<a href=“/index.php?q=”>.example.com/index.php?q=</a>

Корневые относительные плюсы:

  1. Настраивается - базовый тег делает

Относительный

Относительные URL привязывают ваш код к структуре каталогов. Невозможно преодолеть это. Относительные URL-адреса полезны только в файловых системах для перемещения каталогов или в качестве ярлыка для черновой задачи.

<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />

Относительные минусы:

  1. CONFUSING - Сколько точек это ? сколько папок это? Где находится файл? Почему это не работает?
  2. ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ - Если файл случайно перемещен, ресурсы завершаются загрузкой, ссылки отправляют пользователя на неверные страницы, данные формы могут быть отправлены на неверную страницу. Если файл NEEDS должен быть перемещен, все ресурсы, которые собираются прекратить загрузку, и все ссылки, которые будут некорректны, должны быть обновлены.
  3. НЕ ПРОСМОТРЕТЬ - Когда веб-страницы становятся более сложными и начинается просмотр получая повторное использование на нескольких страницах, относительные ссылки будут относиться к файлу, в который они были включены. Если у вас есть фрагмент кода навигации, который будет размещаться на каждой странице, то относительный будет относиться к множеству разных мест. Первое, что люди понимают, когда начинают создавать шаблон, - это то, что им нужен способ управления URL-адресами.
  4. COMPUTED - они реализованы вашим браузером (надеюсь, согласно RFC). См. Главу 5 в RFC3986 .
  5. OOPS! - Ошибки или опечатки могут привести к ловушкам-паукам.

Эволюция маршрутов

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

<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
    http://dev.example.com/index.php/my:whacky:url
</a>

Маршруты Плюсы:

  1. Все преимущества абсолютных URL-адресов.
  2. Использование любого символа в URL.
  3. Больше контроля (хорошо для SEO).
  4. Возможность алгоритмически генерировать URL-адреса. Это позволяет настраивать URL-адреса. Изменение URL-адреса - это одно изменение в одном файле.
  5. Нет необходимости в 404 не найденных. Исправленные маршруты могут отображать карту сайта или страницу с ошибкой.
  6. Удобная защита косвенного доступа к файлам приложений. Операторы Guard могут убедиться, что все поступают через соответствующие каналы.
  7. Практичность в подходе MVC.

My Take

Most люди будут использовать все три формы в своих проектах так или иначе. Ключ должен понять их и выбрать наиболее подходящий для задачи.

22
ответ дан J.Money 21 August 2018 в 21:40
поделиться
  • 1
    какой язык / инфраструктура используется в примере Маршруты ? – törzsmókus 22 March 2015 в 09:55
  • 2
    @ törzsmókus Kohana – J.Money 22 March 2015 в 18:34
  • 3
    Вам не хватает URL-адресов, относящихся к протоколу, которые строго лучше абсолютных URL-адресов. Абсолютные URL-адреса являются сложными при обновлении схемы (в основном, HTTPS), относительные URL-адреса исправляют это. – Tobu 4 May 2015 в 23:01
  • 4
    @Tobu Просто обслуживайте все по HTTPS. – J.Money 20 November 2015 в 18:05
  • 5
    Замечание: похоже, вы использовали типографские котировки в большинстве приведенных выше кодов. Возможно, вы захотите это исправить. – domsson 31 August 2017 в 13:47

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

Возьмите посмотрите, что делает stackoverflow (ctrl + U в firefox):

<a href="/users/recent/90691"> // Link to an internal element

В некоторых случаях они используют абсолютные URL:

<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">

... но это только лучшая практика для повышения скорости. В вашем случае это не похоже на то, что вы делаете что-то подобное, поэтому я не буду беспокоиться об этом.

6
ответ дан marcgg 21 August 2018 в 21:40
поделиться

Допустим, у вас есть сайт www.yourserver.com.

Абсолютный URL-адрес определяет точное местоположение документа, например:

http://www.yourserver.com/images/myimage.jpg
. В корневом каталоге для веб-документов у вас есть суб-directoy, а у вас есть myimage.jpg.

]

Относительный URL-адрес определяет местоположение относительно текущего каталога , например, если вы находитесь в корневом веб-каталоге, в котором находится ваше изображение:

images/myimage.jpg

( относительно этого корневого каталога)

Вы всегда должны использовать относительные URL-адреса, где это возможно. Если вы переместите сайт на www.anotherserver.com, вам нужно будет обновить все абсолютные URL-адреса, которые указывали на www.yourserver.com, а относительные будут продолжать работать как есть.

3
ответ дан Paolo 21 August 2018 в 21:40
поделиться

Предположим, мы создаем дочерний узел, файлы которого находятся в папке http://site.ru/shop .

1. Абсолютный URL

Link to home page
href="http://sites.ru/shop/"

Link to the product page
href="http://sites.ru/shop/t-shirts/t-shirt-life-is-good/"

2. Относительный URL

Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"

Link from product page to home page
href="../../"

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

Промежуточное случаи

Мы рассмотрели два крайних случая: «абсолютно» абсолютные и «абсолютно» относительные URL-адреса. Но все относительно в этом мире. Это также относится к URL-адресам. Каждый раз, когда вы говорите об абсолютном URL-адресе, вы всегда должны указывать относительно того, что.

3. URL-адрес, относящийся к протоколу

Link to home page
href="//sites.ru/shop/"

Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"

Google рекомендует такой URL. Теперь, однако, обычно считается, что http: // и https: // - разные сайты.

4. Корневой URL

I.e. относительно корневой папки домена.

Link to home page
href="/shop/"

Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"

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

5. Базовый относительный URL (исходная страница)

Тег & lt; base & gt; указывает базовый URL-адрес, который автоматически добавляется ко всем относительным ссылкам и привязкам. Базовый тег не влияет на абсолютные ссылки. В качестве базового URL мы укажем домашнюю страницу: & lt; base href = "http://sites.ru/shop/" & gt ;.

Link to home page
href=""

Link to product page
href="t-shirts/t-shirt-life-is-good/"

Теперь вы можете переместить свой сайт не только в любой домен, но и в любую подпапку. Просто имейте в виду, что, хотя URL-адреса выглядят как относительные, на самом деле они абсолютные. Особенно обратите внимание на якоря. Чтобы перемещаться по текущей странице, мы должны написать href = "t-shirts / t-shirt-life-is-good / # comments", а не href = "# comments".

Заключение

Для внутренних ссылок я использую базовые URL-адреса (5). Для внешних ссылок и информационных бюллетеней я использую абсолютные URL-адреса (1).

24
ответ дан Vlad Alivanov 21 August 2018 в 21:40
поделиться
  • 1
    отличный ответ. слишком плохо, что он слишком задерживается на странице, чтобы люди могли это увидеть. ответы на многие ответы на другие ответы. – oligofren 30 March 2017 в 09:01
177
ответ дан Community 4 November 2018 в 18:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: