HTTP 엔터티 란 정확히 무엇입니까?
누군가 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 ... # ┘
간단한 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)를 보여줍니다. 전체 체인을 이동하는 요청 또는 응답 메시지는 4 개의 개별 연결을 통과합니다.
- 메시지 또는 엔티티의 헤더 필드
요청 및 응답 메시지 모두에 적용 할 수 있지만 전송되는 엔터티 에는 적용되지 않는 몇 가지 헤더 필드가 있습니다 . 이 헤더 필드 는 전송중인 메시지 에만 적용됩니다 .
- 체인을 따라 메시지의 헤더 필드를 변경할 수 있습니다
전송 인코딩은 메시지가 안전하고 올바르게 전송되도록 응용 프로그램에서 적용한 전송 코딩을 나타내는 데 사용해야합니다. 전송 인코딩은 엔티티가 아닌 메시지의 속성이므로 요청 / 응답 체인을 따라 모든 응용 프로그램에서 추가하거나 제거 할 수 있습니다.
- 메시지 본문과 엔터티 본문 간의 관계
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
여기서 Transfer-Encoding
"청크 (chunked)"는 메시지를 전송하는 방법을 의미 Content-Encoding
하고 엔티티를 압축하는 방법을 나타내는 "gzip"일 수 있습니다.
그것은이다 나타내는 추상화 요청 또는 응답 페이로드를 . 의 JavaDoc은 그 목적 및 다양한 개체 유형에 분명하다.
HTTPClient Entity
는 HTTP Entity 에 따라 이름이 지정됩니다 .
HTTP는 네트워크를 통해 원격 시스템에서 정보에 액세스 할 때 관찰되는 프로토콜입니다. 일반적으로 네트워크는 인터넷이고 원격 시스템은 서버입니다.
사람 A에서 사람 B에게 정보를 요청하면 메시지를 보냅니다. (의뢰). 사람 B가 응답합니다 (응답). 요청 및 응답은 HTTP 메시지 유형입니다.
개인 A는 정보를 요구하는 대신 개인 B에게 무언가를하도록 요청할 수 있습니다. 개인 A가 개인 B가 파일을 안전한 위치에 저장하기를 원한다고 가정하십시오. 따라서 Person A는 해당 파일 (HTTP Entity)을 Person B로 전달하고 무언가 (HTTP Message)를 요청합니다. 이 경우 Person은 "Entity"를 전달합니다. HTTP 엔티티의 컨텍스트에서 이는 메시지와 함께 첨부 된 페이로드입니다.
비유가 도움이 되었기를 바랍니다.
@ hawkeye-parker의 의견에서 말했듯이 Entity는 사용되지 않는 것으로 보입니다. 화장 이 2014 RFC에서 검색을 , 당신은 HTTP를 엔티티에 대한 XML 엔티티 및 메시지 본문,하지만 아무것도에 대해 볼 수 있습니다.
그럼에도 불구하고 HttpClient setEntity()
및 JaxRS 클라이언트에는 및 getEntity()
메소드가 있습니다.
허용되는 답변을 고려하면 두 라이브러리가 모두 잘못되었습니다! HttpClient.setEntity()
이전에 설정 한 헤더를 제거하지 않습니다.
Entity is something like a message, it consists of header, where are metadata such as location,lang,encoding ...
And optionally of a body - it content is formated etc as specified in header
Among the good answers that we have here, I believe that is worth to mention something that comes directly from the RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1):
Entity
Request and Response messages MAY transfer an entity if not otherwise restricted by the request method or response status code. An entity consists of entity-header fields and an entity-body, although some responses will only include the entity-headers.
In a a nutshell: an Entity may be transferred, and it can be the header + body, or just the header.
Since that there's the link above, I detain myself on making additional comments.
HttpEntity
is what you are going to pass in Request(with header) and what you are getting in Response. For Get Request we are passing simple String
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
For Post We are going to pass complete Entity Class
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();
}
참고URL : https://stackoverflow.com/questions/9197745/what-exactly-is-an-http-entity
'programing tip' 카테고리의 다른 글
sys.path / PYTHONPATH에 디렉토리 추가 (0) | 2020.07.29 |
---|---|
클래스 속성을 만드는 방법? (0) | 2020.07.29 |
예외 코드“EXC_I386_GPFLT”의 의미는 무엇입니까? (0) | 2020.07.29 |
C ++ 헤더에서 "네임 스페이스 사용" (0) | 2020.07.29 |
Node.js에서 next ()를 사용하고 next ()를 반환하는시기 (0) | 2020.07.28 |