1) В целом зависит от ситуации, но использовать куки это всё еще норм, т.к. если вы плохо понимаете jwt, то можете несколько дыр создадать. В целом токен часто и хранят в куке. Смотря что вы подразумеваете под разницей, но в большинстве случаев есть разница т.к. jwt использует несколько реализаций. Access/Refresh токены, которые вы не можете отозвать и соотвественно завершить сессию принудительно как с куки, если вы создаёте white listс токенами то по сути это уже близко к реализации с куки но всё равно есть отличия.
2) Нужно внедрять https не особо влияет на эту атаку. Также есть заблуждение что cors спасает, но тут уже вам нужно будет разобраться с этим, но если лень, то можно просто подключить этот токен (его не сложно подключать).
3) Тут несколько вариантов. Можно редирект возвращать а можно 401 и форму с логином. Можно обработчик сделать на js и при 401 редиректить на страницу с логином как удобнее так и делайте