GET проти POST в Ajax


79

У чому різниця між GET та POST для запитів Ajax ?

Я не бачу різниці між цими двома, за винятком того, що коли я використовую GET , параметри надсилаються в URL-адресі, що для мене насправді не має ніякої різниці, оскільки всі запити зроблені у фоновому режимі, а користувач не знаходить жодного різниця.

редагувати: для чого використовуються методи PUT та DELETE ?


8
До речі, крім запитів POST є також запити PUT та DELETE. Ви також повинні запитати про них.
S.Lott,

1
Для майбутніх читачів: ось відповідне запитання від Fooker рік тому .
Гедеон

Це має значення, особливо коли ви надсилаєте конфіденційні дані.
biesior

Відповіді:


137

GET призначений для отримання даних із сервера. POST (і менш відомі друзі PUT і DELETE) призначені для модифікації даних на сервері.

Запит GET ніколи не повинен спричиняти видалення даних із програми. Якщо у вас є посилання, на яке ви можете натиснути GET для видалення даних, тоді Google, що павутить ваш сайт, може натиснути всі ваші посилання "Видалити".

Канонічну відповідь можна знайти тут , де цитується специфікація HTML 2.0:

Якщо обробка форми є ідемпотентною (тобто вона не має тривалого спостережуваного впливу на стан світу), тоді метод форми повинен бути GET. Багато пошуків у базі даних не мають видимих ​​побічних ефектів і створюють ідеальні програми для запитів.

Якщо служба, пов'язана з обробкою форми, має побічні ефекти (наприклад, модифікація бази даних або передплата на послугу), метод повинен бути POST.

Під час виклику AJAX вам потрібно використовувати будь-який метод, який підтримує ваш сервер. Ви завжди повинні проектувати свій сервер таким чином, щоб операції, що змінюють дані, викликалися POST / PUT / DELETE. В інших коментарях є посилання на REST, який зазвичай відображає C / R / U / D на "POST or PUT" (Створити) / GET (Читати) / PUT (Оновити) / DELETE (Видалити).


9
+1: Основне визначення GET - ідемпотентності. Усі зміни повинні відбуватися за допомогою POST, PUT та DELETE.
S.Lott

мій сервер видає помилку 403, якщо я подаю форму за допомогою post, get працює. Думаю, це пов’язано з конфігурацією сервера. У мене немає доступу до сервера. Як це обійти?
Krrish Raj

Я згоден з @ S.Lott. Повністю приємне та повністю визначення методу GET. / хлопай мате.
Віктор Ріберо Гуаш,

@KrrishRaj, це може мати щось спільне з розміщенням повідомлень на різних сайтах. Погляньте на це stackoverflow.com/questions/298745/…
Шрікант

Хоча я погоджуюся з визначенням, на практиці це важко реалізувати, оскільки GET настільки ненадійний. GET чудово підходить для файлів, які рідко змінюються, але не так вдало для фактичного зв’язування даних, як POST для зміни даних, після чого GET може повернути раніше кешовані дані, а не лише браузером, оскільки провайдери можуть кешувати GET і не повинні виконати будь-які заголовки кешування. Для файлів, я використовую GET, але при запиті та модифікації даних я завжди використовую POST.
Рахлі

27

Якщо ви надсилаєте великі обсяги даних або конфіденційні дані через HTTPS, вам потрібно буде використовувати POST. Якщо це просто простий параметр, я б використав GET.

Запити GET мають обмеження на кількість даних, які можна надіслати. Я забуваю точну цифру, але це може спричинити проблеми, якщо ви надсилаєте щось суттєве.

В основному різниця між GET і POST полягає в тому, що в запиті GET параметри передаються в URL, де, як і в POST, параметри включаються в тіло повідомлення.


2
так, важливо зазначити, що існують обмеження розміру, пов'язані з GET, і що вони різні залежно від клієнтського та серверного програмного забезпечення
Аллен Райс,

19

Незалежно від того, AJAX це чи ні, не має значення. Йдеться про те, що ви робите. Я рекомендую дотримуватися принципів REST . Які мають додаткові положення щодо оновлення, видалення тощо ...


4

Запити GET легше використовувати в атаках CSRF (підробка запитів між сайтами). А саме підроблені запити POST вимагають увімкнення Javascript на стороні користувача, тоді як підроблені запити GET все ще можливі лише за допомогою тегів img, script.


3

Багато веб-серверів обмежують довжину даних, які можуть бути передані як частина URL-адреси, тому запит GET може зламатися дивними способами, які важко налагодити.

