Что такое HTTP Entity?

Кто-нибудь, пожалуйста, сообщите мне, что такое объект HTTP?

Я читаю документацию HTTPClient, но я действительно не понимаю, что это значит?

Ответ 1

An HTTP-объект - это большая часть HTTP-запроса или ответа, состоящего из некоторых заголовков и тело, если оно присутствует. Кажется, что весь запрос или ответ без строки запроса или статуса (хотя только определенные поля заголовка считаются частью объекта).

Чтобы проиллюстрировать; здесь запрос:

POST /foo HTTP/1.1          # Not part of the entity.
Content-Type: text/plain    # ┬ The entity is from this line down...
Content-Length: 1234        # │
                            # │
Hello, World! ...           # ┘

И ответ:

HTTP/1.1 200 OK             # Not part of the entity.
Content-Length: 438         # ┬ The entity is from this line down...
Content-Type: text/plain    # │
                            # │
Response body ...           # ┘

Ответ 2

Вот 3 простых случая:

Случай 1. Вы загружаете 3 файла в один запрос. Эти 3 файла - 3 объекта. Каждый из них имеет свой собственный Content-Type, чтобы указать, какой файл он имеет.

Случай 2. Вы просматриваете веб-страницу. Браузер загрузил html файл в качестве объекта в фоновом режиме. Поскольку страница может обновляться непрерывно, вы можете получить совершенно другую сущность позже.

Случай 3. У вас есть 304 Not Modified. Объект не передан.

Одним словом, Entity - это дополнительная полезная нагрузка внутри http-сообщения (запрос или ответ), поэтому это отношение часть-целое "между Entity и Сообщение.

Некоторые поля заголовка применяются к Message как Transfer-Encoding, описывают, как передавать сообщение между посредниками, и таким образом МОЖЕТ быть добавлено или удалено любым приложением по цепочке запроса/ответа (hop-by-hop headers). Для сравнения, эти поля заголовка применяются к Entity - это некоторые свойства, которые описывают размер, тип, алгоритм сжатия и т.д.

Дальнейшее чтение, цитирование из раздела 1.4, 4.5 и 4.3 RFC 2616:

  • Цепочка запроса/ответа
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

На рисунке выше показаны три посредника (A, B и C) между пользовательским агентом и сервером происхождения. Запрос или ответное сообщение, которое перемещает всю цепочку, будет проходить через четыре отдельных соединения.

  • Поля заголовка для сообщения или объекта

Существует несколько полей заголовка, которые имеют общую применимость как для сообщений запроса, так и для ответа, но которые не относятся к передаваемому объекту. Эти поля заголовка применяются только к передаваемому сообщению.

  • Поля заголовка для сообщения могут быть изменены по цепочке

Передача-кодирование ДОЛЖНА использоваться для указания любых кодировок передачи, применяемых приложением для обеспечения безопасной и правильной передачи сообщения. Передача-Кодирование является свойством сообщения, а не сущности, и поэтому МОЖЕТ быть добавлено или удалено любым приложением по цепочке запроса/ответа.

  • Отношение тела сообщения и тела объекта

message-body = Transfer-Encoding( Content-Encoding(entity-body) )

где Transfer-Encoding может быть "chunked", что означает, как передать сообщение, а Content-Encoding может быть "gzip", что означает, как сжать объект.

Ответ 3

Это абстракция, представляющая запрос или ответ полезная нагрузка. JavaDoc ясно указывает на его назначение и различные типы сущностей.

Ответ 4

Я предполагаю, что HTTPClient Entity назван в соответствии с HTTP Entity.

Ответ 5

Как сказано в комментарии @hawkeye-parker, похоже, что Entity устарела. Сделайте поиск в этом 2014 rfc, и вы увидите о сущностях XML и теле сообщения, но ничего не об объекте Http.

Тем не менее, HttpClient, но также и JaxRS-клиент, имеют метод setEntity() и getEntity().

Учитывая принятый ответ, обе библиотеки ошибаются! HttpClient.setEntity() не удаляет ранее установленные заголовки.

Ответ 6

HTTP - это протокол, который наблюдается при доступе к информации с удаленного компьютера через сеть. Обычно сеть - это Интернет, а удаленная машина - это сервер.

Когда вы запрашиваете информацию от человека A к человеку B, вы даете ему сообщение. (Запрос). Ответчик B отвечает вам (ответ). Запрос и ответ - это типы сообщений HTTP.

Лицо A может попросить Person B что-то сделать, а не запрашивать информацию. Скажем, Person A хочет, чтобы Person B хранил файл в безопасном месте. Таким образом, Person A передает этот файл (HTTP Entity) в Person B и просит его что-то сделать (HTTP-сообщение). В этом случае Person передает "Entity". В контексте HTTP Entity это полезная нагрузка, связанная с сообщением.

Надеемся, что эта аналогия помогла.

Ответ 7

Entity - это что-то вроде сообщения, оно состоит из заголовка, где находятся метаданные, такие как местоположение, lang, encoding...

И, возможно, тело - его содержимое формируется и т.д., как указано в заголовке

Ответ 8

Среди хороших ответов, которые мы здесь имеем, я считаю, что стоит упомянуть то, что приходит непосредственно из RFC 2616 (протокол передачи гипертекста - HTTP/1.1):

Entity

Запросы и ответные сообщения МОГУТ ПЕРЕВОДИТЬ объект, если не в противном случае   ограниченным методом запроса или кодом статуса ответа. Сущность   состоит из полей заголовка объекта и тела объекта, хотя некоторые   ответы будут включать только заголовки сущностей.

В двух словах: объект может быть передан, и он может быть заголовком + телом или просто заголовком.

С тех пор, как ссылка выше, я задерживаю себе дополнительные комментарии.

Ответ 9

HttpEntity - это то, что вы собираетесь передать в Request (с заголовком) и что вы получаете в Response. Для получения запроса мы передаем простую строку

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

Для публикации Мы собираемся пройти полный класс сущностей

public String createProducts(@RequestBody Product product) {
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);

    return restTemplate.exchange(
             "http://localhost:8080/products", HttpMethod.POST, entity, String.class
           ).getBody();
}