코드스테이츠_국비교육/[Section3]

42.02_[Spring MVC] API 계층; HTTP Header_22.10.22

생각없이 해도 생각보다 좋다. 2022. 10. 22. 19:21

추가 학습 내용이니 당장은 깊이 빠지지 말 것.

>HTTP header
: HTTP Message의 구성 요소 중 하나 (Header + Body)

>HTTP 헤더의 사용
-Content-Type
: HTTP Message Body의 데이터 형식의 정보를 제공함
: application/json
-Authorization
: 헤더의 정보중 하나인 Authorization을 통해 클라이언트와 서버 간의 로그인 인증을 확인한다.
-User-Agent
: 유저가 모바일 클라이언트를 사용하는지, 데스크탑인지, 노트북인지 등의 에이전트 차이에 대한 정보를 알 수 있음.

>HTTP Request Header 정보 얻기
-@RequestHeader(" ")
: Attribute값에 문자열의 형식으로 헤더에서 원하는 정보(예: User-Agent)를 작성하면 해당 정보를 개별적으로 얻어올 수 있다.
: 이 때, 애너테이션은 String 변수에 붙인다.
-@RequestHeader
: Header의 전체 정보를 얻을 수 있는 애너테이션
: 이 때, 애너테이션은 Map<String, String> 변수에 붙인다.
: 정보의 종류가 Key 값이 되고, 정보의 내용이 Value 값이 된다.
-HttpServlerRequest
: HttpServlerRequest 객체로 헤더의 정보를 얻을 수 있다.
: 다양한 방법으로 헤더 정보에 접근할 수 있지만, 단순히 특정 헤더 정보에 접근하고자 할 때에는 @RequestHeader를 사용하는 것이 좋다.
-HttpEntity
: ResponseEntity와 비슷해보인다.
: HttpEntity 또한 객체로 헤더의 정보를 통째로 얻어오는 방법이다.
: HttpEntity가 제공하는 메서드인 getXXX()을 이용하면, 원하는 헤더의 정보를 얻어올 수 있다. 하지만 이는 자주 사용하는 정보에만 구현된 방법이다. (getHost() -> host 정보 확인)
: 다른 헤더의 정보를 얻으려면 get(" ") 메서드를 이용하여 문자열 형식으로 헤더의 정보를 제공하면 된다.

>HTTP Request Header 정보 추가
-ResponseEntity와 HttpHeaders를 이용
: ResponseEntity가 반환값인 메서드 내에서 HttpHeaders의 인스턴스를 생성하여 사용
: 생성한 인스턴스의 set()메서드를 이용하여 문자열 형식으로 첫번째 인자로 헤더의 정보, 두번째 인자로 헤더 정보의 값을 주면 된다.
: 수정된 인자를 메서드 반환에 사용되는 ResponseEntity의 생성자의 두번째 인자로 제공한다. (첫번째 인자: JSON 데이터, 세번째 인자: Http Status)
-HttpServletResponse 사용
: Response를 할 수 있는 메서드의 매개변수로 HttpServletResponse 참조형 변수를 받는다.
: 메서드 내에서 해당 참조 변수의 addHeader()메서드를 사용하고 문자열 형식으로 첫번째 인자는 헤더의 정보, 두번째 인자는 헤더 정보의 값을 주면 된다.(마치 List.add하듯이)
: 하지만 웬만해선 HttpHeaders를 권장(코드의 간결성 및 생산성 측면)

>커스텀 헤더
: 위 방법으로 개발자가 컨트롤한 header를 커스텀 헤더라고 한다.
: 헤더 정보의 이름을 첫 글자는 대문자, 문자 구분은 대시(-)로 하는게 관례이다.