Коли ви використовуєте POST і коли ви використовуєте GET?


343

З того, що я можу зібрати, є три категорії:

  1. Ніколи не використовуйте GETта не використовуйтеPOST
  2. Ніколи не використовуйте POSTта не використовуйтеGET
  3. Не має значення, яким саме ви користуєтесь.

Чи правильно я припускаю ці три випадки? Якщо так, то які приклади з кожного випадку?


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


1
Не існує стандартного способу кодування більше, ніж імені -> пар значень у рядки запиту, тому, якщо ваші запити не є основними (тобто немає масивів або вкладених структур даних), ви повинні розглядати лише POST, який забезпечує поле тіла, яке ви можете використовувати з форматами кодування. (JSON, XML тощо).
themihai

Відповіді:


376

Використовуйте POSTдля руйнівних дій, таких як створення (я знаю про іронію), редагування та видалення, оскільки ви не можете натиснути POSTдію в адресному рядку свого браузера. Використовуйте, GETколи це безпечно, щоб дозволити людині викликати дію. Отже, така URL-адреса, як:

http://myblog.org/admin/posts/delete/357

Потрібно перенести вас на сторінку підтвердження, а не просто видалити елемент. Набагато простіше уникнути аварій таким чином.

POSTтакож безпечніше GET, тому що ви не вставляєте інформацію в URL-адресу. І тому використання GETяк methodHTML форми, яка збирає пароль або іншу конфіденційну інформацію, - не найкраща ідея.

Останнє зауваження: POSTможе передавати більшу кількість інформації, ніж GET. 'POST' не має обмежень щодо розміру для переданих даних, тоді як 'GET' обмежений 2048 символами.


82
Відповіді на запити GET можуть бути кешовані. Відповіді на POST не повинні.
mkoeller

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

42
@ePharaoh: Він зупиняє людей читати паролі, переглядаючи плече користувачів на адресному рядку.
Квентін

35
@ePharaoh: "Розкриття трохи менше даних випадковим спостерігачем" було б, мабуть, кращою формулюванням, ніж "більш захищене" - URL-адреси можуть виявитись у багатьох місцях, як-от журнали, рефери, кеші. Ви, звичайно, правда, це не підвищує безпеку - але це обмежує найгірші небезпечні практики (див. Також: thedailywtf.com/Articles/The_Spider_of_Doom.aspx )
Пісквор вийшов з будинку

24
@David Dorward: Або за більш поширеною назвою: атака плеча
Idan K

206

Коротко

  • Використовувати GETдля safe andidempotentзапитів
  • Використовувати POSTдля neither safe nor idempotentзапитів

У деталях Для кожного є належне місце. Навіть якщо ви не дотримуєтесь принципів RESTful , багато чого можна отримати, дізнавшись про REST та про те, як працює підхід, орієнтований на ресурси.

RESTful додаток буде use GETsдля операцій, які є обома safe and idempotent.

safeОперація являє собою операцію , яка робить not change the dataзапитується.

idempotentОперація, в якій результат буде be the sameбайдуже , скільки разів ви питаєте його.

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

Додаток RESTful використовуватиме PUTsдля операцій, які є not safe but idempotent.

Я знаю, що питання стосувалося GET і POST, але я повернусь до POST через секунду.

Зазвичай PUT використовується для редагування ресурсу (наприклад, редагування питання або відповіді на переповнення стека).

A POSTбуде використовуватися для будь-якої операції, яка є neither safe or idempotent.

Зазвичай POST буде використовуватися для створення нового ресурсу, наприклад, створення НОВОГО питання SO (хоча в деяких проектах PUT також буде використовуватися для цього).

Якщо ви запустили пошту двічі, ви створили ДВА нових запитання.

Існує також операція DELETE, але я здогадуюсь, що я можу це залишити :)

Обговорення

На практиці сучасні веб-браузери, як правило, надійно підтримують лише GET та POST (усі ці операції можна виконувати за допомогою дзвінків Javascript, але в частині введення даних у форми та натискання надіслати, як правило, є два варіанти). У програмі RESTful POST часто буде відмінено для надання також дзвінків PUT і DELETE.

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

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


якщо ви створите ресурс APIREST для входу, який ви оберете, це безпечно і безвідмовно, я його запрошую.
jhonny lopez

