Кто-нибудь, пожалуйста, сообщите мне, что такое объект HTTP?
Я читаю документацию HTTPClient, но я действительно не понимаю, что это значит?
Кто-нибудь, пожалуйста, сообщите мне, что такое объект HTTP?
Я читаю документацию HTTPClient, но я действительно не понимаю, что это значит?
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 ... # ┘
Вот 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", что означает, как сжать объект.
Это абстракция, представляющая запрос или ответ полезная нагрузка. JavaDoc ясно указывает на его назначение и различные типы сущностей.
Я предполагаю, что HTTPClient Entity
назван в соответствии с HTTP Entity.
Как сказано в комментарии @hawkeye-parker, похоже, что Entity устарела. Сделайте поиск в этом 2014 rfc, и вы увидите о сущностях XML и теле сообщения, но ничего не об объекте Http.
Тем не менее, HttpClient, но также и JaxRS-клиент, имеют метод setEntity()
и getEntity()
.
Учитывая принятый ответ, обе библиотеки ошибаются! HttpClient.setEntity()
не удаляет ранее установленные заголовки.
HTTP - это протокол, который наблюдается при доступе к информации с удаленного компьютера через сеть. Обычно сеть - это Интернет, а удаленная машина - это сервер.
Когда вы запрашиваете информацию от человека A к человеку B, вы даете ему сообщение. (Запрос). Ответчик B отвечает вам (ответ). Запрос и ответ - это типы сообщений HTTP.
Лицо A может попросить Person B что-то сделать, а не запрашивать информацию. Скажем, Person A хочет, чтобы Person B хранил файл в безопасном месте. Таким образом, Person A передает этот файл (HTTP Entity) в Person B и просит его что-то сделать (HTTP-сообщение). В этом случае Person передает "Entity". В контексте HTTP Entity это полезная нагрузка, связанная с сообщением.
Надеемся, что эта аналогия помогла.
Entity - это что-то вроде сообщения, оно состоит из заголовка, где находятся метаданные, такие как местоположение, lang, encoding...
И, возможно, тело - его содержимое формируется и т.д., как указано в заголовке
Среди хороших ответов, которые мы здесь имеем, я считаю, что стоит упомянуть то, что приходит непосредственно из RFC 2616 (протокол передачи гипертекста - HTTP/1.1):
Entity
Запросы и ответные сообщения МОГУТ ПЕРЕВОДИТЬ объект, если не в противном случае ограниченным методом запроса или кодом статуса ответа. Сущность состоит из полей заголовка объекта и тела объекта, хотя некоторые ответы будут включать только заголовки сущностей.
В двух словах: объект может быть передан, и он может быть заголовком + телом или просто заголовком.
С тех пор, как ссылка выше, я задерживаю себе дополнительные комментарии.
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();
}