Крім того, більшість серверних програм реєструють URL-адреси в журналах доступу, тому, якщо ви передаєте конфіденційну інформацію (наприклад, паролі) у запиті GET, це, швидше за все, буде записано на диск у відкритому тексті.

З точки зору REST, запити GET не повинні мати побічних ефектів - вони не повинні змінювати дані. Отже, якщо ви просто ОТРИМАЄТЕ ресурс за ідентифікатором, це має сенс, але якщо ви здійснюєте зміни у ресурсі, вам слід використовувати PUT, POST або UPDATE для дієслова http.


3

Обидва вони використовуються для надсилання деяких даних та отримання певної відповіді за допомогою цих даних.

GET: Отримайте сховище інформації на сервері. Тобто. Пошук, твіт, інформація про особу. Якщо ви хочете надіслати інформацію, тоді отримайте запит, надішліть запит, використовуючи process.php? Name = subroto Отже, це в основному надсилає інформацію через url. URL-адреса не може обробити більше 2083 символів. Тож для публікації в блозі ви пам’ятаєте, що це неможливо?

POST: Повідомлення роби те саме, що і get. Реєстрація користувача, Логін користувача, Надсилання великих даних, Повідомлення в блозі. Якщо вам потрібно надіслати захищену інформацію, використовуйте пошту або для великих даних, оскільки вона не проходить через url.

AJAX: $ .get () та $ .post () містять функції, які є підмножинами $ .ajax (). Він має багато конфігурації.

$ .get () метод, який є своєрідним скороченням для $ .Ajax (). Використовуючи $ .get (), замість передачі об'єкта, ви передаєте аргументи. Як мінімум, вам знадобляться перші два аргументи, які є URL-адресою файлу, який потрібно отримати (тобто 'test.txt'), та зворотним викликом.

Короткий зміст:

$.get( url [, data ] [, success ] [, dataType ] )
$.post( url [, data ] [, success ] [, dataType ] ) // for sending secure or Large information
$.ajax( url [, settings ] )  // More Configaration

2

По-перше, загальна інформація. Використовуйте, GETякщо ви лише читаєте дані, використовуйте, POSTякщо ви щось змінюєте в базі даних, файлах txt тощо.

Але проблема в тому, що деякі браузери кешують GETрезультати. У мене були проблеми із AJAXзапитами в IE7, але нарешті я дізнався, що браузер кешує GETрезультати. Я переосмислив потік і змінив своє прохання на POST.

Отже, не використовуйте, GETякщо не хочете кешування.

(Звичайно, ви можете відключити кешування в операціях GET. Але я не віддав перевагу цьому)


1

Про мене я віддаю перевагу POST. Я зберігаю доступ до подій. Я знаю, що надіслане значення обмежене даними, я маю "контроль", наприклад, для отримання елемента з ідентифікатором. Приклад, "getitem? Id = 123", "deleteImtem? Id = 123", ... В інших випадках, коли у мене є форма, заповнена користувачем, я віддаю перевагу POST.

Як сказав Райан Сміт, краще використовувати POST для надсилання великого обсягу даних, і менше хвилювань у випадках використання на іншій мові / спеціальних символах (як правило, у всіх основних фреймворках javascript не повинно виникати проблем із цим, але я думаю, що менше проблем з використанням POST).

На перспективу REST, на мій погляд, ви можете використовувати це для нового проекту (щоб зберегти узгодженість із усім проектом).

Нарешті, можливо, деякі програми, що використовуються в мережі (реєстратори URL-адрес (тобто: щоб побачити, чи не втрачали працівники час на неавторизованих сайтах, ...) проксі-сервери, ...), або будь-який інший інструмент можуть перехопити запит . Somes покаже у звітах параметри, які ви надіслали за допомогою GET, вважаючи це як іншу веб-сторінку. Але в цій ситуації це може бути не вашою проблемою, це зміна проекту від іншого до іншого! ;)



-2

Якщо ви передаєте будь-які аргументи з символами, які можуть бути переплутані в URL-адресі (наприклад, пробіли), ви використовуєте POST. В іншому випадку ви можете використовувати GET.

Як правило, якщо ви просто передаєте кілька крихітних аргументів, ви б використовували GET. Але для передачі інформації, що подається користувачем, такої як записи в блозі, текст тощо, корисно використовувати POST.

Існують також певні фреймворки, які повністю покладаються на URL-адреси, засновані на сегментах (наприклад, site.com/products/133а не site.com/products.php?id=333і ці фреймворки скасовують змінні GET для безпеки. У таких випадках ви постійно використовуєте POST).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.