1
Безпечне отримання не є автоматично ідентичним. Набір результатів може бути різним з однаковим відсутністю деструктивних запитів.
RichieHH

1
Те, як ви це написали, щось на кшталт "GET currenttime" було б неправильним, оскільки воно не є ідентичним (у тому сенсі, що повторні запити можуть давати різні результати); насправді все, що запитується, з часом може змінюватися. Тому слід виражати ідентифікацію, а не щодо побічних ефектів самого запиту . Оскільки просто запит на поточний час не має побічних ефектів , це - як можна було очікувати - ідеальний кандидат GET, а не POST.
Хаген фон Ейтцен

79

Використовуйте GET, якщо ви не заперечуєте, щоб запит повторювався (тобто стан не змінюється).

Використовуйте POST, якщо операція змінює стан системи.


1
Оскільки форма змінює стан системи, чому методом за замовчуванням тег форми HTML є GET?
ziiweb

3
@ user248959 Чи змінюється вікно пошуку видимий стан? За замовчуванням було встановлено давно, ймовірно, майже випадково. Я не заглиблювався в історію, щоб навіть знати, чи був POST варіант у точкових формах.
Дуглас Лідер

@ziiweb Навіть якщо більшість випадків використання <form> становить POST, краще визначити dafault як "нешкідливий" GET. Це може здатися абсурдним з точки зору безпеки, коли це призводить до даних, викритих у файлах журналів тощо., Але це безпечно для системних даних (сервіс не повинен змінювати дані при GET). Я думаю, сьогодні можна було б по-іншому поставити фокус (бажано, відмовившись від дефолту і зробивши його methodобов'язковим)
Хаген фон Ейтцен

Припустимо, у мене є кінцева точка, яка приймає файл як вхідний, виконує деяку обробку файлу (наприклад - витяг даних на основі регексу) і повертає JSON дані, то чи можу я використовувати GET запит для завантаження файлу на сервер. Або я повинен використовувати POST-запит?
змінна

67

Коротка версія

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

Переваги GET:

  • URL-адреси можна зберігати в закладках безпечно.
  • Сторінки можна безпечно завантажувати.

Недоліки GET:

  • Змінні передаються через URL як пари іменних значень. (Ризик безпеки)
  • Обмежена кількість змінних, які можна передавати. (На основі браузера. Наприклад, Internet Explorer обмежений 2048 символами. )

POST: використовується для більш високих запитів безпеки, коли дані можуть бути використані для зміни бази даних або сторінки, яку ви не хочете, щоб хтось робив закладки.

Переваги POST:

  • Пари імен-значень не відображаються в URL-адресі. (Безпека + = 1)
  • Необмежена кількість пар імен-значень може передаватися через POST. Довідково.

Недоліки POST:

  • Сторінка, що використовувала дані POST, не може бути закладкою. (Якщо ви цього хочете.)

Більш довга версія

Безпосередньо з протоколу передачі гіпертексту - HTTP / 1.1 :

9.3 Отримати

Метод GET означає отримати будь-яку інформацію (у формі сутності), ідентифіковану URI-запитом. Якщо запит-URI посилається на процес створення даних, саме отримані дані повертаються як сутність у відповіді, а не вихідний текст процесу, якщо тільки цей текст не є результатом процесу.

Семантика методу GET змінюється на "умовний GET", якщо повідомлення запиту включає поле заголовка If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match або If-Range. Умовний метод GET вимагає перенесення об’єкта лише за обставин, описаних полями (умовами) умовного заголовка. Умовний метод GET призначений для зменшення зайвого використання мережі, дозволяючи оновити кешовані об'єкти, не потребуючи декількох запитів або передачі даних, які вже зберігаються клієнтом.

Семантика методу GET змінюється на "часткове GET", якщо повідомлення запиту включає поле заголовка діапазону. Часткове GET вимагає передачі лише частини суб'єкта господарювання, як описано в розділі 14.35. Частковий метод GET призначений для зменшення зайвого використання мережі, дозволяючи частково витягнутим об'єктам завершитись без передачі даних, які вже утримуються клієнтом.

Відповідь на запит GET є кешованим, якщо і лише якщо він відповідає вимогам щодо кешування HTTP, описаних у розділі 13.

Див. Розділ 15.1.3 щодо міркувань безпеки при використанні форм.

9.5 ПОСТ

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

  • Анотація існуючих ресурсів;

  • Розміщення повідомлення на дошці оголошень, групі новин, списку розсилки чи подібній групі статей;

  • Надання блоку даних, таких як результат подання форми, до процесу обробки даних;

  • Розширення бази даних за допомогою операції додавання.

Фактична функція, що виконується методом POST, визначається сервером і зазвичай залежить від запиту-URI. Опублікована особа підпорядковується цьому URI так само, як файл підпорядковується директорії, що містить його, стаття новин підпорядковується групі новин, до якої вона розміщена, або запис підпорядковується базі даних.

Дія, виконана методом POST, може не призвести до ресурсу, який можна ідентифікувати за допомогою URI. У цьому випадку або 200 (ОК), або 204 (Без вмісту) є відповідним статусом відповіді, залежно від того, включена у відповідь сутність, яка описує результат.


2
"Сторінку, на якій були використані дані публікації, не можна помітити в закладки": ну це перевага, ні? Напевно, ви не хочете, щоб ваш запит про зміну даних робився в закладках.
Пісквор вийшов з будівлі

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

Щодо недоліку GET, а саме: "Змінні пропускаються через url як пари іменних значень", чи MVC усуне цю проблему через маршрутизацію та отримані дружні URL-адреси?
MrBoJangles

@MrBoJangles: Використання приємних URL-адрес не перешкоджає посиланням на ризик "людина, що переглядає плече". Бічна примітка: MVC не вимагає маршрутизації з приємними URL-адресами, а маршрутизація з приємними URL-адресами не вимагає MVC; їх іноді використовують разом, але також можна використовувати окремо.
icktoofay

У світі .NET для всіх практичних цілей приємна URL-адреса = MVC. Я гадаю, ви можете зробити якісь переписування IIS або якісь дивні на основі коду, але вони ще менш приємні. MVC, не треба говорити, на виграш.
MrBoJangles

28

Перша важлива річ - значення GET проти POST:

  • GET слід використовувати для отримання ... деякої інформації з сервера,
  • тоді як POST слід використовувати для надсилання певної інформації на сервер.


Після цього кілька речей, які можна відзначити:

  • Використовуючи GET, ваші користувачі можуть скористатися кнопкою "назад" у своєму браузері та вони можуть робити закладки на сторінках
  • Існує обмеження у розмірі параметрів, які ви можете передавати як GET (2 КБ для деяких версій Internet Explorer, якщо я не помиляюся) ; ліміт набагато більше для POST і зазвичай залежить від конфігурації сервера.


У будь-якому випадку, я не думаю, що ми могли б "жити" без GET: подумайте, скільки URL-адрес ви використовуєте з параметрами в рядку запиту, щодня - без GET, все це не працювало б ;-)


