HTTP

2023. 2. 1. 17:33프로그래밍/ETC

HTTP

HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜

웹에서 이루어지는 모든 데이터 교환의 기초


HTTP Method

수행할 작업의 종류를 나타내기 위해 서버에 보내는 메시지

브라우저와 서버 간의 더욱 풍부한 통신이 가능함

  • GET: 데이터를 서버로부터 받아올 때 사용
  • POST: 일반적으로 무언가를 생성하기 위해 서버에 데이터 블록을 수락하도록 요청함
  • PUT: 데이터 업데이트 시 사용
  • DELETE: 데이터를 서버에서 삭제 시 사용

 

GET Method

URL 매개변수를 사용해 서버에 데이터를 요청함

웹에서 가장 일반적으로 사용되는 HTTP Method

GET 요청 매개변수는 이름-값 쌍으로 형식이 지정됨

www.google.com/search?q=nodejs

가능

  • 서버에서 데이터 검색하기
  • 길이 제한이 있는 서버로 데이터 보내기
  • 브라우저 기록에 남기기
  • 캐시에 저장하기

 

불가능

  • 민감한 데이터 처리
  • 서버에서 데이터 수정하기

 

POST Method

리소스를 변경하기 위해 서버에 데이터를 보냄

사용자가 볼 수 없는 요청 본문으로 전송됨

POST /posts/1 HTTP/1.1

가능

  • 서버에서 데이터 수정하기
  • 민감한 데이터 처리
  • 길이 제한 없이 데이터 보내기

 

불가능

  • 캐시에 저장하기
  • 브라우저 기록에 남기기

 

PUT Method vs PATCH Method

공통점

  • 데이터 수정을 위해 사용함

 

차이점

  • PUT: 데이터 전체 교체, 데이터 교체 시 모든 필드 필요
  • PATCH: 데이터 부분 교체, 데이터 교체 시 일부 필드 필요

HTTP Request 구조

Starter line

  • http method 종류
  • request target (url)
  • http version

 

Headers

  • Key:Value 값
  • 해당 request에 대한 추가 정보

 

Body

  • 해당 request가 전송하는 데이터
  • 데이터가 없을 경우 비어있음

 

Request Header 값 설명
Host 요청하려는 서버 호스트 이름, 포트 번호
User-agent 클라이언트 프로그램 정보
Referer 바로 직전에 머물렀던 웹 링크 주소
Accept 클라이언트가 처리 가능한 미디어 타입 종류 나열
If-Modified-Since 여기에 쓰인 시간 이후로 변경된 리소스 취득
페이지가 수정되었을 경우 최신 페이지로 교체
Authorization 인증 토큰을 서버로 보낼 때 사용되는 Header
Origin 서버로 Post 요청을 보낼 때 요청이 어느 주소에서 시작되었는지 나타내는 값
이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러 발생
Cookie 쿠키 값, key-value로 표현됨
Set-Cookie 헤더와 함께 서버로부터 이전에 전송되었던 저장된 HTTP 쿠키를 포함함

 

HTTP Response 구조

Status line

  • HTTP version
  • Status Code
  • Status Text

 

Headers

  • Key:Value 값
  • 해당 response에 대한 추가 정보

 

Body

  • 해당 response가 전송하는 데이터
  • 데이터가 없을 경우 비어있음

 

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

HTTP Status Codes

브라우저 요청에 따라 서버에서 반환되는 코드

 

100 - 199 (정보 코드)

요청에 대한 정보 메시지를 반환하는 상태 코드

번호 의미 설명
100 Continue Server는 요청 헤더를 수신했으며
클라이언트가 요청 본문을 보낼 수 있도록  함
101 Switching Protocols 요청자가 프로토콜의 서버 전환을 요청함
103 Checkpoin 중단된 PUT / POST 요청을 재개할 수 있는 요청 옵션을 표시함

 

200 - 299 (성공 코드)

성공적인 요청을 나타내는 상태 코드

