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 |
클라이언트는 네트워크 액세스를 얻기 위해 인증해야 함 |