Ну, якби всі користувалися гарними URL-адресами в стилі GET: http://example.com/var1/value1/var2/value2/var3/value3ми могли б "технічно" більше не отримати GET ...
Тайлер Картер

5
@ Chacha102 За винятком того, що вам все-таки потрібно отримати цей ресурс. Майже всі сторінки, зображення, сценарії тощо завантажуються у веб-браузери за допомогою GET.
Райан

3
@ Chacha102 - Навіть www.mypage.com/contact/використовує GET внутрішньо для чогось подібногоindex.php?url=/contact/
Thiago Belem

1
Акцент на обмеженні розміру GET! Також параметри GET включаються в закладки, тоді як POST - ні. І користувач може оновити сторінку, яку вимагає GET, але не та, яку вимагає POST (без попередження про повторне надсилання інформації).
Ricket

12

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

Використовуйте GET, якщо ви хочете читати дані, не змінюючи стан, і використовуйте POST, якщо ви хочете оновити стан на сервері.


+1. Це ключова концептуальна відмінність від rfc, з якого випливає все інше. w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
Френк Фермер

8

Моє загальне правило - використовувати Get, коли ви запитуєте на сервер, який не змінює стан. Пости зарезервовані для запитів на сервер, який змінює стан.


8

Одна практична відмінність полягає в тому, що браузери та веб-сервери мають обмеження кількості символів, які можуть існувати в URL-адресі. Він відрізняється від програми до програми, але, безумовно, можна вразити, якщо у вас є textareaформи.

