HTTP

corncheese·2023년 6월 28일
0

HTTP란?

TCP/IP 4계층에서 애플리케이션에 해당하는 프로토콜로서, 전송 계층에서 TCP를 사용하여 웹 브라우저와 웹 서버간에 통신하는 프로토콜이다.

특징

  1. 무연결(Connectionless)
    HTTP는 연결을 유지하지 않은 상태로 데이터를 주고 받을 수 있다. HTTP는 클라이언트로부터 요청이 들어와 서버가 응답하면 클라이언트와 서버의 연결을 끊고, 클라이언트가 새로 요청하면 또 다른 연결을 맺는다.

  2. 무상태(Stateless)
    HTTP는 무연결 특징이 있어서 요청이 있을 때마다 독립적인 트랜잭션으로 취급하기 때문에 이전 연결에서 작업했던 내용을 다음 요청에서 그대로 사용할 수 없다. 이처럼 요청마다 서로 다른 연결로 인식되어 요청 간에 정보를 공유해서 사용할 수 없는 상태로 즉, 상태정보가 유지되지 않는 특성을 무상태(Stateless)라고 한다.
    그래서 이전 연결의 상태전보를 계속 사용하고 싶다면, 서버나 클라이언트 측에 정보를 저장해두고 사용해야 한다.

  3. 요청/응답 (Request/Response)
    클라이언트가 서비스를 요청하면 서버는 요청 정보를 받고 요청을 처리한 후에 응답하여 통신이 이루어진다.

HTTP 요청 정보

HTTP의 요청정보는 헤더와 바디로 구성되며,
헤더의 가장 첫 번째 줄은 Request-Line 으로 요청방식, 요청한 페이지에 대한 정보인 URI, 요청 시 사용한 HTTP버전 정보가 들어간다.
Request-Line 이후 공백 행이 삽입되며 다음 줄부터 헤더 정보이다.
헤더 정보는 name : content 형식으로 정보가 들어가며, 서비스 처리를 위한 웹 클라이언트와 웹서버간의 공유할 정보들이다.
헤더 정보가 끝난 뒤에는 웹 클라이언트가 웹서버에 보내는 데이터가 바디에 구성된다.

HTTP 요청방식

  1. GET
    웹서버에 GET방식으로 서비스를 요청하는 경우는 URL을 직접 입력하거나, 하이퍼링크가 포함된 개체를 클릭할때 이다. 또는 직접 GET방식을 지정하여 서비스를 요청할 수 있다.
    GET방식의 요청은 캐시(cache)가 가능하며, 클라이언트가 서버로 전송하는 문자열이 있을 때는 요청정보 헤더에 요청 줄에 포함되는 URI 뒤에 ? 기호화 함께 추가되어 전달된다. -> 클라이언트에서 서버로 보내는 문자열 정보들이 웹 브라우저에 노출되는 특징이 있다.

  2. POST
    POST방식은 데이터가 HTTP 요청정보의 바디에 포함되어 전달된다. 따라서 데이터 크기에 제한이 없고, 화면에 노출되지 않는다. POST 방식은 주로 서버 측의 정보를 새로 생성하는 작업에 사용된다.

  3. PUT
    PUT 방식의 서비스 요청은 서버의 리소스를 수정할 때(UPDATE) 사용한다.

  4. DELETE
    서버의 리소스를 삭제하는 작업을 요청할 때 사용하는 방식.

요청 URI

요청 URI는 웹 클라이언트가 웹서버에 요청한 서비스 문서의 정보이다. 요청 URI는 네트워크의 자원정보인 URL의 일부이며,
URI는 프로토콜 / 서버주소 / 포트번호 / 서버자원정보(Request-URI) 형식을 갖고 있다.

  • 프로토콜
    프토콜은 서버와 통신하기 위한 규약으로서 서버마다 사용하는 프로토콜이 정해져 있다.예를 들어, 웹서버는 URL에 HTTP:// 로 표현하며, 오라클 DBMS는 jdbc:oracle:thin:@으로 표현한다.
  • 서버 주소
    네트워크상에서 연결된 컴퓨터를 찾아가기 위한 정보로서 IP주소 또는 도메인 이름으로 표현한다.
  • 포트 번호
    URL에서 서버 주소를 이용해 컴퓨터를 찾았다면, 포트 번호는 컴퓨터에서 동작하고 있는 서버로 접속하기 위한 정보이다.
    포트 번호는 0~65,535번까지 사용할 수 있으며, 0~1,023사이의 번호는 well-known port로서 이미 사용이 정의되어 있다.
  • URI
    URI는 서버에서 서비스하는 서버의 자원 정보이다.

헤더

헤더는 name : content 형식으로 정보가 표현되며, content 부분의 값들은 공백이나 탭으로 구분된다.

