103 Early Hints는 실제 콘텐츠 응답의 Link 헤더와 목적 및 내용이 유사하여 혼동되는 경우가 많습니다. Rails에서 Eileen Uchitelle가 초기 구현을 담당했으며, 현재 구현에는 몇 가지 개선점이 존재합니다.
Rails 103 Early Hints 개선 방안
-
단일 103 Early Hints 응답: 브라우저는 첫 번째 103 응답만 처리하지만, Rails는
javascript_include_tag,stylesheet_link_tag등 호출 시마다 여러 103 Early Hints를 전송합니다. 여러 자산 링크를 모아 단일 응답으로 플러시하는 것이 더욱 효율적입니다. -
before_action에서의 조기 전송: 현재 103 Early Hints는 레이아웃 렌더링 등 응답 처리 후반부에 발생합니다. 힌트의 ‘조기’ 목적에 맞게, 느린 DB 쿼리나 뷰 렌더링 전인before_action에서 전송하는 것이 바람직합니다.
103 Early Hints 동작 방식 (Rack/Puma)
웹 서버(예: Puma)는 request.env["rack.early_hints"]에 콜러블을 제공하여 애플리케이션이 이를 호출, 103 Early Hints 내용을 소켓에 직접 작성하게 합니다.
ruby
# Puma 웹 서버 측
request.env["rack.early_hints"] = lambda do |early_hints_str|
# ... 103 Early Hints 응답을 소켓에 직접 작성
end
# 애플리케이션 측
request.env["rack.early_hints"]&.call("link: </application.css>; ...")