번호 의미 설명
200 OK 성공적인 HTTP 요청에 대한 표준 응답
201 Created 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성됨
이 응답은 일반적으로 POST 요청 / 일부 PUT 요청 이후에 따라옴
202 Accepted 요청은 처리를 위해 수락되지만 완료되지는 않음
203 Non-Authoritative
Information
요청이 성공했지만 다른 소스에서 정보를 반환함
204 No Content 반환된 컨텐츠 없이 요청이 성공함
205 Reset Content 요청은 반환된 컨텐츠 없이 성공했으며
요청자가 문서를 새로 고칠 것을 요구함
206 Partial Content 요청자가 보낸 범위 헤더로 인해 서버가 리소스의 일부만 반환하고 있음

 

300 - 399 (리다이렉션 코드)

리다이렉션과 관련된 알림인 상태 코드

번호 의미 설명
300 Multiple Choices 사용자가 링크를 선택하고 해당 위치로 이동할 수 있는 링크 목록을 표시함
301 Moved Permanently 요청한 리소스의 URI가 변경되었음을 의미함
새로운 URI가 응답에서 주어질 수도 있음
302 Found 요청한 페이지가 일시적으로 새로운 URL로 이동됨
303 See Other 요청한 페이지는 다른 URL에서 찾을 수 있음
304 Not Modified 요청된 페이지는 마지막 요청 이후 수정되지 않았음
307 Temporary Redirect 요청한 페이지가 일시적으로 새로운 URL로 이동됨
308 Resume Incomplete 중단된 PUT / POST 요청을 재개할 수 있는 요청에 사용됨

 

400 - 499 (클라이언트 오류 코드)

클라이언트로 인해 발생한 오류를 나타내는 상태 코드

번호 의미 설명
400 Bad Request 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음
401 Unauthorized 요청은 유효하지만 서버가 응답하지 않음
일반적으로 실패한 인증에 사용됨
403 Forbidden 클라이언트가 컨텐츠에 접근할 권리를 가지고 있지 않음
승인이 되지 않아 거절을 보냄
401과 다른 점은 서버가 클라이언트가 누구인지 알고 있다는 것
404 Not Found 요청한 페이지를 서버에서 찾을 수 없음
405 Method Not Allowed 요청한 메서드가 페이지에서 지원되지 않음
406 Not Acceptable 서버가 클라이언트가 수락하지 않은 응답을 생성함
407 Proxy Authentication 클라이언트는 요청하기 전에 프록시로 인증해야 함
408 Request Timeout 서버가 요청을 기다리는 시간이 초과됨
409 Conflict 요청이 현재 서버의 상태와 충돌됨
410 Gone 요청한 페이지를 더 이상 사용할 수 없음
411 Length Required "Content-Length"가 정의되지 않음
서버는 그것 없이는 요청을 수락하지 않음
412 Precondition Failed 서버에서 요청의 전제 조건 결과가 거짓임
413 Request Entity
Too Large
요청 엔티티가 너무 커서 서버가 요청을 수락하지 않음
414 Request-URI
Too Long
URL이 너무 길어서 서버가 요청을 수락하지 않음
POST 요청이 긴 쿼리를 유발하는 GET 요청으로 변환될 경우 발생할 수 있음
415 Unsupported
Media Type
지원되지 않는 미디어 유형으로 인해 서버가 요청을 수락하지 않음
416 Requested Range
Not Satisfiable
요청자가 서버에서 제공할 수 없는 파일의 일부를 서버에 요청했음
417 Expectation Failed 서버가 예상한 요청 헤더 필드의 요구 사항을 충족할 수 없음

 

500 - 599 (서버 오류 코드)

서버에서 오류가 발생했음을 나타내는 상태 코드

번호 의미 설명
500 Internal Server Error 특정 오류 메시지를 사용할 수 없을 때 표시되는 일반 오류 메시지
501 Not Implemented 서버가 요청 방법을 인식하지 못하거나 요청을 완료할 수 없음
502 Bad Gateway 서버가 게이트웨이 또는 프록시 역할을 하고
업스트림 서버에서 잘못된 응답을 받음
503 Service Unavailable 서버가 요청을 처리할 준비가 되지 않았음
일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 경우임
504 Gateway Timeout 서버가 게이트웨이 또는 프록시 역할을 하고
업스트림 서버에서 제 때에 응답을 받지 못함
505 HTTP Version
Not Supported
서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않음
511 Network Authentication
Required
클라이언트는 네트워크 액세스를 얻기 위해 인증해야 함