요청정보의 헤더 필드

  • Accept : text/html, application/xhtml_xml 등
    클라이언트가 인식하여 처리할 수 있는 파일 타입을 명시한다.
  • Accept-Encoding : gzip, deflate, sdch
    compress 또는 gzip과 같은 웹 클라이언트가 받아들일 수 있는 인코딩 방식을 지정한다. 여러 개의 인코딩 방식을 쉼표(,)로 구분하여 나열한다. 인코딩 형태를 지정하지 않으면 클라이언트에 어떤 형태도 받아들여지지 않는다.
  • Accept-Language : ko-KR, kp:q=0.8
    클라이언트가 지원하는 언어를 지정한다.
  • User-Agent:
    클라이언트가 사용하는 웹 브라우저에 대한 정보를 보여준다. 서버 쪽에서는 User-Agent 정보를 보고 일반 웹페이지와 모바일 웹페이지로 자동 분기한다.
  • Cache-Control : no-cache, no-store, max-age
    HTTP 캐시는 클라이언트가 서버에 요청하여 응답받은 서비스 결과를 클라이언트 쪽에 저장했다가 사용자로부터 같은 서비스 요청이 들어오면 이전에 저장된 처리결과를 보여주는 것이다.
    no-cache : 캐시 안함
    no-store : 신속히 넘긴 후 정보 제거
    max-age=seconds : 지정된 시간보다 오래된 데이터는 캐시 안 함.
    max-stale=seconds : 지정된 시간이 아직 되지 않은 만료된 데이터를 보냄.
    min-fresh=seconds : 지정된 시간 이후의 변경된 새로운 데이터만 보냄.
    only-if-cached : 새로운 데이터를 검색하지 않고 캐시에 있는 데이터만 반환

HTTP 응답정보

HTTP 응답정보는 응답 상태 라인, 헤더, 바디로 구성되며
응답정보의 상태 라인은
HTTP 버전(서버가 응답하기 위해 사용하는 버전 정보), 상태 코드(Statu-Code), 상태 코드 설명(Reason-Phrase)로 구성되어 있다.

상태 코드

상태 코드는 클라이언트의 요청에 대한 처리 결과를 의미한다.

  1. 1XX : 조건부 응답

  2. 2XX : 성공

  • 200 ok
    클라이언트의 요청을 성공적으로 처리했음을 의미, 서버는 요청한 데이터를 포함하여 응답한다.
  1. 3XX : 리다이렉션 완료

  2. 4XX : 요청 오류

  • 400 Bad Request
    클라이언트의 요청에 문법적인 오류 등 잘못된 요청으로 서버가 요청을 해석할 수 없는 경우
  • 401 Unauthorized
    인증오류로서 클라이언트가 잘못된 인증 정보를 Authorization 헤더에 넣었음을 나타낸다.
  • 403 Forbidden
    사용자 권한 오류로서 클라이언트의 인증 정보에 상관없이 페이지에 대한 접근을 거부한다.
  • 404 Not Found
    클라이언트가 요청한 문서가 존재하지 않음을 의미한다. 클라이언트 요청에 대하여 서비스하는 요청 URI를 서버가 찾지 못한 경우이다.
  • 405 Method Not Allowed
    클라이언트가 요청한 서비스 요청방식을 웹서버에서 지원하지 않음을 의미한다. 이런 경우는 요청한 서비스 요청방식을 확인한 후 서버 프로그램에서 해당 요청방식 처리 메소드가 구현되었는지 확인
  1. 5XX : 서버 오류
  • 500 Internal Server Error
    서버 프로그램 실행시 오류가 발생하여 서버 프로그램이 실행을 멈추었거나 올바르지 않은 응답 헤더 정보가 설정되었을 때 발생한다.

헤더

응답 상태 라인 다음줄에 위치하며, 클라이언트 서비스 요청에 대한 실행 결과를 웹 클라이언트가 올바르게 처리할 수 있게 하기 위한 정보들로 구성된다.

요청정보의 헤더 필드

  • Cache-Control : public, private, no-cache, no-transform, must-revalidate, proxy-revalidate
    HTTP1.1 버전에서 지원하는 헤더로서 응답 결과를 캐시에 저장할지에 대한 내용을 나타낸다.
    public : 어떠한 캐시라도 캐시할 수 있음
    private : 공유된 캐시는 캐시하지 않음
    no-cache : 캐시하지 않음
    no-transform : 데이터를 변환하지 않음
    must-revalidate : 클라이언트는 데이터를 재확인해야 함
    proxy-revalidate : 개인적인 클라이언트 캐시를 제외하고 데이터를 재확인 해야 함.
  • Connection
    연결을 위해 지정하는 정보로서 close연결은 클라이언트나 서버 둘 중 하나가 연결을 해제하기 원한다는 것을 알린다.
  • Content-Encoding
    메세지를 전송할 때 사용할 인코딩 체계를 지정
  • Content-type : text/html; charset=UTF-8
    클라이언트가 요청한 메시지의 데이터 포맷으로서 서버도 같은 데이터 타입으로 처리하여 응답해야 한다.
  • Date
    웹서버가 클라이언트에 응답한 날짜와 시간을 표시한다.
  • Server
    클라이언트의 서비스 요청을 받아서 서비스를 처리한 서버의 이름과 버전 정보를 나타낸다.

0개의 댓글