Front-End/Web & 표준 & ETC

[Network] HTTP Request / Response

Voyage_dev 2022. 2. 27. 16:57

 

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 이때 메시지 타입은 두 가지 Request와 Response가 있다

Request는 클라이언트가 서버로 전달하는 메시지이고 Response는 이러한 Request에 대한 서버의 답변이다

HTTP 메시지는 ASCII 즉, 숫자 0, 1로 인코딩된 텍스트 정보이며 이러한 메시지는 설정파일 (프록시, 서버), API(브라우저 경우) 혹은 다른 기타의 인터페이스에 의해 가공되어 제공한다

출처 : https://deepwelloper.tistory.com/98

 

HTTP Request 구조

Start Line

Start Line에는 HTTP 메소드, Request target, HTTP version이 있다

HTTP Method - 요청시 보내는 HTTP 메소드 형태이며 요청의 의도를 담고 있는 GET, POST, PUT, DELETE 등이 있다. GET은 존재하는 자원에 대한 요청, POST는 새로운 자원을 생성, PUT은 존재하는 자원에 대한 변경, DELETE는 존재하는 자원에 대한 삭제와 같은 기능을 가지고 있다

Request Target - 어디에 보내는지에 대한 URI / HTTP Reques가 전송되는 목표 주소

HTTP version - version에 따라 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시

 

Header

Header에는 HTTP Request 그 자체에 대한 정보를 담고있다. key : value 형태로 이주어져 있다

Host : 요청하려는 서버 호스트 이름과 포트번호 (URL)

User-agent : 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다 (클라이언트 정보)

Referer : 바로 직전에 머물렀던 웹 링크 주소

Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열 (서버에서 해당 타입에 데이터를 보내달라고 요청)

If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.

Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header

Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.

Cookie : 쿠키 값이 key-value로 표현된다.

 

Body

HTTP Request 가 전송하는 데이터를 담고있다. 전송하는 데이터가 없으면 Body 부분은 비어있다

보통 POST 요청일 경우, HTML 폼 데이터가 포함되어있다

 

정리

  • 요청 라인 : GET / HTTP/1.1
    • 요청 메소드 : GET, POST, PUT, DELETE
    • 요청 URL
    • HTTP 버전
  • 요청 헤더 : 키-값 방식으로 들어감
  • 요청 바디(엔티티)

 

 

HTTP Response

HTTP Request가 요청한 요청의 Response의 구조

비슷하지만 담겨오는 정보가 약가 다르다

 

Start Line

Response의 Start Line에는 HTTP version, Status Code, Status Text가 있다

Status Code - Response 상태를 나타내는 코드. 요청 정상 처리를 나타내는 200이나 페이지가 이동되거나 없어졌을 때를 나타내는 404와 같은 코드로 응답한다

Status Text - Response 상태를 간략하게 글로 설명해 준다

 

Header

  • Date - 응답 온 시간과 날짜이다
  • Content-Type - 응답 데이터의 타입
  • Cache-Control - 캐시용 헤더

 

Body

요청에 대한 응답 값

HTTP Request Body와 동일하며 전송하는 데이터가 없으면 비어있다

 

 

Status Code +

  • 1xx : 정보
  • 2xx : 성공
    • 200 : OK. 요청 성공
    • 201 : Created. 생성 요청 성공
    • 202 : Accepted. 요청 수락(처리 보장X)
    • 204 : 성공했으나 돌려줄게 없음
  • 3xx : 리다이렉션
    • 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록
    • 301,302,303 : Redirect. 리소스 위치가 변경된 상태
    • 304 : Not Modified. 리소스가 수정되지 않았음
  • 4xx : 클라이언트 오류
    • 400 : Bad Request. 요청 오류
    • 401 : Unauthorized. 권한없음
    • 403 : Forbidden. 요청 거부
    • 404 : Not Found. 리소스가 없는 상태
  • 5xx : 서버 오류
    • 500 : Internal Server Error. 서버가 요청을 처리 못함
    • 501 : Not Implemented. 서버가 지원하지 않는 요청
    • 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태

 

정리

  • 응답 라인
    • 버전
    • 상태 코드
    • 상태 메세지 : HTTP/1.1 200 OK
  • 응답 헤더
    • Content-Type : 바디 데이터의 타입
    • Content-Length : 바디 데이터 크기
    • Set-Cookie : 쿠키 설정
    • ETag : 엔티티 태그
  • 응답 바디 : HTML, JSON, Octet Stream 등이 있다.

 

출처 : 아래의 사이트들을 보면서 큰 공부 하였습니다

https://ohcodingdiary.tistory.com/5

https://programmer93.tistory.com/60

https://sjh836.tistory.com/81