Не мог бы кто-нибудь описать мне, что такое HTTP-объект ?
Я читаю документацию HTTPClient, но не совсем понимаю, что это значит?
Не мог бы кто-нибудь описать мне, что такое HTTP-объект ?
Я читаю документацию HTTPClient, но не совсем понимаю, что это значит?
Ответы:
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 ... # ┘
&
вместо &
. Разве это тоже не сущность? Какая разница?
&
это HTML ссылка на символ объект , а не тот же Ан HTTP Entity .
Вот 3 простых случая:
Случай 1. Вы загружаете 3 файла за один запрос. Эти 3 файла представляют собой 3 объекта. Каждый из них имеет свое собственное Content-Type
обозначение, что это за файл.
Случай 2. Вы просматриваете веб-страницу. Браузер загрузил html-файл как объект в фоновом режиме. Поскольку страница может обновляться непрерывно, позже вы можете получить совершенно другой объект.
Случай 3. У вас есть файл 304 Not Modified
. Никакая организация не была передана.
Одним словом, Entity - это необязательная полезная нагрузка внутри сообщения http (либо запрос, либо ответ), поэтому это отношение « часть-целое » между Entity и Message.
Некоторые поля заголовка относятся к Message
хотел Transfer-Encoding
описать , как передать сообщение между посредниками и , таким образом , могут быть добавлены или удалены любым приложением вдоль цепочки запроса / ответа ( hop-by-hop headers
). Для сравнения, эти поля заголовка относятся к Entity
некоторым свойствам, которые описывают размер объекта, тип, алгоритм сжатия и т. Д.
Дальнейшее чтение, цитируя RFC 2616, разделы 1.4, 4.5 и 4.3:
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", что означает, как сжать объект.
HTTP - это протокол, который наблюдается при доступе к информации с удаленного компьютера через сеть. Обычно сеть - это Интернет, а удаленная машина - это сервер.
Когда вы запрашиваете информацию у человека А у человека Б, вы даете ему сообщение. (Запрос). Человек B отвечает вам (Ответ). Запрос и ответ - это типы сообщений HTTP.
Человек А может попросить Человека Б сделать что-нибудь вместо того, чтобы запрашивать информацию. Скажем, человек A хочет, чтобы человек B сохранил файл в безопасном месте. Итак, человек A передает этот файл (объект HTTP) человеку B и просит его что-то сделать (сообщение HTTP). В этом случае Person передает "Entity". В контексте HTTP Entity это полезная нагрузка, прикрепленная к сообщению.
Надеюсь, аналогия помогла.
Как сказано в комментарии @ hawkeye-parker, похоже, что Entity устарела. Выполните поиск в этом rfc 2014 года , и вы увидите XML-сущности и тело сообщения, но ничего о сущности Http.
Тем не менее, у HttpClient, а также у клиента JaxRS есть метод setEntity()
and getEntity()
.
Учитывая принятый ответ, обе библиотеки ошибаются! HttpClient.setEntity()
не удаляет ранее установленные заголовки.
HttpEntity
это то, что вы собираетесь передать в запросе (с заголовком) и что вы получаете в ответе. Для получения запроса мы передаем простую строку
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();
}
Сущность - это что-то вроде сообщения, она состоит из заголовка, в котором находятся метаданные, такие как местоположение, язык, кодировка ...
И, необязательно, тело - его содержимое форматируется и т. Д., Как указано в заголовке
Среди хороших ответов, которые у нас есть, я считаю, что стоит упомянуть кое-что, что исходит непосредственно из RFC 2616 (протокол передачи гипертекста - HTTP / 1.1) :
сущность
Сообщения запроса и ответа МОГУТ передавать объект, если иное не ограничено методом запроса или кодом состояния ответа. Сущность состоит из полей заголовка сущности и тела сущности, хотя некоторые ответы будут включать только заголовки сущностей.
В двух словах: Entity может быть передан, и это может быть заголовок + тело или просто заголовок .
Поскольку это ссылка выше, я задерживаюсь на дополнительных комментариях.