HTTP Protocol Headers

Bright Hyeon·2022년 4월 23일
0
post-thumbnail

Header들.

  • Swift환경에서 URLSession이나 Alamofire 등으로 request(요청)을 할 때, 계속 addValue나 setValue를 통해 무엇인가를 headerField로 지정해주는데, 이것이 뭔지 찾으려했으나 계속 찾지 못했었다....
  • 알고보니‼️ 자꾸 Swift환경 안에서 검색하려했기 때문!!... ㅠㅠ
  • 이 개념은 HTTP Protocol관련된 내용이었기에, HTTP를 검색했어야 했다.
  • 이번시간에 다 정리할 것은 아니고, 내가 보았던 header규약에 대한 몇몇만 써보려한다‼️

사이트 참고 : https://developer.mozilla.org/ko/docs/Web/HTTP/Headers

🍎 인증 관련 header

🧃 Authorization 헤더

  • 서버와 함께 유저 에이전트를 인증하기 위한 자격 증명을 포함합니다.

인증 header관련 url: https://velog.io/@city7310/%EB%B0%B1%EC%97%94%EB%93%9C%EA%B0%80-%EC%9D%B4%EC%A0%95%EB%8F%84%EB%8A%94-%ED%95%B4%EC%A4%98%EC%95%BC-%ED%95%A8-5.-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-%EA%B2%B0%EC%A0%95

🍊 Basic 인증 스킴

  • 보통 타입.
  • 사용자명(ID)와 비밀번호(Password)가 콜론을 이용하여 합쳐집니다.(aladdin:opensesame)
  • 그 결과에 대한 문자열을 base64로 인코딩합니다. (YWxhZGRpbjpvcGVuc2VzYW1l)
  • ‼️ base64인코딩은 암호화나 해싱이 아닙니다. Basic인증을 하는 경우 HTTPS로 접속하는 것을 권장합니다.
//사용예시
request.addValue("Basic YWxhZGRpbjpvcGVuc2VzYW1l", forHTTPHeaderField: "Authorization")

🍊 Bearer 인증 스킴 (JWT는 OAuth표준은 아님.)

  • Access Token을 보내는 인증체계.
  • JWT의 경우 비밀키를 가지기에 Basic타입보다 보안상 안전함.
  • 우리 앱 Bobmongus는 Token을 사용하기에, 이 Bearer인증 스킴을 사용할 것으로 보이며, ID, Password가 일치하면, JWT를 서버로부터 받고, 이를 KeyChain에 저장하고, 필요시마다 꺼내서 아래 사용예시처럼 header에 담아 요청을 보낼 것으로 예상된다~!
  • ‼️처음 ID와 Password를 Server로 보낼 때 안전하게 보낼 방법은 생각을 해봐야할듯함~!!⁉️
//사용예시
request.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")

Q. bearer accessToken을 이용하려면 반드시 TLS환경의 HTTPS환경을 이용해야한다는데 뭐징??

🍎 Contents 협상 관련 header

🧃 Accept 헤더

  • 돌려줄 데이터 타입에 대해 서버에 알립니다. MIME 타입입니다.
  • Client가 이해가능한 컨텐츠 타입이 무엇인지를 알려줍니다.
  • 컨텐츠 협상을 이용해, 서버는 제안 중 하나를 선택하고 사용하며 Content-Type 응답 헤더로 클라이언트에게 선택된 타입을 알려줍니다.
//사용예시
//"나(Client)는 응답이 JSON포맷형태로 오길 기대(예상)합니다." the response expected to be in JSON format~!
request.addValue("application/json", forHTTPHeaderField: "Accept")

🍎 Message Body Information관련 header

🧃 Content-Type 헤더

🍊 application/json

  • json 데이터 타입을 칭함.
//사용예시
//"내(Client) 요청은 JSON타입으로 되어있습니다." the request is JSON~!
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

참고. MIMEType vs MediaType ⁉️

참고. setValue() vs addValue() ⁉️

profile
i'm Obsessed with Swift. iOS

0개의 댓글