2021.10.10
서론
MicroSoft Graph Api를 호출하는 과정에서
Header에
"Accept" "application/json"
"Authrization" "토큰값"형태로 바디에 Json 데이터를 담아 요청을 보냈다.
data값은 원하는 포맷으로 오지 않았고 여기서 의문점이 들었다
Accept에 분명 json타입으로 받겠다고 요청했는데
왜? 데이터가 누락되어서 오는거지? 혹은 왜 400error BadRequest를 보내는거지?
본론
Content_Type이랑 Accept의 차이를 알아보기로 했다.
Content_Type이란?
Client가 Http통신으로 요청을 보낼 때 요청과 응답에 담기는 데이터의 형식을 알려주는 헤더입니다.(MIME타입)
HTTP 표준 스펙을 따르는 브라우저와 웹서버는 Content_Type 헤더를 기준으로 Http 메시지에 담긴 데이터를 분석하고 파싱합니다.
만약 Content_Type 헤더가 없다면 브라우저나 웹서버에서 데이터를 전송할 때 특정한 형식의 데이터라도 받아 들이는 쪽에서는 단순한 Text 데이터로 생각합니다.
단, Get방식의 경우 URL에 querystring으로 key와 value값으로
ex) localhost:1234/search/movies=A12345
key:movies value:A12345
key=value형식의 데이터라는 것을 유추 할 수 있기 때문에 굳이 Header에 Content-type이 필요 없습니다.
Post와 Put과 같이 body에 데이터를 담아 보낼 경우 이 데이터가 어떤 데이터인지 알려줘야 할 필요성이 있습니다.
클라이언트는 서버에게 어떤 유형의 데이터가 실제로 전송됐는지를 알려줍니다.
Accept란?
클라이언트에서 웹서버로 요청시 요청메시지에 담기는 헤더입니다.(MIME타입)
Accept에 경우 application/json으로 Header에 담아 요청을 보냈다면 웹서버에게 json데이터만 처리할 수 있으니 json으로 보내줘라고 하는 것입니다. 다만 json으로 보내주는 것은 웹서버의 선택입니다.
즉, 클라이언트가 이해 가능한 컨텐츠 타입을 알려주는것입니다.
Content_Type과 Accept 차이점
결국 Content_Type은 내가 보낼 데이터의 형식을 웹서버에게 알려주는것이고
Accept는 요청하고 내가 받아볼 데이터의 형식을 지정해주는 것이라고 생각하면 될 거 같습니다.
ps.
여기저기 정보를 찾아서 정리해서 쓴 글이라 참조만 하시면 될 거 같습니다.
결론
Graph Api에서 Post형식의 http 메소드가 Json데이터 형식으로 받게끔 되어있는데
Header에 Content-Type을 지정해주지 않았기 때문에 body에 담겨진 data는 일반 text형식으로 보내졌고 서버에서는 json데이터 형식으로 받지 못했기 때문에 결국 클라이언트에서 값을 받아보지 못하거나 400Error를 맞닥뜨린것이다.
경고: 브라우저 는 URL 처리 방법을 결정하기 위해 파일 확장자가 아닌 MIME 유형을 사용 하므로 웹 서버가 응답 Content-Type헤더 에 올바른 MIME 유형을 보내는 것이 중요합니다 . 이것이 올바르게 구성되지 않으면 브라우저가 파일 내용을 잘못 해석하고 사이트가 제대로 작동하지 않으며 다운로드한 파일이 잘못 처리될 수 있습니다
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
불러오는 중입니다...
'🌈CS' 카테고리의 다른 글
서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR) (0) | 2022.01.06 |
---|