Ще одна проблема з GET - вони індексуються пошуковими системами та іншими автоматичними системами. Колись у Google був продукт, який попередньо отримував посилання на переглянутій вами сторінці, тому вони швидше завантажуються, якщо ви натискаєте ці посилання. Це призвело до великих пошкоджень на сайтах, які мали посилання delete.php?id=1- люди втратили цілі сайти.


1
Ваш веб-сервер, мабуть, також має обмеження щодо цього.
Біллі ONeal

Що ж, існує також обмеження на POST.
челмерц

1
Чудова справа, @BillyONeal, я додав це в. @Chelmertz Так, але я можу змінити це, якщо хочу, і це набагато вище. Наприклад, я розмістив 1 гігабайтний файл в екземпляри Apache.
ceejayoz

Я розумію, що URL-адреси, що індексуються пошуковими системами. Я не розумію, що це стосується GET Я маю на увазі, чи це не лише URL-адреса?
Мед

1
@Honey Пошукові системи переходять за посиланнями. Посилання роблять GET запити. Пошукові системи не надсилають форми (якщо вони були, ви бачите Google, який підписується на вашому сайті кожні кілька днів), і, таким чином, не надсилайте запитів POST.
ceejayoz

7

Використовуйте GET, коли ви хочете, щоб URL відображав стан сторінки. Це корисно для перегляду динамічно генерованих сторінок, таких як, які тут бачать. POST слід використовувати у формі для надсилання даних, наприклад, коли я натискаю кнопку "Опублікувати свій відповідь". Він також створює більш чисту URL-адресу, оскільки не генерує рядок параметра після шляху.


6

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

Один приклад зі сторінки граватара: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

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

Інша річ, яку слід врахувати, - це обмеження розміру. GET обмежується розміром URL-адреси, 1024 байтами за стандартом, хоча браузери можуть підтримувати більше.

Для передачі більшої кількості даних, ніж для цього, слід використовувати POST для кращої сумісності браузера.

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


4

Нічого, що ти не можеш зробити за себе. Справа в тому, що ви не повинні змінювати стан сервера на HTTP GET. Проксі-сервери HTTP припускають, що оскільки HTTP GET не змінює стан, то те, чи користувач викликає HTTP GET один раз або 1000 разів, не має значення. Використовуючи цю інформацію, вони вважають, що безпечно повернути кешовану версію першого HTTP GET. Якщо ви порушите специфікацію HTTP, ви ризикуєте зламати HTTP-клієнт та проксі-сервери в природі. Не робіть цього :)


Це не лише браузери, які розраховують на те, що GET є безпечним та безвідмовним: павуки пошукової системи та попереднє завантаження веб-переглядачів (наприклад, quickfox) також розраховують на це.
Френк Фермер

@gili, нарешті хтось із правильною відповіддю. Я дуже здивований, скільки людей помилилися на цьому. пальці вгору!
lubos hasko

4

Це проникає в концепцію REST та те, як веб-сайт начебто був використаний. На радіо Software Engineering є чудовий подкаст, який детально розповідає про використання Get and Post.

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

Повідомлення передбачається використовувати (принаймні, за допомогою архітектури REST, на якій веб-сайт начебто заснований) для передачі інформації на сервер / сповіщення сервера про виконання дії. Такі приклади: Оновіть ці дані, Створіть цей запис.


"На радіо Software Engineering є чудовий подкаст, який детально розмовляє про використання Get and Post." Де це?
Yeeen

Я додав посилання на нього.
kemiller2002

Ось ця посилання: se-radio.net/2008/05/episode-98-stefan-tilkov-on-rest Я також редагував посилання вище, хоча я не маю прав на редагування, і його потрібно перевіряти тощо.
MrBoJangles

Припустимо, у мене є кінцева точка, яка приймає файл як вхідний, виконує деяку обробку файлу (наприклад - витяг даних на основі регексу) і повертає JSON дані, то чи можу я використовувати GET запит для завантаження файлу на сервер. Або я повинен використовувати POST-запит?
змінна

4

1.3 Швидкий контрольний список вибору HTTP GETабоPOST

Використовуйте GET, якщо:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Використовуйте POST, якщо:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Джерело .


