HTTP 및 SOAP 노드에 압축 사용
메시지를 보내고 수신할 때 HTTP 압축 및 압축 풀기를 사용하도록 HTTP 및 SOAP 노드를 구성할 수 있습니다.
요청 메시지를 압축하고, 응답을 승인하고 압축을 풀고, 입력 메시지의 압축을 풀도록 노드를 구성할 수 있습니다.
백그라운드 정보
HTTP 전송은 압축 데이터의 송신을 지원합니다. 데이터가 압축되었다는 사실과 압축에 사용된 압축 기술을 표시하기 위해 특정 HTTP 헤더 필드가 사용됩니다. HTTP 클라이언트는 HTTP 요청을 작성할 때 압축된 응답을 승인하도록 지정하고 승인하는 압축 데이터의 유형도 지정할 수 있습니다. HTTP 전송에서 지원되는 세 가지 압축 기술은 GZIP, deflate, compress입니다.
Accept-Encoding 필드는 요청에 대한 응답 메시지에 승인되는 인코딩을 표시하기 위해 HTTP 요청에 사용됩니다. 이 필드는 대소문자를 구분하지 않는 gzip, deflate, compress, identity 값을 지정하는 데 사용됩니다. identity 값은 데이터를 압축해선 안됨을 나타냅니다. 와일드카드 *는 어느 인코딩이나 허용됨을 나타냅니다. Accept-Encoding 필드는 비어 있을 수도 있으며, 이는 인코딩이 허용되지 않음을 나타냅니다.
Content-Encoding 헤더 필드는 데이터에 적용되는 인코딩을 표시하며 gzip, deflate, compress의 토큰을 포함할 수 있지만 identity의 토큰은 포함할 수 없습니다. HTTP 메시지에 대한 데이터가 압축되면 Content-Encoding 필드에는 사용된 압축 기술의 이름이 포함되어, 수신인이 압축 설계를 식별하고 메시지 데이터의 압축을 제대로 풀 수 있습니다.
TE 헤더 필드는 응답에 승인할 확장 전송 인코딩을 표시하기 위해 요청 헤더에 사용됩니다. 이 필드는 Accept-Encoding 필드와 유사합니다.
Transfer-Encoding 필드는 엔티티가 아닌 메시지의 특성이란 점만 제외하면, Content-Encoding 필드와 유사합니다. Transfer-Encoding 필드는 주로 응답 메시지가 청크됨을 표시하기 위해 사용됩니다. "chunked, gzip"과 같은 다른 전송 인코딩을 표시하는 Transfer-Encoding 헤더가 수신될 수 있습니다. 이 경우에는 실제 데이터 자체가 아닌 데이터의 전송에 gzip이 적용됩니다.
IBM Integration Bus 의 HTTP 압축
IBM® Integration Bus 는 다음과 같이 Accept-Encoding및 Content-Encoding 필드를 사용하여 HTTP및 SOAP 노드에서 압축 및 압축 해제를 지원합니다.
- HTTPRequest 또는 SOAPRequest 노드와 같은 요청 노드에서 압축된 응답을 허용하는 특성을 선택하면 통합 노드가 아웃바운드 요청에 대해 Accept-Encoding 필드를 설정합니다.
- 요청을 압축할 때 요청 노드는 데이터가 압축되었음을 표시하기 위해 Content-Encoding 헤더 필드를 설정합니다. 응답을 수신할 때 요청 노드는 응답이 압축되었는지 판별하기 위해 Content-Encoding 필드를 검사합니다. 헤더 필드의 다중 값은 여러 압축 기능을 사용하여 데이터가 두 번 이상 압축되었음을 나타냅니다.
- 요청을 수신할 때 입력 노드는 Content-Encoding 필드의 컨텐츠를 검사해서 메시지의 컨텐츠가 압축되었는지 판별합니다. 응답 및 입력 노드에서 x-gzip의 Content-Encoding 값은 gzip으로 처리됩니다.
- IBM Integration Bus 는 지퍼 및 지연시키다 압축 인코딩만 지원합니다. 압축하다 인코딩은 지원되지 않습니다.
- 압축 및 압축 풀기는 Accept-Encoding 및 Content-Encoding 헤더 필드를 통해서만 핸들링됩니다. TE 및 Transfer-Encoding 헤더 필드는 지원되지 않습니다.
요청 HTTP 메시지를 압축할 때 노드는 Content-Encoding 필드를 검사해서 메시지 데이터가 이미 압축되었는지 판별합니다. 데이터가 지정된 설계에 이미 압축되어 있으면 추가 압축이 필요하지 않습니다. 하지만 노드 특성에 지정되지 않은 인코딩으로 기존 데이터가 이미 압축된 경우에는, 노드가 노드 특성에 지정된 인코딩을 사용하여 압축된 비트스트림을 추가로 압축합니다. Content-Encoding 필드의 값은 데이터에 적용된 추가 인코딩을 표시하기 위해 업데이트됩니다. 예를 들어, deflate,gzip의 Content-Encoding 값은 메시지를 먼저 deflate를 사용하여 압축을 풀고 나서 gzip을 사용하여 추가로 압축을 풀어야 함을 표시합니다.
HTTP 및 SOAP 노드는 사용자가 응답에 대한 압축 유형의 선호 가중치를 지정할 수 있도록 하는, Accept-Encoding 필드의 품질 값을 지원하지 않습니다. Accept-Encoding 필드의 품질 값은 무시됩니다.
HTTP 및 SOAP 노드에 HTTP 압축 사용
요청 노드는 압축된 응답을 요청하고 처리할 수 있습니다. 응답의 압축이 허용됨을 표시하도록 요청 노드를 구성할 수 있으며, 그러면 노드가 자동으로 압축된 응답의 압축을 풉니다. Accepts-Encoding 헤더는 GZIP 및 deflate 압축 기술이 승인됨을 표시하기 위해 설정됩니다. Accept-Encoding 헤더가 이미 설정된 경우 노드는 이를 대체하지 않습니다.
요청 또는 AsyncResponse 노드가 GZIP 또는 deflate 압축 응답을 수신하면, 압축이 풀리고 메시지 압축을 풀었다는 헤더 표시가 제거됩니다. 노드가 올바르지 않은 압축 응답이나 인식되지 않는 압축 기능을 수신하는 경우에는, 데이터의 압축을 풀 수 없음을 나타내는 예외가 발생합니다.
요청 노드는 압축 요청을 보낼 수도 있습니다. 보내는 압축 요청에 사용된 압축 기술을 지정하도록 노드를 구성할 수 있습니다. Content-Encoding 헤더의 값은 사용된 압축을 표시하도록 설정됩니다. 개별 메시지에 대한 로컬 환경에서 이 값을 대체할 수 있습니다. 노드에서 값이 인식되지 않는 로컬 환경을 대체하면 압축 사용의 기존 노드 값이 사용됩니다.
- Content-Encoding 헤더가 인식되지 않는 압축 기능으로 설정됩니다.
- 메시지 본문이 이름 지정된 Content-Encoding 값을 사용하여 제대로 압축되지 않았습니다.