Вступ до документа:Вхід за гіперпосиланням видно.
Коли я викликав інтерфейс іншої сторони через curl, виявилося, що явище тайм-ауту дуже серйозне, тому я запитав інтерфейсника іншої сторони, і інша сторона сказала, що потрібно додати:
Після додавання я зрозумів, що він справді добре працює, тому почав досліджувати, як ним користуватися. При використанні curl для POST, коли «дані POST перевищують 1024 байти», curl не ініціює безпосередньо запит POST, а буде поділений на 2 кроки:
Expect: 100-continue
1. Надіслати запит із Expect:100-continue, просячи сервер прийняти ці дані
2. Після отримання відповіді на 100 продовжень, поверненої сервером, дані надсилаються на сервер
Але тут є кілька проблем:
Не всі сервери коректно реагують на 100-continue, наприклад lighttpd, який поверне 417 Очікування не виконано.
спричиняючи затримку,Коли клієнт надсилає перше Expect:100-continue, потрібно чекати відповіді сервера, перш ніж надіслати тіло запиту。
Якщо ви впевнені, що сервер іншої сторони не відхилить POST-запити обсягом понад 1024 байт, ви можете уникнути цього методу і уникнути двох згаданих побічних ефектів, а рішенням є те, що згадується на початку статті.
Близько 100 продовжують
Мета цього полягає в наступному:
Це дозволяє клієнту оцінити, чи готовий сервер прийняти дані запиту перед відправкою, і якщо сервер готовий їх прийняти, клієнт фактично надішле ці дані.
Поведінка клієнтів:
Клієнт, який надсилає 100 продовження, не повинен вічно чекати відповіді від сервера, і після певного тайм-ауту клієнт повинен надіслати цю особу безпосередньо.
Поведінка на стороні сервера:
Якщо сервер отримує запит 100 continue, він відповість 100 continue або надішле код помилки. Сервер ніколи не може надіслати 100 продовження клієнту, який не надсилає 100 продовження. Але деякі сервери це роблять. IIS 5 неправильно надсилає відповідь 100-продовження
Якщо сервер отримує тіло клієнта до відправлення відповіді 100 продовження, це означає, що клієнт вирішив почати надсилати дані, тому сервер більше не може надіслати 100 продовження клієнту. Код налаштування .NET Expect Off Expect виглядає так:
RestSharp налаштований так:
|