티스토리 뷰

개발/아파치와 톰캣

ajp 요청 헤더2

jongqui 2019. 1. 20. 23:06

지난 번에 이슈를 처리하고 나서, 새롭게 잘못된 부분이 나왔다.

이에 따라 새롭게 공부하면서 누락된 부분이 있어 내용을 추가한다.


ajp 헤더는 아파치에서 java ee 서버로 메시지를 보내는 것으로 시작한다.

지난번 포스팅에서 말했듯이 첫 메시지는 http 메시지를 담고 있다.


이는 다르게 말하면 두번째 메시지부터 http 바디를 보낸다는 뜻이다.

그런데 여기에서 버그를 유발하는 부분이 있었다.


스펙에 따르면 http content-length를 고려하도록 되어 있다.

먼저, content-length가 있는 경우와 없는 경우로 동작이 갈린다.


content-length가 있는 경우에는, 0보다 큰 경우에는 바로 body를 1개 보낸다.

content-length가 없거나 0인 경우엔 자바 어플리케이션 쪽에서 읽기를 기다린다.


또한, 지난시간에 바디의 최대 길이가 8188이라고 했는데, 이는 절반만 맞는 말이다.

http body를 주고받는 경우에는 함정이 있어 사실 8186byte가 최대길이가 맞다.


앞에서 말했듯이, ajp 헤더는 기본적으로 2byte 매직넘버와 2byte payload length로 구성되어 있다.

그런데, request body message의 경우엔, 그 뒤에 2byte message body length가 추가된다.

매직넘버인 0xAB 이후에 payload length가 나오고, 여기서 2를 뺀 message body length가 따라 온 이후에야 데이터가 나온다.

이것이 왜 존재하는지는 잘 모르겠다...


이 부분을 알고 나서야 이슈를 정확히 처리하는데 가까워질 수 있었다.

물론 이게 다가 아니었다.

다음 장에서는 inputstream에 대해 살펴보도록 한다.

'개발 > 아파치와 톰캣' 카테고리의 다른 글

Tomcat HTTP location Header 이슈  (1) 2019.08.18
자바 어플리케이션 inputstream 주의사항  (0) 2019.01.20
AJP 요청 헤더  (0) 2018.10.27
ajp 프로토콜 설정  (0) 2018.07.08
아파치 간단 빌드  (0) 2018.07.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함