В принципе тут уже есть хорошие ответы, но я перефразирую, чтобы было чуть понятнее другим.
str - это встроенный тип, который представляет из себя последовательность из байтов utf8.
Размер значения str не известен во время компиляции, а по тому нигде его нельзя применить в чистом виде (только как содержимое какого-нибудь типа-указателя)
Можно провести аналогию с массивом (только в случае массивов размер таки известен, но его тоже достаточно редко используют в таком чистом виде)
&str - это ссылка на эту последовательность байт.
Это может быть ссылка на содержимое String или ссылка на строковый литерал (&'static str)
Кстати, String под капотом - это Vec<u8>