HTTP란?
HTTP의 요청과 응답 메세지
들어가기전에 URL를 간단하게 짚고 넘어가지
URL(Uniform Resource Locators)는 서버에 자원을 요청하기 위해 입력하는 영문으로 된 주소이다.
URL의 구조
이미지 출처 : joshua1988
요청(Request)
클라이언트가 서버에게 연락하는 것을 말한다.
*웹에서 클라이언트는 브라우저를 의미한다.
요청 메소드
URL을 이용하여 서버에 특정 데이터 요청이 가능하다. 여기서 요청하는 데이터에 특정 동작을 수행하고 싶으면 HTTP 요청 메소드를 이용하는 것이다.
- GET : 존재하는 데이터를 받아오는 요청
- POST : 새로운 데이터를 생성하는 요청
- PUT : 존재하는 데이터를 수정하는 요청
- DELETE : 존재하는 데이터를 삭제하는 요청
- Host : 요청이 전송되는 타겟의 호스트 URL 주소
- User-Agent : 요청을 보내는 클라이언트의 정보
- Accept : 클라이언트가 받을 수 있는 컨텐츠
- Connection : 해당 요청이 끝난 후에 클라이언트와 서버간의 연결 유지 여부를 알려주는 헤더
- Coolkie : 클라이언트 로컬에 저장되는 작은 데이터 파일
- Content-Type : 보내는 메세지 Body Type
- Content-Length : 보내는 메세지 Body Length
- If-Modified-Since : 특정 날짜 이후에 변경 됐을 때에 대한 조건
- form 형태, JSON 형태(application/json), multipart 형태(이진 파일) 등이 있다.
요청 Body(Entity)
- 전송하는 데이터를 담고있는 곳
- 전송하는 데이터가 없다면 바디 부분은 비어있다
const http = require("http");
const server = http.createServer((req, res) => {
res.statusCode = 200
res.writeHead(statusCode, { 'Content-Type': 'text/html;charset=utf-8' });
res.end("Hello, World!")
});
server.listen(8080, () => {
console.log('대기상태');
});
응답(Response)
서버가 요청에 대한 답변을 클라이언트에게 보내는 것을 말한다.
- Content-Type
- Content-Length
- Set-Cookie : 쿠키 설정
- ETag : Entity Tag
Content-Type
- text/plain, text/html
- application/xml, application/json
- image/png, image/jpg
- audio/mp3, video/mp4 등...
출처: https://sjh836.tistory.com/81 [빨간색코딩]
응답 Body
- HTML, JSON, Octet Stream 등이 있다.
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
1XX (조건부 응답, 정보)
요청을 받았으며 작업을 계속한다.
2XX (성공)
클라이언트가 요청한 동작을 수신했고 수락했으며 성공적으로 처리했다는 것을 나타낸다.
- 200 : OK. 요청 성공
- 201 : Created. 생성 요청 성공
- 202 : Accepted. 요청 수락(처리는 보장되지 않는다)
- 204 : No Centent. 성공했으나 응답 본문 데이터가 없다.
- 205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고한다.
- 206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환한다.
3XX (Re-Direction)
클라이언트는 요청을 마치기 위해 추가 동작을 취해야한다.
- 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록
- 301 : Moved Permanently. 요청한 자원의 URI이 변경되었거나 새 URI에 존재 하는 경우
- 302 : Found. 요청한 자원의 URI가 일시적으로 변경되었음을 말한다.
- 303 : See Other. 요청한 자원을 다른 URI에서 GET요청을 통해 얻어아 할 때 보내는 응답
- 304 : Not Modified. 캐시 목적으로 사용되며, 응답이 수정되지 않았음을 알려준다.
4XX (요청 오류)
클라이언트에 오류가 있음을 나타낸다.
- 400 : Bad Request. 잘못된 요청
- 401 : Unauthorized. 권한 없이 요청하는 경우, Authorization 헤더가 잘못 된 경우
- 403 : Forbidden. 서버에서 해당 자원에 대한 접근 금지(요청 거부)
- 404 : Not Found. 요청받은 자원을 찾을 수 없는 경우
- 405 : Method Not Allowed. 허용되지 않은 요청 메소드
- 409 : Conflict. 현재 서버와 충돌 될 때 발생 (파일 업로드 시 버전 충돌 등)
5XX (서버 오류)
서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
- 500 : Internal Server Error. 서버에 문제가 있는데 정확한 문제를 설명 할 수 없음
- 501 : Not Implemented. 서버가 지원하지 않는 요청
- 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태
참고 자료 및 사이트 (감사합니다)
https://joshua1988.github.io/web-development/http-part1/
https://sjh836.tistory.com/81
https://jeonghwan-kim.github.io/series/2018/12/02/node-web-2_http.html
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80