우선, 서버를 실행시켜 @GetMapping으로 설정해둔 주소로 예시페이지로 접근합니다.
F12를 눌러 개발자창을 띄워줍니다.
ctrl+R -> Network -> test1을 눌러줍니다.
Header를 눌러 줍니다.
Rerquest URL 은 우리가 주소창에 입력한 URL을 의미합니다.
정확하게 따지면 Identifier을 통해서 접근했으므로 URI입니다.
Request Method는 주소창에 입력하여 접근했을 땐 GET이 기본값입니다.
Status Code는 지난 게시물에서 말했듯이 정상적으로 동작했다는 HTTP상태코드입니다.
Remote Address의 [ : : 1 ]은 접근한 사용자의 IP주소를 말하는데 localhost 접근을 했기때문에 [ : : 1]로 나옵니다. 그 뒤에는 포트번호입니다.
Referrer Policy의 strict-origin-when-cross-origin은 cross-origin 접근을 막고 있다는 뜻으로 default 값입니다.
기본적으로 서버는 JavaScript로 공격을 받을 수 있기때문에 좋아하지 않습니다.
예를 들어, DB에 user라는 테이블에 point라는 컬럼의 값이 1일 때, point의 값을 증가시킬 수있는 건 관리자 뿐입니다. 하지만 서버 내에서 관리자로 로그인되어 받아오는 데이터에 소스코드가 섞여있다면 해당 소스코드가 자동으로 실행될 수 있기 때문에 cross-origin은 기본적으로 막는 것입니다.
Response Header는 요청 받은 서버의 header 입니다.
Content-Type이 담겨있다는 것은 응답할 데이터가 있다는 것입니다.
text/html;charset-UTF-8은 HTML문서에 UTF-8 인코딩된 데이터를 의미합니다.
UTF-8로 만들어진 바디데이터를 전송한다면 Content-Type도 UTF-8로 잡아줘야 합니다. (그렇지 않으면 글자가 다 깨짐)
Request Headers는 요청을 보내는 클라이언트의 header입니다.
Request Header를 보면 Response Header와 다르게 Content-type이 없습니다.
이는 Request 후 들고가는 데이터가 없다는 것을 의미하는데 이유는 클라이언트가 GET방식의 Request를 보냈기 때문입니다.
GET요청은 body가 없습니다.
웹 요청에서 GET 요청은 select요청이라고 보면 됩니다.
POST요청이었다면 Request headers에도 Content-Type이 있었을 것입니다.
이때는 Request 후 데이터를 들고 가는 것이기때문에 어떤 데이터인지 사전에 알고 있어야합니다.
PUT요청이었다면 데이터를 수정하기 위한 요청이기때문에 Request headers와 Response headers 모두 Content-Type이 있습니다.
Delete요청이었다면 데이터를 삭제하기 위한 요청이기때문에 Request headers에는 Content-Type이 존재하지 않으며 Response headers에는 Content-Type이 필요합니다.(삭제 후 성공/실패 여부 결과를 전달하기 위해서)
각 요청을 통한 메서드가 실행될 때 return 값의 데이터는 spring이 알아서 해석하고 반환합니다.
만약 return type이 object 였다면 spring이 JSON타입으로 리턴해줍니다.
만약 return value 값에 HTML코드가 들어간다면 코드를 실행시킨 결과 값을 반환시켜줍니다.
이렇게 return 값에 간단한 html코드를 넣고 웹브라우저에서 접근해보면
html 코드는 나오지 않고 결과 값만 나오는 것을 볼 수 있습니다.
만약 html코드까지 그대로 반환하고 싶다면 MIME 타입을 알아야합니다.
mime type을 검색해서
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
MIME 타입 - HTTP | MDN
MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도
developer.mozilla.org
사이트에 들어가보면 원하는 데이터를 반환해줄 MIME 타입을 알 수 있습니다.
예를 들어 위의 html코드를 그대로 반환하고 싶을 때는 텍스트를 그대로 반환하는 것이므로 text/plain을 사용하면 됩니다.
<<정리>>
HTTP 1.1 프로토콜 http 메서드
GET (select)
- body데이터 필요 없음 => Content-Type 필요 없음
- 하지만 Response headers에는 Content-Type 필요
POST (insert / update)
- Request headers, Response headers 모두에 Content-Type 필요
- 어떤 데이터 타입(mime type)이 Content-Type인지 프론트 엔드 개발자가 백엔드 개발자에게 알려줘야함.
PUT (update)
- Request body 필요함 => Request headers에 Content-Type이 필요함.
- 수정이기때문에 수정 성공 여부를 전달해주기 위한 Response headers에 Content-Type필요
DELETE (delete)
- Request body X => Request headers Content-Type X
- Response Content-Type O
옛날 HTTP 1.0프로토콜에서는 GET, POST방식으로만 개발했음.
'웹개발 > Springboot' 카테고리의 다른 글
HTTP 메서드 - 기초 (0) | 2021.06.24 |
---|---|
[Spring] 시작하기 (RestController / GetMapping) (0) | 2021.06.22 |
STS 프로젝트 설정하기 (0) | 2021.06.22 |
댓글