# http

# HTTP (HyperText Transfer Protocol)

기본 port : 80

2018년 현재 http프로토콜이라고 하면 기본적으로는 1.1을 의미한다.

슬슬 2버전 도입을 준비중인 단계

예전에는 http는 html문서를 주고받는데 많이 사용했다.

요즘은 REST라는 개념이 대세를 이루면서,

다양한 포맷의 데이터를 주고 받는데 사용한다.

https가 이제 거의 기본이 되어가면서, http프로토콜만 단독적으로 사용하진않는다.

REST에서도 소개했지만

http에는 GET, POST, PUT, DELETE 등.. 다양한 메소드들이 있다.

http로 request하면, 서버는 3자리로 된 응답코드와 함께 response한다.

시작 줄(start-line)에는 실행되어야 할 요청, 또은 요청 수행에 대한 성공 또는 실패가 기록되어 있습니다. 이 줄은 항상 한 줄로 끝납니다.

HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 합니다.

옵션으로 HTTP 헤더 세트가 들어갑니다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어갑니다.

요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입됩니다.

그 응답코드를 http status code라고 한다.

응답코드에는 어느정도 규칙이 있는데,

많이 사용하는것만 설명하고 나머지는 링크에서 확인하길 바란다.

https://ko.wikipedia.org/wiki/HTTP_상태_코드

2xx: 성공
200: 서버가 요청을 정상적으로 수행했고, 요청한 페이지를 제공했음을 의미한다.
301: Redirect. 요청한 페이지에서 새로운 페이지로 다시 request한다.
304: Not modified.
 - 문서가 변경되지않음을 알려준다. 바디를 포함하면 안된다.
 - 이것은 헤더 필드 후에 첫 공백라인으로 종료.
 - 304 응답이 캐시되지않았다면, 캐시는 반드시 이 응답을 무시하고 조건없는 요청을 반복해야 한다.
4xx: 주로 클라이언트 에러
400: Bad Request. 클라이언트에서 보낸 데이터가 잘못됐음을 의미한다.
401: Unauthorized. 인증이 필요함을 의미한다.
403: Forbidden. 인가 실패를 의미한다. 권한없음.
404: Not Found. 요청한 페이지를 찾을 수 없다.
500: Interval Server Error. 서버에서 오류발생으로 응답할 수 없음을 의미한다.

# HTTPS

기본 port : 443

쉽게 말하면 브라우저에 등록된 기관의 SSL인증서를 웹서버에 등록하게되면

보안이 강화된 http 프로토콜을 사용할 수 있다.

비대칭키 암호화방식으로 이론상으로는 해킹이 불가능하다.


# HTTP 메시지 (HTTP Message)

# 인바운드, 아웃바운드 (inbound, outbound)

트랜잭션의 방향을 표현하는 용어이다.

서버사이드 기준으로 생각하면 된다.

서버에서 클라는 서버에서 클라로 나가는것이기때문에 아웃바운드.

반대로 클라에서 서버로 들어가기때문에 인바운드다.

# 다운스트림, 업스트림 (downstream, upstream)

stream은 데이터 흐름을 표현하는 용어이다.

데이터 흐름은 HTTP요청과 응답 관계없이 모두 다운스트림이다.

메시지는 결코 업스트림으로 흐르지않는다.

# 메시지 문법

  • 요청

method, request URL, version

  • 응답

version, HTTP status code, reason-phrase

  • 공통

헤더, 본문

reason-phrase: HTTP status code를 간단히 설명해주는 짧은 문구. 사람에게 읽히기 위한 목적으로 존재. (aka OK, Not Found)

headers: Content-type: text/plain과 같은 부가적인 정보를 전송하기위한 선택적 key-value 쌍들.

ref: https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

HTTP 완벽가이드