Каковы преимущества разностных методов операций CRUD? - PullRequest
0 голосов
/ 06 марта 2019

При выполнении операций CRUD мы можем выполнить его с form следующим образом:

      <form action="/todo/<%= todos[i]._id %>?_method=DELETE" method="POST">
           <button>x</button>
      </form>

И контроллер следующим образом:

app.delete('/todo/:id', (req, res) => {
    Todo.findByIdAndDelete(req.params.id, (err) => {
        if(err) {
            console.log(err);
        } else {
            res.redirect('/todo');
        }
    });
});

Или мы можем выполнить это с помощьюjQuery следующим образом:

$(document).ready(function(){

$('form').on('submit', function(){

    var item = $('form input');
    var todo = {item: item.val()};

    $.ajax({
      type: 'POST',
      url: '/todo',
      data: todo,
      success: function(data){
        //do something with the data via front-end framework
        location.reload();
      }
    });

    return false;
  });
});

В чем разница между этими двумя методами?(игнорируя, что один должен выполнить «удаление», а другой - «опубликовать») Некоторые говорят, что последний более безопасен, чем первый, но не может найти никакой литературы по этому поводу.

1 Ответ

1 голос
/ 06 марта 2019

По следующей ссылке человек кратко упоминает этот пункт [о том, что запрос ajax более безопасен], хотя он не дает никаких объяснений youtu.be/aZ16pkrMkZE?t=875

Он говорит о чем-то совершенно другом.Выполнение запроса DELETE через ajax и удаление объектов в вашем приложении с помощью простой ссылки (что приведет к запросу GET).

Последнее не только против соглашений (запросы GET не должны изменять данные), но также ... не небезопасно, но "опасно".Представьте, что сканер Google посещает ваш сайт и переходит по каждой ссылке.Puff, все ваши удаляемые объекты исчезли.

И в некоторых случаях это может быть небезопасно.Представьте, что для создания / обновления / удаления объектов вам необходимо как-то аутентифицировать пользователя.Скажем, с токеном аутентификации.Так как это простая ссылка и запрос GET, токен должен идти в строку запроса.Таким образом, он будет доступен для просмотра всем, кэшируется в каждом прокси-сервере кэширования и будет храниться вечно в журналах трафика.Не очень безопасно.

...