아주 특이한 경우라 메모를 남겨본다.
jQuery를 이용하여 Ajax 서버 호출을 하는데
서버 요건 때문에 POST로만 호출을 할 수 있는 상황이라
보낼 데이터가 없더라도 GET이 아닌 POST 요청을 하고 있는데
매우 특이하게도 크롬(Chrome) 브라우저에서만,
그것도 HTTPS 일 때만,
그것도 data 없이 POST 요청할 때에만
403 Forbidden: Access is Denied 에러가 발생하는 것이 아닌가!?
즉, 다음과 같은 결과가 발생했다.
언어 | Java 1.8 |
|||||||
웹 서버 | Tomcat 7 |
|||||||
브라우저 | IE / Edge | Chrome |
||||||
프로토콜 | HTTP | HTTP | HTTPS | HTTPS | HTTP | HTTP | HTTPS | HTTPS |
Ajax 호출 | $.post | $.post | $.post | $.post | $.post | $.post |
$.post | $.post |
data | 있음 | 없음 | 있음 | 없음 | 있음 | 없음 |
있음 | 없음 |
결과 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 403 |
혹시나 싶어 똑같은 기능을 하고 있는
IIS로 구성된 .NET 서버로 호출해봤더니 멀쩡하게 잘 동작했다.
언어 | C# (.NET 4.52) | |||||||
웹 서버 | IIS 8.0 | |||||||
브라우저 | IE / Edge | Chrome | ||||||
프로토콜 | HTTP | HTTP | HTTPS | HTTPS | HTTP | HTTP | HTTPS | HTTPS |
Ajax 호출 | $.post | $.post | $.post | $.post | $.post | $.post | $.post | $.post |
data | 있음 | 없음 | 있음 | 없음 | 있음 | 없음 | 있음 | 없음 |
결과 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 200 |
즉,
크롬(Chrome) 브라우저에서 HTTPS로 Tomcat 서버에 데이터 없는 POST 요청을 하면 403 에러가 나는 것.
이것은 과연 Tomcat 서버가 문제일까, 크롬이 문제일까?
아니면 둘 다가 문제일까?
F12 개발자 모드로 요청 트래픽을 비교해봐도 IE나 크롬이나 별반 다를 것이 없는데
IE에서는 잘 되고 크롬에서는 403 Forbidden 에러가 발생했다.
또, Postman으로 똑같이 요청을 만들어서 호출해 봤더니 크롬처럼 403 에러가 발생했다.
아니, 그렇다면 IE가 잘 되는 것이 문제인 것일까?
...
해결 방법은 contentType을 명시적으로 넣어주는 것이었다.
contentType을 넣어주기 위해서는 $.post를 $.ajax로 변경해야 하고,
아래와 같이 써 주어야 한다.
$.ajax( {
type: "POST",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
... } )
아래 참조 링크된 jQuery 사이트를 봐도 위 contentType이 기본값으로 들어가기 때문에
명시적으로 넣을 필요가 없을 것 같은데 대체 왜 이렇게 해야 하는지 이유는 잘 모르겠다.
>> 참조: http://api.jquery.com/jquery.ajax/
이상으로 짐작할 수 있는 것은,
아마도 IE에서는 POST 요청인 경우 contentType이 없으면 자동으로 붙어서 넘어가는 모양이다.
F12 개발자 모드에서도 안 잡히면서 말이다...
'Tech: > 일반·기타' 카테고리의 다른 글
Windows 10 최신 1809버전(17763.292) RDPWrap 적용?! (0) | 2019.02.22 |
---|---|
Mac Mini 안드로이드 빌드 환경 관련 메모 (0) | 2019.02.13 |
이클립스(Eclipse) 관련 메모 (0) | 2019.01.23 |
Windows 10에서 Open JDK 8 기반의 Tomcat으로 TLS 연결 실패(2) (1) | 2018.12.20 |
Windows 10에서 Open JDK 8 기반의 Tomcat으로 TLS 연결 실패(1) (0) | 2018.12.20 |