목차
- HTTP 메시지
- HTTP 메서드
- MIME타입
- CORS
배운 내용
HTTP
HTTP(HyperText Transfer Protocol)
- HTML과 같은 문서를 전송하기 위한 Application Layer프로토콜
- 웹 브라우저상에서 클라이언트와 서버간의 통신을 담당
- 클라이언트가 HTTP messages 양식에 맞춰 데이터 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답
- 특정 상태를 유지하지 않는 무상태성(Stateless)
**HTTP messages**
- 클라이언트와 서버 사이에서 데이터가 교환되는 방식
- start line : start line에는 요청이나 응답의 상태를 나타냅니다. 항상 첫 번째 줄에 위치합니다. 응답에서는 status line이라고 부른다.
- HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합입니다.
- empty line : 헤더와 본문을 구분하는 빈 줄이 있습니다.
- body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함합니다. 요청과 응답의 유형에 따라 선택적으로 사용합니다.
- 헤드(head) : 1 +2
- payload : body
**요청(Requests)**
**Start line**
- 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타냄
- 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성
method 마다 다릅니다.
- origin 형식 :
?
와 쿼리 문자열이 붙는 절대 경로입니다. POST, GET, HEAD, OPTIONS 등의 method와 함께 사용합니다.
POST / HTTP 1.1GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1OPTIONS /anypage.html HTTP/1.0
- absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용합니다.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 authority component 입니다. HTTP 터널을 구축하는 경우,
CONNECT
와 함께 사용할 수 있습니다.
CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk 형식 :
OPTIONS
와 함께 별표() 하나로 서버 전체를 표현합니다.
OPTIONS * HTTP/1.1
- HTTP 버전에 따라 HTTP message의 구조가 달라집니다. 따라서 start line에 HTTP 버전을 함께 입력
- 헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값을 입력
- General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더
- Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더
- Representation headers : body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더
**Body**
- GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않다.
- POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용
- Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성
- Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닌다. 보통 HTML form과 관련
**응답(Responses)**
**Status line**
- 응답의 첫줄 , ex)
HTTP/1.1 404 Not Found.
- 현재 프로토콜의 버전(HTTP/1.1)
- 상태 코드 - 요청의 결과를 나타냅니다. (200, 302, 404 등)
- 상태 텍스트 - 상태 코드에 대한 설명
- 요청 헤더와 동일한 구조
- General headers
- Response headers : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더, 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공
- body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더
**Body**
- 201, 204와 같은 상태 코드를 가지는 응답에는 본문이 불필요
- Single-resource bodies(단일-리소스 본문) :
- 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의
- 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이
chunked
로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어있다.
- Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body
**Stateless(무상태성)**
- HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다.
HTTP 요청 메서드
- 클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단
주요 메소드 5가지
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 데이터 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스를 일부만 변경
- DELETE : 리소스 삭제
기타 메서드 4가지
- HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용)
- CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
GET
- 보통 리소스를 조회할 때 사용하며, 서버에 전달하고 싶은 데이터는 query를 통해서 전달
POST
- 데이터 요청을 처리하고, 메시지 바디를 통해 서버로 데이터를 전달한다. 주로 신규 리소스를 등록하거나 프로세스 처리에 사용
PUT
- 리소스가 있으면 대체하고 리소스가 없으면 생성
PATCH
- PUT과 마찬가지로 리소스를 수정할 때 사용하지만, PATCH는 리소스를 일부분만 변경할 수 있다.
DELETE
**HTTP 메소드의 속성**
- 안전(Safe Methods)
- 계속해서 메소드를 호출해도 리소스를 변경하지 않는다 -GET메소드가 안전
- 멱등(Idempotent Methods)
- 메소드를 계속 호출해도 결과가 똑같다
- Get, PUT, DELETE는 멱등 O
- POST나 PATCH는 멱등 X
- 캐시가능(Cacheable Methods)
- 캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻
- GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET과 HEAD만 주로 캐싱이 쓰인다
**HTTP 상태코드**
- 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
- 1xx (Informational): 요청이 수신되어 처리중 → 거의 사용안함
2xx (Successful): 요청 정상 처리
- 200 OK : 요청 성공
- 201 Created : 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
- location 헤더가 있으면 location 위치로 자동 이동하는 것을 리다이렉트라고 한다.
- 301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
- 304 Not Modified : 캐시를 목적으로 사용
- 307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
- 308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
- 403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
- 404 Not Found : 요청 리소스를 찾을 수 없음
5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
- 500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
- 503 Service Unavailable : 서비스 이용 불가
프로토콜 : 통신 규약(약속)
API
- 서버에는 마치 식당에서 메뉴판을 제공하듯, 리소스를 잘 활용할 수 있도록 클라이언트에게 API를 제공해야한다.
- 보통 인터넷에 있는 데이터를 요청할 때에는 HTTP라는 프로토콜을 사용하며, 주소(URL, URI)를 통해 접근
**REST API**
- Representational State Transfer (REST)
- 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
좋은 REST API 디자인을 위한 4단계 모델
0단계
- 단순히 HTTP 프로토콜을 사용하기만 해도 된다.
**1단계**
- 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 한다
- 어떤 리소스를 변화시키는지 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용
- 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다
- 엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성
- 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환
2단계
- CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점
- 응답 코드도명확하게 작성해야 하며, 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있도록 해야한다.
GET
메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용
POST
는 요청마다 새로운 리소스를 생성하고 PUT
은 요청마다 같은 리소스를 반환
- 멱등성(idempotent) : 매 요청마다 같은 리소스를 반환하는 특징 -
Put
메서드
PUT
은 교체, PATCH
는 수정의 용도로 사용
**3단계**
- 응답에 리소스의 URI를 포함한 링크 요소를 삽입하여 작성
- 응답에 들어가게 되는 링크 요소는 응답을 받은 다음에 할 수 있는 다양한 액션들을 위해 많은 하이퍼미디어 컨트롤을 포함
**Open API**
- 공공데이터에 쉽게 접근할 수 있도록 정부는 Open API의 형태로 공공데이터를 제공
- 누구에게나 열려있는 API
- 기관이나 API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항(가격, 정보의 제한 등)이 있을 수 있습니다.
**API Key**
어려운 내용
- 로그인은 보통 Post메서드를 사용, 왜 Get이 아니냐? → GET메서드는 서버에 변화를 주면안되는데, 로그인을 하면 서버내부에 세션을 새로생성하여 정보를 저장하기 때문에
캐시
캐시 / 캐싱이란?
MIME 타입
- MIME( Multipurpose Internet Mail Extensions)
- 데이터 유형을 식별하는데 사용되는 레이블
- 인터넷 미디어 유형(Content-type)은 MIME 유형과 동일
- MIME 유형은 인터넷에서 파일 유형을 분류하는 표준 방식을 형성
- 소프트웨어가 데이터를 처리하는 방법 알 수 있게한다.
- 유형과 하위 유형의 두 부분으로 구성
**MIME 유형의 작동 방식**
- 서버는 HTTP 응답 헤더에 MIME 유형을 삽입한다.
- 클라이언트는 응답이 나타내는 데이터 유형에 적합한 “플레이어” 애플리케이션을 선택한다.
- 이러한 플레이어 중 일부는 웹 클라이언트 또는 브라우저에 내장되어 있다.
작동 예시
- HTTP 응답에 정의된 헤더
Content-Type
값을 사용하여 브라우저는 적절한 확장자 / 플러그인으로 파일을 열 수 있다. 이러한 플레이어 중 일부는 브라우저에 내장되어 있다. (브라우저에는 GIF, JPEG 이미지 플레이어와 HTML 파일 처리 기능이 함께 제공된다.)
- 브라우저는 파일 확장자가 아닌 MIME 유형을 사용하여 URL을 처리하는 방법을 결정한다. 그러므로 웹 서버가 응답
Content-Type
헤더에 올바른 MIME 유형을 전송하는 것이 중요하다. 이것이 올바르게 구성되지 않으면 브라우저가 파일의 내용을 잘못 해석하고 사이트가 제대로 작동하지 않으며, 다운로드한 파일이 잘못 처리 될 수 있다.
자세한 내용은 아래 링크 참조
https://velog.io/@ragnarok_code/MIME이란-무엇인가
https://server-talk.tistory.com/183
cors
[WEB] 📚 CORS 개념 💯 완벽 정리 & 해결 방법 👏
https://it-eldorado.tistory.com/163
참조:https://kyun2da.dev/CS/http-메소드와-상태코드/
https://hanamon.kr/네트워크-mime-유형이란/