3

Я не бачу проблеми з використанням get if, я використовую її для простих речей, де є сенс зберігати речі в рядку запиту.

Використовувати його для оновлення стану - як GET delete.php?id=5видалення сторінки - дуже ризиковано. Люди з’ясували, що коли веб-прискорювач Google почав попереднє завантаження URL-адрес на сторінки - він потрапив у всі посилання "видалити" та викреслив дані людей. Те ж саме може статися і з павуками пошукової системи.



3

Від RFC 2616 :

9.3 GET
Метод GET означає отримати будь-яку інформацію (у формі сутності), ідентифіковану URI-запитом. Якщо запит-URI посилається на процес створення даних, саме отримані дані повертаються як сутність у відповіді, а не вихідний текст процесу, якщо тільки цей текст не є результатом процесу.


9.5 POST
Метод POST використовується для запиту, щоб сервер-джерело прийняв сутність, включену в запит, як новий підлеглий ресурс, ідентифікований URI-запитом у рядку запитів. POST розроблений таким чином, щоб дозволити єдиний метод охопити наступні функції:

  • Анотація існуючих ресурсів;
  • Розміщення повідомлення на дошці оголошень, групі новин, списку розсилки чи подібній групі статей;
  • Надання блоку даних, таких як результат подання форми, до процесу обробки даних;
  • Розширення бази даних за допомогою операції додавання.

Фактична функція, що виконується методом POST, визначається сервером і зазвичай залежить від запиту-URI. Опублікована особа підпорядковується цьому URI так само, як файл підпорядковується директорії, що містить його, стаття новин підпорядковується групі новин, до якої вона розміщена, або запис підпорядковується базі даних.

Дія, виконана методом POST, може не призвести до ресурсу, який можна ідентифікувати за допомогою URI. У цьому випадку або 200 (ОК), або 204 (Без вмісту) є відповідним статусом відповіді, залежно від того, включена у відповідь сутність, яка описує результат.


2

Я використовую POST, коли я не хочу, щоб люди бачили QueryString або коли QueryString набирає великих розмірів. Також POST потрібен для завантаження файлів.

Я не бачу проблеми з використанням GET, але я використовую її для простих речей, де є сенс зберігати речі на QueryString.

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


Чому ми не можемо використовувати GET для завантаження файлів?
змінна

1

Первісний намір полягав у тому, що GET використовувався для повернення даних, а POST - будь-що. Основне правило, яке я використовую, полягає в тому, що якщо я щось надсилаю на сервер, я використовую POST. Якщо я просто називаю URL для отримання даних, я використовую GET.


1

Прочитайте статтю про HTTP у Вікіпедії . Він пояснить, що таке протокол і що він робить:

ЗАРАЗ

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

і

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

У W3C є документ з назвою URI, Адресність та використання HTTP GET та POST, який пояснює, коли потрібно використовувати що. Посилаючись

1.3 Швидкий контрольний список щодо вибору HTTP GET або POST

  • Використовуйте GET, якщо:
    • Взаємодія скоріше нагадує питання (тобто це безпечна операція, наприклад запит, операція читання чи пошук).

і

  • Використовуйте POST, якщо:
    • Взаємодія більше нагадує наказ, або
    • Взаємодія змінює стан ресурсу таким чином, як користувач сприйме (наприклад, передплату на послугу) або o Користувач несе відповідальність за результати взаємодії.

Однак перед остаточним рішенням про використання HTTP GET або POST, будь-ласка, врахуйте також міркування щодо конфіденційних даних та практичні міркування.

Практичний приклад - це кожен раз, коли ви надсилаєте HTML-форму. Ви вказуєте або публікацію, або отримуєте для дії форми. PHP заповнить $ _GET і $ _POST відповідно.


1

У PHP POSTобмеження даних зазвичай встановлюється вашим php.ini. GETЯ вважаю, що це обмежено налаштуваннями сервера / браузера - зазвичай близько 255байтів.


1

Від w3schools.com :

Що таке HTTP?

Протокол передачі гіпертексту (HTTP) призначений для забезпечення зв'язку між клієнтами та серверами.

HTTP працює як протокол відповіді на запит між клієнтом і сервером.

Клієнтом може бути веб-браузер, а сервер - програма на комп'ютері, на якій розміщується веб-сайт.

