web developer

HTTP 정의 / 특징 / 헤더 본문

Language/Java

HTTP 정의 / 특징 / 헤더

trueman 2023. 1. 16. 22:22
728x90
728x90

HTTP 정의


Hypertext 

하이퍼텍스트(Hypertext, 문화어: 초본문, 하이퍼본문)는 참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다.

 

- 즉, 출판된 책처럼 작가의 의도대로 사용자가 따라가는 것이 아닌, 하이퍼링크로 연결된 문서들을 어떠한 행위(클릭)에 따라 자유롭게 이동할 수 있다.

 

- 하이퍼텍스트가 쓰인 기술들 중 가장 중요한 두 가지가 HTML과 HTTP이다.

 

- HTTP는 하나의 프로토콜으로서, 이 통신규약을 이용해서 컴퓨터가 다른 컴퓨터와 메시지를 주고 받을 수 있다. 이 HTTP로 HTML 문서가 전달될 수 있다.

 

HTML (HyperText Markup Language)

태그를 이용해 정보와 문서를 구조적으로 표현하는 웹 문서 작성 기술을 의미한다.

 

- HyperText의 의미는 위와 동일하다.

 

- Markup은 표시하다 는 뜻으로, 제목, 단락, 목록 등 태그를 사용해 구조적 의미를 표현한다. 또한 링크, 인용과 그 밖의 항목으로 구조적 문서를 만들 수 있는 방법을 제공한다.

(예, 특정 상품 표기를 [Apple, iPhone 12]로 할 수 있지만, [Company : Apple, Model : iPhone 12]로 할 수도 있다. Mark Up은 간단히 태그를 달아 놓는 방식이라 할 수 있다.

 

- 결론적으로 태그를 이용해 정보와 문서를 구조적으로 표현하는 웹 문서 작성 기술을 의미한다.

 

Hypertext

Transfer Protocol

통신 장비 간 데이터 교환 방식에 대해 합의한 내용이다.

  • 통신을 원하는 두 개체가 무엇을, 어떻게 통신할 것인가에 대해 약속하고 이를 규칙으로 정의해놓은 것이라 보면 된다. 데이터의 형식(아날로그 or 디지털), 부호화(Unicode, ASCII), 신호 순서, 인증, 오류수정 등을 포함한다.
HTTP는 HyperText를 전송하기 위한 통신 규약을 의미한다.

 

 

HTTP 특징


1. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이다(HTTP는 웹의 중요한 구성 요소이다).

 

2. HTTP는 클라이언트-서버 프로토콜이다.

  • 클라이언트-서버 프로토콜: (보통 웹브라우저인) 클라이언트 요청을 생성하기 위해 연결을 연 다음 응답을 받을 때까지 기다리는 모델, 각각의 요청은 클라이언트에 의해 초기화된다.
  • 이 둘은 데이터 스트림이 아닌 개별적인 메시지 교환을 통해 통신한다.
  • 클라이언트에 의해 전송되는 메시지를 요청(requests)이라 하고, 요청에 대해 서버에서 응답으로 전송하는 메시지를 응답(responses)이라고 한다.

 

3. HTTP는 상태가 없고, 세션이 있다.

  • HTTP는 상태를 저장하지 않는다. (Stateless)
  • 예를 들어, www.sample.com/page1 요청 후 www.sample.com/page2 를 요청하는 경우, 이 둘의 요청은 서로 연관성을 가지지 않고 독립적이다. 즉, page1에서 만들어진 데이터는 page2를 요청할 때 유지되지 않는다.
  • 이는 e-커머스 장바구니처럼, 사용자가 일관된 방식으로 페이지와 상호작용하길 원할 때 문제가 된다. 하지만, HTTP는 상태가 없음에도 HTTP 쿠키를 사용하면 상태를 저장하는 세션을 사용할 수 있다.
  • HTTP 쿠키: 서버가 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재요청 시 저장된 데이터를 함께 전송한다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용하며, 이를 통해 사용자의 로그인 상태를 유지할 수 있다.

 

4. HTTP는 확장 가능하다.

  • HTTP 헤더를 사용하면 HTTP를 확장하기 쉽다. 클라이언트와 서버가 새로운 헤더에 대해 합의한다면, 새로운 기능을 언제든지 추가할 수 있다.

 

HTTP 헤더


클라이언트가 서버로 요청을 할 때 혹은 서버가 클라이언트에 응답할 때 부가적인 정보를 담는 곳이 헤더라는 곳이다. 자바스크립트 객체와 비슷하게 키와 값이 쌍을 이루는 값으로 이루어져 있다. 예를 들어 키에는 Content-Type 라는 키와 값에는 application/json 등이 온다. 이 둘을 콜론으로 구분한다. 최종적으로는 Content-Type: application/json과 같은 꼴이 된다.

 

간단하게 정의하면, HTTP는 Hyper Text Transfer Protocol의 약자이며, 인터넷에서 데이터를 주고받을 수 있는 통신 규약이다.

 

헤더는 문맥에 따라 크게 4가지로 분류할 수 있다.

  • 요청과 응답에 모두 실어나를 수 있는 General Header(공통 헤더) 
  • 클라이언트 자체 정보 등을 담는 Request Header(요청 헤더)
  • 서버의 자체 정보 등을 담는 Response Header(응답 헤더)
  • 컨텐츠 길이 혹은 MIME 타입에 관한 정보를 담는 Entity Header(엔티티 헤더)

 

General Header(공통 헤더)


 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더

 

  • Date : 현재시간
  • Pragma : 캐시제어 , HTTP/1.0에서 쓰던 것으로 HTTP/1.1에서는 Cache-Control이 쓰인다.
  • Cache-Control : 캐시를 제어할 때 사용
  • Upgrade : 프로토콜 변경시 사용
  • Via : 중계(프록시)서버의 이름, 버전, 호스트명
  • Connection : 네트워크 접속을 유지할지 말지 제어. HTTP/1.1은 kepp-alive 로 연결 유지하는게 default 값
  • Transfer-Encoding : 사용자에게 entity를 안전하게 전송하기 위해 사용하는 인코딩 형식을 지정

 

Entity Header(엔티티 헤더)


컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더

 

  • Content-type : 리소스의 media type 명시 ex) application/json, text/html
  • Content-Length : 바이트 단위를 가지는 개체 본문의 크기
  • Content-language : 본문을 이해하는데 가장 적절한 언어
  • Content-location : 반환된 데이터 개체의 실제 위치 ex) /index.html
  • Content-disposition : 응답 메세지를 브라우저가 어떻게 처리할지. 주로 다운로드에 사용
  • Content-Security-Policy : 다른 외부 파일을 불러오는 경우 차단할 리소스와 불러올 리소스 명시
    • ex) default-src https -> https로만 파일을 가져옴
    • ex) default-src 'self' -> 자기 도메인에서만 가져옴
    • ex) default-src 'none' -> 외부파일은 가져올 수 없음
  • Content-Encoding : 본문의 리소스 압축 방식. 주로 Content-Type과 같이 사용되며 참조되는 미디어 타입을 얻도록 디코드하는 방법을 클라이언트가 알게 해줍니다.
  • Location : 301, 302 상태코드일 때만 볼 수 있는 헤더로 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(URI)를 지정
  • Last-Modified : 리소스의 마지막 수정 날짜
  • Allow : 지원되는 HTTP 요청 메소드 ex) GET, HEAD, POST
  • Expires : 자원의 만료 일자
  • ETag : 리소스의 버전을 식별하는 고유한 문자열 검사기(주로 캐시 확인용으로 사용)

 

