HTTP 쿠키에서 Path에 따른 전달 여부

ino5·2021년 5월 9일
0

소개


일반적으로 웹브라우저에 URL을 입력하여 어떤 웹페이지에 방문하는 것은 HTTP 통신입니다. 우리가 서버에 웹페이지를 보여달라고 요청을 하면 서버는 이에 응답하여 웹페이지를 보내줍니다. 그리고 웹브라우저가 그 응답을 해석하여 우리가 볼 수 있게 해줍니다.

우리가 HTTP 요청을 할 때 쿠키라는 것을 같이 보냅니다. 쿠키는 우리 컴퓨터 안에 저장되어 있는 것으로, 이전에 특정 웹페이지에 방문하면서 저장한 기록이라고 볼 수 있습니다.

기본적으로 서버에 전달하는 쿠키의 내용은 방문하려는 웹페이지에 대해서만 담겨있습니다. 예를 들어, 네이버에 방문하는 데에 구글에 방문했던 기록까지 네이버에 보내지는 않습니다.


그렇다면 같은 웹페이지(도메인) 내에서는 어떨까요? 결과부터 말씀드리자면, 상위 Path에 대한 쿠키 내용도 같이 보냅니다. 이에 대해 간단한 실험을 해보려고 합니다. 같은 도메인 내에서 Path(디렉터리)가 다른 주소에 대해서는 쿠키 전달을 어떻게 하는지에 대해서 알아보겠습니다.



프로젝트 구조


해당 프로젝트는 Dynamic Web Project이며, Web Module Path는 /och03 입니다.

WebContent 폴더 안에 study/cookie 폴더를 만들어 위와 같은 디렉토리 구조를 만들었습니다.



쿠키 생성 jsp 작성


study/cookie/makeCookie.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	Cookie cookie = new Cookie("name", URLEncoder.encode("main","utf-8"));
	response.addCookie(cookie);
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%= cookie.getName() %> 쿠키의 값 = "<%= cookie.getValue() %>"

</body>
</html>

위 jsp는 쿠키를 생성하는 jsp 입니다.

Cookie cookie = new Cookie("name", URLEncoder.encode("main","utf-8"));

위 코드의 뜻은 name이라는 이름(name)과 그에 대응하여main이라는 값(value)을 쿠키에 저장하겠다는 뜻입니다.


위와 같은 jsp를 path1 폴더와 path2 폴더, path3 폴더에도 만들어줍니다. 다만 값 부분에서 main이 아닌 각각 path1path2, path3로 바꾸어 줍니다.

path3 폴더의 makeCookie.jsp에는 다음과 같이 코드 한줄을 더 추가해줍니다.

<%
	Cookie cookie = new Cookie("name", URLEncoder.encode("path3","utf-8"));
	cookie.setPath("/och03/study/cookie/");
	response.addCookie(cookie);
%>

setPath메소드를 추가해 주었습니다.



쿠키 확인 jsp 작성


study/cookie/viewCookies.jsp
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	Cookie[] cookies = request.getCookies();
	if (cookies != null && cookies.length > 0) {
		for (int i = 0; i < cookies.length; i++) {
%>
	<%= cookies[i].getName() %> =
	<%= URLDecoder.decode(cookies[i].getValue(), "utf-8") %><br>
<%
		}
	} else {
%>
쿠키가 존재하지 않습니다.
<%
	}
%>
</body>
</html>

viewCookies.jsp의 경우 다른 폴더 내에도 똑같이 만들어줍니다. 해당 jsp는 서버가 요청받을 때 받은 쿠키의 내용을 출력해줍니다.



결과 화면


http://localhost:8181/och03/study/cookie/viewCookies.jsp


http://localhost:8181/och03/study/cookie/path1/viewCookies.jsp


http://localhost:8181/och03/study/cookie/path2/viewCookies.jsp


http://localhost:8181/och03/study/cookie/path3/viewCookies.jsp


먼저 각 경로의 makeCookie.jsp에 접근하여 쿠키를 생성합니다. 그 다음에 위와 같이 viewCookies.jsp에 접근하면 쿠키 내용을 확인할 수 있습니다.



결과 분석


어떠한 Path에 대해 HTTP 요청을 할 때 상위 Path의 쿠키 내용도 같이 보낸다는 것을 확인할 수 있었습니다.

study/cookie/path3/의 경우에서 보았듯이 setPath 메소드를 이용하여 쿠키의 Path를 수정할 수도 있습니다. path3에서는 쿠키의 Path를 study/cookie/로 지정하였기 때문에 모든 페이지에서 path3에서 저장한 쿠키 내용을 확인할 수 있었습니다.

profile
궁금한 것을 찾아보거나 문제를 해결한 과정을 날 것의 글로 작성하였습니다.

0개의 댓글