Приклад: клієнт (браузер) подає сервер запит HTTP; тоді сервер повертає відповідь клієнту. Відповідь містить інформацію про стан запиту, а також може містити запитуваний вміст.

Два способи запиту HTTP: GET та POST

Два часто використовувані методи для відповіді на запит між клієнтом і сервером: GET і POST.

GET - запитує дані з визначеного ресурсу POST - подає дані для обробки на вказаний ресурс

Тут ми виділяємо основні відмінності:

введіть тут опис зображення


1
Шукачів та читачів було б набагато краще ввести зміст зображення у відповідь. Також перша частина відповіді не дуже допомагає відповісти на запитання.
Дейв Швайсгут

Скопіюйте пасту звідси - ви повинні правильно вказати своє джерело, а ліцензія джерела повинна дозволити повторне використання, що, на мою думку, не робить w3schools. Крім цього, чи дійсно ви думаєте, що це додає щось, що не було висвітлено в інших 25 відповідях?
Бенджамін В.

1

Проста версія POST GET PUT DELETE

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

4
"використовувати PUT - коли ви" Де решта речення?
Панг

Чудово, що комусь сподобалися перші дві кулі цієї відповіді настільки, мабуть, що вони схвалили її, а не остання куля ха-ха: '-)
pooley1994

0

Що ж, одне головне - все, що ви надсилаєте над собою GET, буде відкрито через URL-адресу. По-друге, як каже Чеяйоз, існує обмеження кількості символів для URL-адреси.


0

Ще одна відмінність полягає в тому, що для POST зазвичай потрібні дві операції HTTP, тоді як для GET потрібна лише одна.

Редагувати: Я повинен уточнити - для загальних моделей програмування. Як правило, відповідь на POST за допомогою прямої веб-сторінки HTML є сумнівним дизайном з різних причин, однією з яких є дратівливий "ви повинні повторно подати цю форму, чи бажаєте ви це зробити?" при натисканні на кнопку назад.


2
POST не вимагає 2 http-операцій.
Біллі ONeal

3
post-redirect-get вимагає 2 операцій: en.wikipedia.org/wiki/Post/Redirect/Get
cherouvim

1
POST може зажадати двох зворотних подорожей на сервер - поширений зразок - POST із expect: 100-continueзаголовком, а потім надсилати дані лише після того, як сервер відповість а 100 CONTINUE.
Френк Фермер

Хороша стаття cherouvim, я ніколи не знав, що шаблон має назву.
Plynx

@cherouvim: Повідомлення переспрямування отримує, але звичайна публікація цього не робить. Ви можете так само просто отримати переспрямування отримати з однаковими результатами. Це не має нічого спільного з протоколом, який ваша форма використовує для подання.
Біллі ONeal

0

Як відповіли інші, існує обмеження розміру URL-адреси з get, а файли можна надсилати лише з публікацією.

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

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

Мови сценаріїв надавали багато засобів для доступу до запиту. Наприклад, PHP дозволяє використовувати $_REQUESTдля отримання або публікації, або отримання. Слід уникати цього на користь більш конкретного $_GETабо $_POST.

У веб-програмуванні є набагато більше місця для інтерпретації. Там, що слід робити, і що можна зробити, але хто краще, це часто для обговорення. На щастя, в цьому випадку двозначності немає. Ви повинні використовувати повідомлення , щоб змінити дані, і ви повинні використовувати отримати для отримання інформації.


0

Горгапор, mod_rewriteяк і раніше часто використовує GET. Це просто дозволяє перевести дружнішу URL-адресу в URL-адресу із GETрядком запиту.


-1

Дані HTTP Post не мають визначеного обмеження щодо кількості даних, коли різні браузери мають різні обмеження для GET. У RFC 2068 зазначено:

Сервери повинні бути обережними щодо залежно від довжини URI вище 255 байт, оскільки деякі старі клієнтські або проксі-сервіси можуть не підтримувати ці довжини належним чином

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

HTTP POST використовуються, коли потрібно подати дані на ресурс URL.

Типовим прикладом використання HTTP GET є пошук, тобто пошук? Запит = запит + мій запит Типовим прикладом для використання HTTP POST є подання зворотного зв’язку в онлайн-форму.

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