고급자바_HTTP 프로토콜

oungoo·2020년 10월 20일
0

JAVA_고급

목록 보기
17/19

HTTP

  • 클라이언트와 서버 사이에 이루어지는 요청/응답(Request/Response) 프로토콜
  • HyperText Transfer Protocol : Hyper Text를 전송하기 위한 프로토콜
  • Hyper Text : 웹문서를 구성하고 있는 언어 HTML
  • 프로토콜 : 상호간에 정의한 규칙. 특정기기 간에 데이터를 주고받기 위해 정의됨

특징

1. Connecetionless

  • 비연결성 프로토콜
  • 클라이언트와 서버가 연결을 맺은 후
    클라이언트 요청에 대해 서버가 응답을 하고나면, 맺고 있었던 연결을 종료시키는 것
  • 잦은 연결/해제에 따른 오버헤드를 줄이고자 HTTP1.1 에서는 KeepAlive 속성 사용 가능
  • KeepAlive : 지정된 시간동안 서버와 클라이언트 사이에 패킷교환이 없는 경우, 상대방의 상태를 확인하기 위해 패킷을 주기적으로 보내고, 이에 대한 응답이 없으면 접속을 종효하는 것

2. Stateless

  • 상태가 없는 프로토콜
  • 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리됨을 의미
    => 이전 데이터의 요청과 다음 데이터 요청이 서로 관련없음
    => 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능상의 이점이 생김

3. TCP/IP, 80

  • 일반적으로 TCP/IP 통신 위에서 동작
  • 기본포트는 80번

과정

1. 접속(Connect)

2. 요청(Request)

3. 응답(Response)

4. 닫기(Close)



메시지 구조

Request

Request Line

HTTP Method / Reqeust Target / HTTP버전
ex) GET /restapi/v1.0 HTTP/1.1

  • HTTP Method
    요청의 의도를 담고 있음 GET/POST
  • Request Target
    HTTP 요청이 전송되는 목표 주소
  • HTTP 버전
    버전에 따라 요청 메시지 구조나 데이터가 다를 수 있어서 버전을 명시함

Header

HTTP 요청 그 자체에 대한 정보를 담고 있음
key:value 로 이루어져 있음

  • 헤더정보
    • Host : 요청이 전송되는 Target의 호스트 url 주소
    • User-Agent : 요청을 보내는 클라이언트의 정보 (ex. 웹브라우저의 정보)
    • Accept
      • 해당 요청이 받을 수 있는 응답 body 데이터 타입의 정보
      • 모든 타입을 허용하는 경우 */*로 지정
      • MIME type : Multipurpose Internet Mail Extensions
        바이너리 데이터인 첨부파일을 아스키 코드로 인코딩하여 본문에 덧붙이겠다는 뜻
        메인타입/서브타입 으로 구성
    • Connection
      • 해당 요청이 끝난 후 클라이언트와 서버간의 연결을 계속 유지할 것인지 끊을 것인지 알려주는 헤더
      • Keep Alive : 네트워크 연결 유지
      • close : 더 이상 요청을 보내지 않으니 연결을 닫아라
    • Content-Type
      • HTTP 요청이 보내는 메시지 body 타입을 알려줌
      • MIME type
    • Content-Length : 요청이 보내는 메시지 body의 총 사이즈 정보

Empty Line

  • 공백(빈줄)
  • Header와 Body를 분리해주는 역할

Body

  • HTTP 요청이 전송하는 실제 데이터를 담고 있는 부분
  • 전송하는 데이터가 없다면 body부분은 비어있음
  • GET 메서드 등의 경우 Body 부분 생략 가능함



Response

Status Line

HTTP 버전 / Status Code / Status Text
ex) HTTP/1.1 200 OK

  • HTTP qjwjs
  • Status Code : 응답 상태를 나타내는 코드 → Status Code
  • Status Text : 응답 상태를 간략하게 글로 설명 → Status Text
  • HTTP 요청 메시지의 헤더와 동일 → Header
  • 단 User-Agent 헤더 대신 Server 헤더가 사용됨

Empty Line

Body

  • HTTP 요청 메시지의 body와 동일
  • 전송하는 데이터가 없으면 비어 있음




상태 Code & Text

100번대 : 정보 응답

  • 요청을 받았으며, 작업을 계속함
  • 요청을 처리중이라는 것을 알려주는 코드

200번대 : 성공 응답

대부분 성공을 의미함

  • 200 OK : 요청에 대한 성공

300번대 : 리다이렉션 메시지

클라이언트가 요청을 마치기 위해 추가 동작을 취해야 함

400번대 : 클라이언트 에러

  • 400 Bad Request : HTTP 요청이 잘못된 요청일 때, 주로 input값이 잘못됐을 때 사용
  • 401 Unauthorized : 인증 실패, 주로 사용자 로그인 필요한 경우 사용
  • 403 Forbidden : 접근 권한이 없음
    ex. 회원만 볼수 있는 페이지를 비회원이 보려고 하는 경우
  • 404 Not Found : 페이지 없음

500번대 : 서버 에러

서버가 요청을 수행하지 못함

  • 500 Internal Server Error : 서버 내부 처리 중 오류 발생







HTTP & HTTPS 차이

HTTP

HyperText Transfer Protocol
하이퍼 텍스트 전송 프로토콜

HTTPS

HyperText Transfer Protocol Secure
하이퍼 텍스트 전송 프로토콜 보안

  • 일반 HTTP 프로토콜의 문제점은 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는 다는 것.
    => 데이터가 쉽게 도난당할 수 있음
  • SSL 인증서 : 데이터 암호화
  • TLS(전송계층보안)프로토콜 : 데이터무결성 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웨사이트와 통신하고 있음을 입증하는 인증 기능 제공

참고

  • http 특징
    https://joshua1988.github.io/web-development/http-part1/
  • 메시지 구조
    https://ychae-leah.tistory.com/82
  • HTTP & HTTPS
    http://blog.wishket.com/http-vs-https-%EC%B0%A8%EC%9D%B4-%EC%95%8C%EB%A9%B4-%EC%82%AC%EC%9D%B4%ED%8A%B8%EC%9D%98-%EB%A0%88%EB%B2%A8%EC%9D%B4-%EB%B3%B4%EC%9D%B8%EB%8B%A4/

0개의 댓글