본문 바로가기

42cursus

http 정리

HTTP 란

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

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

 - 클라이언트-서버 프로토콜

 

HTTP 흐름

1. TCP 연결 (3 handshake)

2. 클라이언트가 서버에 http 메세지 전송 (Request)

3. 서버에 의해 전송된 응답(Response)을 클라이언트가 읽음

4. 연결을 닫거나, 다른 요청을 위해 재사용

 

HTTP 메시지

 - 요청(Request) 예시

출처: MDN HTTP

 

 - 응답(Response) 예시

출처: MDN HTTP

 

 - 요청(Request)과 응답(Response)의 구조는 서로 닮음

출처: MDN HTTP

 

HTTP 요청

 - 시작 줄, 헤더, 본문으로 이루어짐

  -> 각 줄은 캐리지 리턴(0x0D, \r, CR) + 라인피드(0x0A, \n, LF)으로 문자열을 마무리

  -> 그냥 줄바꿈도 받는 것이 권장사항이긴 함

요청

POST /index.html HTTP/1.1[CRLF]
Accept: text/* [CRLF]
Host: localhost[CRLF]
[CRLF]
...body...[CRLF]

 - 시작줄 

  -> [메소드] [타겟] [HTTP버전]

 - 헤더

  -> [헤더타입]: [헤더 값]

- 본문

  -> 모든 요청이 본문이 있는 것은 아님 (GET, HEAD, DELETE, OPTIONS같은 경우 본문이 보통 필요없음)

  -> POST 요청일 경우 서버에 데이터를 본문에 담아 전송함

 

HTTP 응답

 - 상태 줄, 헤더, 본문으로 이루어짐

  -> 각 줄은 캐리지 리턴(0x0D, \r, CR) + 라인피드(0x0A, \n, LF)으로 문자열을 마무리

  -> 그냥 줄바꿈도 받는 것이 권장사항이긴 함

응답

HTTP/1.1 200 OK[CRLF]
Content-type: text/plain[CRLF]
Content-length: 100[CRLF]
[CRLF]
HelloWorld[CRLF]

 - 상태 줄

  -> [프로토콜 버전] [상태 코드] [상태 텍스트]

 - 헤더

  -> [헤더타입]: [헤더 값]

 - 본문

  -> 요청과 마찬가지로 모든 응답에 본문이 있는 것은 아님 (201, 204같은 경우는 보통 본문이 없다고 함)

 

메서드

메서드 설명 본문이 있는가
GET 서버에서 어떤 문서를 가져옴 없음
HEAD 서버에서 어떤 문서에 대해 헤더만 가져옴 없음
POST 서버가 처리해야 할 데이터를 보냄 있음
PUT 서버에 요청 메시지의 본문을 저장함 있음
TRACE 메시지가 프락시를 거쳐 서버에 도달하는 과정 추적 없음
OPTIONS 서버가 어떤 메서드를 수행할 수 있는지 확인 없음
DELETE 서버에서 문서를 제거 없음

안전한 메서드 (GET, HEAD)

 - HTTP요청의 결과로 서버에 어떤 작용도 없음

GET

 - 가장 많이 쓰임

 - 서버에게 리소스를 달라고 요청

 - 원하는 리소스는 시작줄-타켓에 들어옴

 -> Content-Type, Content-Length필요 + 엔터티본문에 내용을 담아 응답

HEAD

 - GET의 요청에서 엔터티본문을 뺀 것

 - 리소스없이 타입, 존재확인, 변경확인 등 체크가능

 -> GET에서 엔터티 뺌

PUT

 - GET 메서드가 서버로부터 문서를 읽어 들이는데 반해, PUT은 서버에 문서를 씀

 - 웹 콘텐츠를 수정하므로 사용자에게 로그인을 요구

 - 시작줄-타겟에 엔터티내용을 씀

 -> 생성된 리소스의 정보 Location, 그 리소스에 접근할 수 있는 URL를 엔터티본문에 담아 응답 (Content-Type, Content-Length필요)

POST

 - 서버에 입력 데이터를 전송하기 위해 사용 (폼 데이터)

 - 입력데이터는 엔터티에..

 -> form의 결과를 담은 것을 엔터티에 담아 응답

TRACE

 - 자신의 요청이 서버에 도달했을 때 어떻게 보이는지 알려줌 (진단용)

OPTIONS

 - 웹 서버에게 여러가지 종류의 지원 범위를 물어봄 (특정 리소스에 대한 메서드를 지원하는지)

DELETE

 - 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청

 - 시작줄-타켓의 리소스를 삭제 요청

 -> 상세 설명을 엔터티에 담아 응답

 

상태 코드

전체 범위 정의된 범위 분류
100-199 100-101 정보
200-299 200-206 성공
300-399 300-305 리다이렉션
400-499 400-415 클라이언트 에러
500-599 500-505 서버 에러

 

 

헤더

일반 헤더 - 요청과 응답 양쪽에 모두 나타날 수 있는 헤더

요청 헤더 - 요청에 대한 부가 정보를 제공하는 헤더

응답 헤더 - 응답에 대한 부가 정보를 제공하는 헤더

Entity 헤더 - 본문 크기와 콘텐츠, 리소스 그 자체를 서술

확장 헤더 - 명세에 정의되지 않은 새로운 헤더