Выход: GET или POST?

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

Как прагматик, я склонен использовать GET, потому что реализация его проще, чем POST; просто оставьте простую ссылку, и все готово. Это похоже на подавляющее большинство веб-сайтов, о которых я могу думать, по крайней мере, с моей головы. Даже Stack Overflow обрабатывает выход из системы с помощью GET.

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

Все, что я прочитал до сих пор, говорит о том, что POST следует использовать для «деструктивных действий», тогда как действия, которые не изменяют внутреннее состояние прикладного запроса и т. Д., Должны обрабатываться с помощью GET . Исходя из этого, здесь возникает реальный вопрос:

Выходит ли из приложения считающееся деструктивным действием / изменяет ли он внутреннее состояние приложения?

    Используйте POST .

    В 2010 году использование GET было, вероятно, приемлемым ответом. Но сегодня (в 2013 году) браузеры будут предварительно загружать страницы, которые они «думают», что вы будете посещать дальше.

    Вот один из разработчиков StackOverflow, говорящий об этой проблеме в twitter:

    Я хотел бы поблагодарить мой банк за то, что вы сделали выход из GET-запроса, и команда Chrome за удобную предварительную выборку URL. – Nick Craver ( @Nick_Craver ) 29 января 2013 г.

    забавный факт: StackOverflow используется для обработки выхода через GET, но не более того.

    В REST не должно быть сеанса, поэтому нечего разрушать. Клиент REST аутентифицируется по каждому запросу. Записан У этого пользователя есть подпись, которая отображается под каждым сообщением, но вы не можете ее просматривать.

    Что вы действительно спрашиваете, должен ли браузер продолжать отправлять данные аутентификации по каждому запросу.

    Возможно, если ваше приложение создает иллюзию входа в систему, вы должны иметь возможность «выйти из системы» с помощью javascript. Не требуется поездка туда и обратно.


    Полевая диссертация – Раздел 5.1.3

    каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса, и не может использовать любой сохраненный контекст на сервере. Таким образом, состояние сеанса полностью сохраняется на клиенте

    Один из способов GET можно злоупотреблять здесь, так это то, что человек (конкурент, возможно, 🙂 разместил тег изображения с помощью src="" любое время в Интернете, и если пользователь вашего сайта наткнулся на эту страницу, он будет бессознательно вышли из системы.

    Чтобы быть верным, GET / POST (или другие глаголы) являются действиями на каком-то ресурсе (адресованном по URL-адресу), поэтому его обычно касается состояния ресурса, а не состояния приложения как такового. Итак, в истинном настроении у вас должен быть URL-адрес, такой как [host name]\[user name]\session , а затем «DELETE» будет правильным глаголом для выхода из системы.

    Используя [host name]\bla bla\logout качестве URL-адреса, на самом деле не является полноценным способом REST (IMO), поэтому зачем обсуждать правильное использование GET / POST на нем?

    Конечно, я также использую GET для выхода в мои приложения 🙂

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

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

    CREAT token => метод POST

    Когда вы выходите из системы, вы меняете токен, поэтому для меня самым логичным методом должен быть DELETE

    DELETE token => метод DELETE

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

    Или, может быть, ссылка может быть реализована в javascript?

    Изменить. Как я понимаю, технически GET должен быть для запросов только для чтения, которые не меняют состояние приложения. POST должен быть для запросов на запись / редактирование, которые изменяют состояние. Однако другие проблемы приложений могут предпочесть GET over POST для некоторых запросов, изменяющих состояние, и я не думаю, что с этим возникли проблемы.

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

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

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

    Interesting Posts

    Ошибка Excel 1004 «Невозможно получить … свойство classа WorksheetFunction», появляющееся непоследовательно

    GCM SERVICE_NOT_AVAILABLE на Android 2.2

    Каков полный синтаксис цикла for для C (и других, если они совместимы)?

    JavaScript повышает значение SyntaxError с данными, отображаемыми в шаблоне Jinja

    Увеличение доступной памяти ожидается за счет добавления 1 ГБ ОЗУ к 32-битной системе 3Gb Vista

    Как назначить зарегистрированного пользователя в качестве значения по умолчанию для поля модели?

    Поиск XDocument с использованием LINQ без знания пространства имен

    Несколько методов HttpPost в controllerе Web API

    С MySQL, как я могу создать столбец, содержащий индекс записи в таблице?

    Остановите отправку почты себе при выборе «Ответить все в Outlook»

    Как не сериализовать свойство __type на объектах JSON

    Entity Framework 5 Обновление записи

    Поднятие процесса ProcessBuilder через UAC?

    Могу ли я изменить цвет автоматически обнаруженных ссылок в UITextView?

    JUnit: Как имитировать тестирование System.in?

    Давайте будем гением компьютера.