Request Header(요청 헤더)


 HTTP 요청에서 사용되지만 메시지의 컨텐츠와 관련이 없는 패치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더

  • Host : 요청하려는 서버 호스트 이름과 포트번호
  • User-agent : 클라이언트 프로그램 정보 ex) Mozilla/4.0, Windows NT5.1
  • Referer : 현재 페이지로 연결되는 링크가 있던 이전 웹 페이지의 주소
  • Accept : 클라이언트가 처리 가능한 MIME Type 종류 나열
  • Accept-charset : 클라이언트가 지원가능한 문자열 인코딩 방식
  • Accept-language : 클라이언트가 지원가능한 언어 나열
  • Accept-encoding : 클라이언트가 해석가능한 압축 방식 지정
  • If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 캐시가 만료되었을 때에만 데이터를 전송하는데 사용
  • Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 헤더
  • Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에서 시작되었는지 나타내는 값. 경로 정보는 포함하지 않고 서버 이름만 포함되며, 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 난다.
  • Cookie : 쿠기 값 key-value로 표현된다. Set-Cookie 헤더와 함께 서버로부터 이전에 전송됐던 저장된 HTTP 쿠키를 포함

 

Response Header(응답 헤더)


위치 또는 서버 자체에 대한 정보(이름, 버전)과 같이 응답에 대한 부가적인 정보를 갖는 헤더

  • Server : 웹서버의 종류
  • Age : max-age 시간내에서 얼마나 흘렀는지 초 단위로 알려주는 값
  • Referrer-policy : 서버 referrer 정책을 알려주는 값 ex) origin, no-referrer, unsafe-url
  • WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시, 서버가 제공하는 인증 방식
  • Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값
  • Set-Cookie : 서버측에서 클라이언트에게 세션 쿠키 정보를 설정 (RFC 2965에서 규정)

 

응답 상태코드


  • 100 - 109 : 메시지 정보
  • 200 - 206 : 요청 성공
  • 300 - 305 : 리다이렉션
  • 400 - 415 : 클라이언트 에러
  • 500 - 505 : 서버에러

출처 : https://hazel-developer.tistory.com/145

728x90
728x90