URL Encoding 그리고 RFC 7230와 RFC 3986

dropKick·2024년 1월 10일

개발 이슈

목록 보기
1/14

개요

✅ 쿼리 스트링으로 인코딩되지 않은 URL 데이터를 추가적으로 전송한 이슈가 있음
✅ URL 인코딩과 그걸 가능하게 하는 웹 인코딩 표준을 알아봄

URL 인코딩

✅ URL(Uniform Resource Locator)은 특정 문자를 포함할 수 없음
?, &, =등은 쿼리 스트링과 의미 중복으로 변환 필요
✅ URL Encoding은 특정 문자를 %로 시작하는 16진수(%XX) 형식으로 변환

예시 데이터

공백  %20/+
&	%26
=	%3D
?	%3F
/	%2F

RFC 7230 표준과 웹

  • HTTP 메시지에서 허용되는 형식, 헤더 및 URI 처리 방식 정의
  • HTTP 요청과 응답을 구성하는 방법을 설명
  • 쿼리 스트링, 요청 헤더 등의 구조를 규정
  • 우리가 일반적으로 사용하는 HTTP/1.1 방식의 URL 요청이 해당

RFC 3986 표준과 URI

  • URI(Uniform Resource Identifier, URL 포함)의 일반적인 형식을 정의
  • URI 내에서 허용되는 문자 및 인코딩 방식 규정
    • scheme://authority/path?query#fragment
  • 쿼리 스트링에서도 특정 문자(&, =, / 등)는 인코딩 필요

쿼리 스트링 인코딩

  • /search?q=spring boot&sort=desc 공백 포함
    • 이 경우 boot&sort=desc를 새로운 쿼리 파라미터로 인식 가능
  • /search?q=spring%20boot&sort=desc 공백 인코딩

웹 URL 인코딩 구현

URL Encoder

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

String query = "spring boot";
String encodedQuery = URLEncoder.encode(query, StandardCharsets.UTF_8);
System.out.println(encodedQuery);

Spring WebClient

WebClient webClient = WebClient.create("https://example.com");

String query = URLEncoder.encode("spring boot", StandardCharsets.UTF_8);
String response = webClient.get()
    .uri(uriBuilder -> uriBuilder.path("/search")
        .queryParam("q", query)
        .build())
    .retrieve()
    .bodyToMono(String.class)
    .block();
  • queryparam() 내부 URL 인코딩 구현 처리
    • 기본적으로 URL 인코딩이 적용되어 명시 필요 시 사용

참고자료

Tomcat RFC7230과 RFC3986

profile
안아줘요

0개의 댓글