1. HTTP란?
HTTP(HyperText Transfer Protocol)는 W3 상에서 정보를 주고받을 수 있는 프로토콜입니다.
주로 HTML 문서를 주고받는 데에 쓰입니다. 주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용합니다.
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/reponse) 프로토콜입니다.
2. HTTP와 HTTPS
- HTTP
- 인터넷에서 사용자가 웹 애플리케이션 서비스를 요청하고 웹서버는 사용자로부터 요청 받은 해당 서비스를 제공해주는 과정을 원할하게 수행하기 위한 제반 요건을 표준화한 프로토콜을 의미합니다.
- HTTPS
- HTTPS(HyperText Transfer Protocol Secure)은 HTTP의 보안이 강화된 버전의 프로토콜입니다.
- 소켓 통신에서 일반 텍스트를 이용하는 대신 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화합니다.
3. HTTP 헤더와 바디의 구조
- HTTP 헤더 (Header)
- HTTP 헤더는 HTTP 바디 및 요청/응답에 대한 정보를 포함합니다.
- 본문에 대한 정보는 본문 컨텐츠 길이 등 본문 컨텐츠와 관련이 있습니다.
- HTTP 헤더 유형
- 일반 헤더
- 전송되는 HTTP 본문 컨텐츠와 관련 없고, 요청/응답이 생성된 날짜 및 시간 등과 같은 HTTP 통신에 대한 일반적인 정보가 포함됩니다.
- 요청/응답 헤더
- 서버에 요청하면 요청 헤더가 있고 서버가 클라이언트/브라우저로 응답을 다시 보낼 때 응답 헤더가 있습니다.
- 요청 헤더는 요청한 URL, 메소드(GET, POST, HEAD), 요청 생성에 사용된 브라우저 및 기타 정보와 같은 요청에 대한 정보가 포함됩니다.
- 엔티티 헤더
- 실제 메시지 또는 전송 중인 HTTP 본문에 대한 정보가 포함됩니다.
- 컨텐츠 길이, 컨텐츠 언어, 인코딩, 만료 날짜 및 기타 중요한 정보와 같은 정보
- 일반 헤더
- HTTP 바디 (Body)
- 가져올 실제 데이터 컨텐츠와 메시지 본문이 나타납니다.
- 바디에는 HTML 코드, 이미지, CSS 스타일 시트, JavaScript 파일 등이 포함됩니다.
4. HTTP Method
HTTP method는 서버가 수행해야 할 동작을 지정하여 요청을 보내는 방법입니다.
HTTP method를 왜 사용?
- 리소스와 동작을 분리하기 위해
- HTTP method를 통해 서버가 수행해야 할 동작을 지정하면, URL은 리소스만 식별하면 되기 때문
- HTTP Method의 종류
- GET : 리소스를 조회
- POST : 데이터 추가, 등록
- PUT : 리소스 대체, 수정 / 해당 리소스가 없으면 새롭게 생성
- DELETE : 리소스 삭제
- PATCH : 리소스 부분 변경 (수정)
- HEAD : GET과 동일하나 HTTP 메시지의 BODY 부분을 제외하고 조회
- OPTIONS : 서버와 브라우저가 통신하기 위한 통신 옵션을 확인하기 위함
- 서버가 어떤 method, header, content-type을 제공하는지 알 수 있음
- CONNECT : 대상 지원으로 식별되는 서버에 대한 연결 요청
5. HTTP 상태코드
서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드를 보고 파악할 수 있습니다. 상태 코드는 세 자리 숫자로 되어 있습니다.
- 첫 번째 숫자 : HTTP 응답의 종류를 구분하는 데 사용
- 나머지 2개의 숫자 : 세부적인 응답 내용을 구분하기 위한 번호
- 1XX : Informational (정보 제공)
- 임시 응답으로 현재 클라이언트의 요청까지는 처리되었으니 계속 진행하라는 의미입니다.
- 2XX : Success (성공)
- 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미입니다.
- 3XX : Redirection (리다이렉션)
- 완전한 처리를 위해서 추가 동작이 필요한 경우입니다.
- 주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미입니다.
- 4XX : Client Error (클라이언트 에러)
- 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미합니다.
- 5XX : Server Error (서버 에러)
- 서버 사정으로 메시지 처리에 문제가 발생한 경우입니다.
- 서버의 부하, DB 처리 과정 오류, 서버에서 익셉션이 발생하는 경우를 의미합니다.
- HTTP 상태 코드 전체
- 상태 코드가 매우 많기 때문에 자주 사용하는 것들만 작성 후 필요 시 구글링을 통해 찾아보도록 하겠습니다.
상태 코드 | 상태 텍스트 | 한국어 뜻 | 서버 측면에서의 의미 |
200 | OK | 성공 | 서버가 요청을 성공적으로 처리하였습니다. |
201 | Created | 생성됨 | 요청이 처리되어서 새로운 리소스가 생성되었습니다. 응답 헤더 Location에 새로운 리소스의 절대 URI를 기록합니다. |
202 | Accepted | 허용됨 | 요청은 접수하였지만, 처리가 완료되지 않았습니다. 응답 헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냅니다. |
301 | Moved Permanently |
영구 이동 | 지정한 리소스가 새로운 URI로 이동하였습니다. 이동할 곳의 새로운 URI는 응답 헤더 Location에 기록합니다. |
303 | See Other | 다른 위치 보기 | 다른 위치로 요청하라. 요청에 대한 처리 결과를 응답 헤더 Location에 표시된 URI에서 GET으로 취득할 수 있습니다. 브라우저의 폼 요청을 POST로 처리하고 그 결과 화면으로 리다이렉트시킬 때 자주 사용하는 응답 코드입니다. |
307 | Temporary Redirect |
임시 리다이렉션 |
임시로 리다이렉션 요청이 필요합니다. 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있습니다. 클라이언트는 향후 요청 시 원래 위치를 계속 사용해야 합니다. 302의 의미를 정확하게 재정의해서 HTTP/1.1의 307 응답으로 추가되었습니다. |
400 | Bad Request | 잘못된 요청 | 요청의 구문이 잘못되었습니다. 클라이언트가 모르는 4xx 계열 응답 코드가 반환된 경우에도 클라이언트는 400과 동일하게 처리하도록 규정하고 있습니다. |
401 | Unauthorized | 권한 없음 | 지정한 리소스에 대한 액세스 권한이 없습니다. 응답 헤더 WWW-Authenticate에 필요한 인증 방식을 지정합니다. |
403 | Forbidden | 금지됨 | 지정한 리소스에 대한 액세스가 금지되었습니다. 401 인증 처리 이외의 사유로 리소스에 대한 액세스가 금지되었음을 의미합니다. 리소스의 존재 자체를 은폐하고 싶은 경우는 404 응답 코드를 사용할 수 있습니다. |
404 | Not Found | 찾을 수 없음 | 지정한 리소스를 찾을 수 없습니다. |
500 | Internal Server Error |
내부 서버 오류 | 서버에 에러가 발생하였습니다. 클라이언트가 모르는 5xx 계열의 응답 코드가 반환된 경우에도 클라이언트는 500과 동일하게 처리하도록 규정하고 있습니다. |
501 | Not Implemented |
구현되지 않음 | 요청한 URI의 메소드에 대한 서버가 구현하고 있지 않습니다. |
502 | Bad Gateway | 불량 게이트웨이 | 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받았습니다. |
6. SSL 인증서
- SSL(Secure Sockets Layer)은 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술입니다.
- SSL 인증서는 SSL 기반하에서 사용자의 웹브라우저와 인터넷 사이트의 웹서버 간 암호화 통신을 가능하게 하는 제 3의 신뢰기관이 인증한 인증서를 말합니다.
- HTTPS는 HTTP를 안전하게 만드는 방식입니다.
📌 실습 도전 과제
1. "curl"을 이용하여 HTTP 요청 직접 보내보기
curl(client url) 명령어는 프로토콜들을 이용해 URL로 데이터를 전송하여 서버에 데이터를 보내거나 가져올 때 사용하기 위한 명령줄 도구 및 라이브러리입니다.
즉, Shell에서 REST API(http) 테스트를 하고 싶으면 curl 명령어를 사용하면 됩니다.
- "curl" 설치
# 우분투
$ sudo apt update
$ sudo apt install curl
- "curl" 버전 확인
$ curl -V
- curl 명령어 옵션
- 특정 URL을 대상으로 동작하며 URL 앞에는 curl의 옵션을 사용하면 됩니다.
- 하이픈 하나(-)로 시작하는 short 형식과 하이픈 두개(--)로 시작하는 long 형식 모두 지원합니다.
curl -X GET https://www.example.com
# GET 방식은 BODY 없음
# -X 요청메소드 종류 명시
2. 웹 브라우저 개발자 도구를 사용하여 웹 사이트의 HTTP 통신을 살펴보기
웹 브라우저는 크롬 브라우저를 이용해야 합니다.
- F12를 눌러서 개발자 도구를 켜줍니다.
- 개발자 도구 상단의 Network 탭을 클릭 후 새로고침을 합니다.
'ELITE HACKER bootcamp > Pre.web' 카테고리의 다른 글
[1주차 TIL] 프록시 (0) | 2024.12.16 |
---|---|
[1주차 TIL] 패킷 (0) | 2024.12.16 |
[1주차 TIL] Cookie와 Session (0) | 2024.12.16 |
[1주차 TIL] 프로토콜 (0) | 2024.12.14 |
[1주차 TIL] 웹이란? (0) | 2024.12.12 |