Отправка нескольких запросов одним POST-запросом

задняя часть

I. Обзор

Посмотрите эту статью еще раз:nuggets.capable/post/684490…

Вывод этой статьи таков:

GETсформировал одинTCPпакет данных;POSTпроизводить дваTCPпакет данных.

  • заGETметод, браузер будетhttp headerа такжеdataотправлены вместе, сервер отвечает200(возвратные данные);

  • заPOST, браузер отправляет первымheader, сервер отвечает100 continue, браузер отправляетdata, сервер отвечает200(обратные данные).

Потом подумал попробовать.

Сначала поговорим о результатах эксперимента:

  1. ПростойPOSTзапросить, произвестиTCPПакет (соответствующая концепция)
  2. Если запрошенные данные слишком велики, клиент отправит их первымheaderпросить и нестиExpect: 100-continue, ответ сервера вернетHTTP/1.1 100, тогда фактические данные запроса будут отправлены
  3. Концептуально:TCPтранслируется


2. Эксперимент

Экспериментальные шаги:

  1. Запустить службу, порт 8081
  2. запускать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Интерфейс (локальный возврат), как показано на рисунке:

2021-03-1211-04-33.png

Фильтровать порты:port 8081, как показано на рисунке:

Например, однаждыGETпросить

2021-03-1209-56-47.png

  • []: указывает на соединение
  • ->: указывает запрос
  • <-: означает возврат
  1. 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Результат захвата пакета показан на рисунке:2021-03-1209-56-47.png

  1. 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Захватите пакет, как показано:

2021-03-1210-34-40.png

Сумка не большая?

Затем снова спросите:

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Захватите пакет, как показано:

2021-03-1210-51-14.png

Видно, что естьhttp 100.

ОднакоhttpСемантика кода состояния 100:

  • 100 Continue: используется перед загрузкой больших файлов

Переносится в запросе, инициированном клиентомExpect: 100-continueГоловной триггер.

действительно пошлетheader, и нестиExpect: 100-continue, как показано на рисунке:

2021-03-1211-00-00.png