I. Обзор
Посмотрите эту статью еще раз:nuggets.capable/post/684490…
Вывод этой статьи таков:
GETсформировал одинTCPпакет данных;POSTпроизводить дваTCPпакет данных.
за
GETметод, браузер будетhttp headerа такжеdataотправлены вместе, сервер отвечает200(возвратные данные);за
POST, браузер отправляет первымheader, сервер отвечает100 continue, браузер отправляетdata, сервер отвечает200(обратные данные).
Потом подумал попробовать.
Сначала поговорим о результатах эксперимента:
- Простой
POSTзапросить, произвестиTCPПакет (соответствующая концепция) - Если запрошенные данные слишком велики, клиент отправит их первым
headerпросить и нестиExpect: 100-continue, ответ сервера вернетHTTP/1.1 100, тогда фактические данные запроса будут отправлены - Концептуально:
TCPтранслируется
2. Эксперимент
Экспериментальные шаги:
- Запустить службу, порт 8081
- запускать
wireshark, отфильтровать соответствующий порт-
GETпросить -
POSTпросить
-
(1) Запустите службу, порт 8081.
использоватьspringboot, запустите службу:
Tips: запускается локально.
@RestController
class HelloController {
@GetMapping("/test/1")
public String test1() {
return "123";
}
@PostMapping("/test/2")
public String test2(@RequestBody Object o) {
System.out.println(o.toString());
return "456";
}
}
(2) Стартwireshark, отфильтровать соответствующий порт
Поскольку это локальный запрос на доступ к локальной службе, поэтому выберитеloopbackИнтерфейс (локальный возврат), как показано на рисунке:
Фильтровать порты:port 8081, как показано на рисунке:
Например, однажды
GETпросить
-
[]: указывает на соединение -
->: указывает запрос -
<-: означает возврат
-
GETпросить
просить:
donald@donald-pro:~$ curl http://localhost:8081/test/1 -i
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 01:51:35 GMT
123
wiresharkРезультат захвата пакета показан на рисунке:
-
POSTпросить
просить:
donald@donald-pro:~$ curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name": "donald"}' http://localhost:8081/test/2 -i
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 02:08:27 GMT
456
wiresharkЗахватите пакет, как показано:
Сумка не большая?
Затем снова спросите:
donald@donald-pro:~$ curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name": "donald", "data": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAA"}' http://localhost:8081/test/2 -i
HTTP/1.1 100
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 02:45:16 GMT
456
wiresharkЗахватите пакет, как показано:
Видно, что естьhttp 100.
ОднакоhttpСемантика кода состояния 100:
-
100 Continue: используется перед загрузкой больших файлов
Переносится в запросе, инициированном клиентом
Expect: 100-continueГоловной триггер.
действительно пошлетheader, и нестиExpect: 100-continue, как показано на рисунке: