meong_j
기록하는 습관.
meong_j
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • 개인 공부 정리 (0)
    • 서버 운영 (37)
      • Linux (36)
    • Frontend (11)
      • Vue.js (10)
    • Backend (70)
      • Java (4)
      • Python (22)
      • Django (38)
      • Spring (6)
    • Database (5)
      • Oracle (4)
      • MySQL (1)
      • MariaDB (0)
    • Android (14)
      • Kotlin (6)
    • 배포 (9)
      • Docker (8)
      • AWS (1)
    • IT_study (29)
      • Coding test (17)
      • 알고리즘 (5)
      • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

인기 글

반응형

태그

  • 리눅스인증
  • 배포인프라
  • docker
  • cpu사용률
  • Proxy
  • 리눅스방화벽
  • 코틀린자료형
  • dockersecret
  • django
  • DHCP
  • gabagecollecter
  • Kotlin
  • 안드로이드adaptor
  • 테크커리어
  • dp #알고리즘
  • router-link
  • SASS Variables
  • 개발자도서
  • 중첩라우트
  • 이차원배열정렬

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
meong_j

기록하는 습관.

Backend/Spring

[Spring Error] java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 인코딩 에러 해결

2021. 11. 1. 16:04
728x90
반응형
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:192)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

현재 톰캣 7.0버전으로 테스트 중인데  해당 오류 메시지와 함께 400 Error 가 발생했다.

 

에러 원인

http://localhost:8080/device/makeurl/Device.do?allattr_seq=|1|2&old_seq=|1|2

400 Error는 문법 오류인데, get방식으로 controller 로 request를 보낼때 문자 구분용으로

특수기호 ( '|' )가 들어가서 생긴 오류였다.

 

Tomcat 버전에 따라 RFC 3986 연동 규격이 적용되어 지는데 URL에서 사용되는 예약어가 있고, 

그렇지 않은 비예약어 문자가 있다. 

예약어 - ! , *, ' , ( , ), ; , : , @, &, = , + , $, , / , ? , # , [ , ]
비예약어 - 예약어가 아닌 문자(a,b,c,d....) 및 숫자(0,1,2,3...) , 특수기호 ( -, _ , . , ~)

예약어가 포함되어 위의 에러가 난 듯 싶다.

 

해결방법

URL 인코딩(Encoding) 방식인 javascript 함수를 같이 쓰면 된다. URL로 사용할 수 없는 예약어를 사용할 수 있도록 인코딩해준다.

encodeURLComponent(url) : 모든 문자를 인코딩하는 함수

특수문자가 들어가는 url을 encodeURLComponent로 감싸 실행하면 깔끔하게 해결된다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'Backend > Spring' 카테고리의 다른 글

[log4j2, Logback] 로깅 라이브러리  (0) 2022.07.31
[tomcat] 에러 org.apache.catalina.LifecycleException, java.lang.ClassNotFoundException 해결방법  (1) 2021.11.01
[Spring] 스프링 프로젝트에서 빨간줄 뜰때 해결법  (0) 2021.10.28
[Spring] JDBC 기반 트랜잭션(Transaction) 관리자 -DataSourceTransactionManager  (0) 2021.10.27
[mybatis 에러] org.apache.ibatis.binding.BindingException 에러 원인  (2) 2021.10.25
    'Backend/Spring' 카테고리의 다른 글
    • [log4j2, Logback] 로깅 라이브러리
    • [tomcat] 에러 org.apache.catalina.LifecycleException, java.lang.ClassNotFoundException 해결방법
    • [Spring] 스프링 프로젝트에서 빨간줄 뜰때 해결법
    • [Spring] JDBC 기반 트랜잭션(Transaction) 관리자 -DataSourceTransactionManager
    meong_j
    meong_j
    #it #개발일기 #개발공부 #개발자 #백앤드 #생각정리 #시간은 실력에 비례한다 #뭐든지 꾸준히 열심히 #오늘의 내가 내일의 나를 만든다

    티스토리툴바