HTTP란?
HTTP (Hypertext Transfer Protocol)이란 인터넷에서 데이터를 전송하는 데 사용되는 통신 프로토콜입니다. 주로 웹 브라우저와 웹 서버 간에 정보(CSS, HTML, 등등)를 주고받을 때 사용되며 클라이언트(웹 브라우저)가 서버로 요청을 보내고, 서버가 그 요청에 대한 응답을 제공하는 방식으로 작동합니다. 이것은 웹 페이지를 불러오고, 웹 애플리케이션과 서버 간의 상호작용을 담당합니다. HTTP는 주로 텍스트 기반의 프로토콜이지만, 보안을 강화하기 위해 HTTPS(SSL/TLS 암호화를 사용한 HTTP)가 널리 사용되고 있습니다. HTTP는 웹의 기본적인 기술 중 하나이며, 웹 브라우징 및 웹 애플리케이션 개발에 중요한 역할을 하고있습니다.
📌 HTTP Status codes
HTTP Status Code(HTTP상태코드) 란 클라이언트가 서버에게 요청을 보낼 때 그 요청의 결과가 어떻게 되었는지를 알려주는 코드입니다. 이를 통해 요청을 했을 때 그 요청이 성공적인지 또는 에러가 발생했는지를 확인할 수 있습니다.
status code는 서버와의 통신에 있어서 매우 중요한 부분이며, 잘못 사용했을 시 앱을 재설치해야하는 상황이 발생할 수 있습니다.
HTTP Status codes 는 세 자리 숫자로 이루어져 있으며, 첫번째 자리 숫자에 따라 다음과 같은 다섯 종류의 범주로 나눌 수 있습니다:
앞의 숫자가 1로 시작하는 Status Code는 요청을 처리하는 중이며 추가 정보가 필요할 때 사용됩니다.
- 100 (Continue) : 진행중임을 나타내는 Status code 입니다. 현재까지의 진행 상태에 문제가 없으며 클라이언트가 계속해서 요청을 해도 된다는 뜻입니다.
- 101(Switching Protocol)
- 102(Processing) WedDAV : 서버가 요청을 수신하였으며 이를 처리중이지만 아직 제대로된 응답을 주지 못하는 상황을 이야기합니다.
2) 2XX : Successful response
앞의 숫자가 2로 시작하는 Status Code는 요청이 성공적으로 처리되었음을 나타냅니다. 예를 들어, 200은 "성공"을 나타냅니다.
- 200(Ok) : 서버가 요청을 성공적으로 처리했음
- 201(Created) : 요청이 성공적이었으며 새로운 리소스가 생성되었을때, 일반적으로 POST, 혹은 PUT 이후에 받게 됩니다.
- 202(Accepted) : 서버가 요청을 접수했지만 아직 처리하지는 못했을 때를 말합니다.
- 203(Non-Authoritative information) : 서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공할 때입니다.
- 204(No content) : 서버가 요청을 성공적으로 처리했지만 콘텐츠가 없을 때 입니다.
- 205(Reset Content) : 요청을 완수한 이후에 이 요청을 보낸 문서 뷰를 리셋하라는 의미입니다.
- 206(Partial Content) : 서버가 GET 요청의 일부만 처리했을 경우입니다.
- 207(Multi-Status) : 여러 리소스가 여러 Status code인 상황에 해당되는 정보를 전달합니다.
- 208(Already Reported)
- 226(IM Used)
3) 3XX : Redirection message
앞의 숫자가 3으로 시작하는 Status Code는 추가 동작이 필요하며, 주로 리다이렉션을 나타냅니다.
- 300(Mulitple Choice) : request에 대해 하나 이상의 응답이 가능합니다. 사용자는 그중에 하나를 선택해야 합니다.
- 301(Moved Permantly) : 요청한 리소스의 URI가 변경되었을때입니다.
- 302(Found) : 요청한 리소스의 URI가 일시적으로 변경되었을 때를 의미합니다.
- 303(See Other) : 클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때.
- 304(Not modified) : 마지막 요청 이후 요청한 페이지가 수정되지 않았을 때 입니다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않습니다.
- 305(Use Proxy) : 요청한 응답은 반드시 프록시를 통해 접속해야 함을 알려줍니다.
- 306(Unused) : 이 status code는 현재 사용되지 않고 있습니다.
- 307(Temporary Redirect) : 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 향후에는 원래의 URI로 요청해야 한다는 의미입니다.
- 308(Permanent Redirect)
4) 4XX : Client error response
앞의 숫자가 4로 시작하는 Status Code는 클라이언트 요청에 오류가 있음을 나타냅니다.
- 400(Bad Request) : 말 그대로 클라이언트의 request가 유효하지 않은 상태를 의미합니다.
- 401(Unauthorized) : 클라이언트가 권한이 없어 작업을 진행하지 못할때입니다. 이 요청은 인증이 필요합니다. 보통 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있습니다.
- 403(Forbidden) : 서버가 요청을 거부할 때 입니다. 예를 들어 사용자가 리소스에 대한 필요 권한을 가지고 있지 않을 때를 의미합니다.
- 404(Not Found) : 서버가 요청한 페이지(resource)를 찾지 못했을 때입니다. 서버에 존재하지 않는 페이지에 대한 요구를 할 때 다음과 같은 status code가 반환됩니다.
- 405(Method Not Allowed) : 클라이언트의 요청이 허용되지 않은 메서드인 경우입니다. (예를 들어 POST 방식으로만 request가 가능한데 이를 지키지 않고 GET으로 보냈을 때)
- 409(Conflict) : 서버가 요청을 수행하는 중에 충돌이 발생했을 때 입니다.
- 414 : 요청하는 URL(일반적으로는 URL)이 너무 길었을 때의 status code 입니다.
- 419(Too Many Requests) : 사용자가 일정 시간 동안 너무 많은 request를 보냈을 때 입니다.
5) 5XX : Server errors
앞의 숫자가 5로 시작하는 Status Code는 (Server Error): 서버에서 요청을 처리하는 동안 오류가 발생했음을 나타냅니다.
- 500(Internal Server Error) : 서버에 오류가 발생하여 요청을 수행할 수 없을 경우
- 501(Not Implemented) : 서버에 해당 요청을 수행할 수 있는 기능이 없는 경우(서버가 요청 메소드를 인식하지 못하는 경우입니다.)
- 502(Bad Gateway) : 서버가 게이트웨이나 프록시 역할을 하고 있는 업스트림 서버에서 잘못된 응답을 받았을 경우
- 504(Gateway Timeout) : 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못한 경우.
- 511(Network Authentication Required) : 네트워크 인증이 필요한 경우입니다.
Swift의 경우 Alamofire 라이브러리 덕분에 http에 대한 이해도가 부족하더라도 iOS에서 http를 쉽게 사용하여 개발할 수 있으나 더 나은 iOS개발자가 되기 위해선 주의해야 하는 http status code 정도는 알아두는 것이 좋다고 합니다.
추가적인 Http Status code들은 WepFX 에서 확인할 수 있습니다.
📌 HTTP Message
HTTP (Hypertext Transfer Protocol) 메시지는 클라이언트와 웹 서버 간에 정보를 주고받는 데 사용되는 통신 형식입니다. HTTP 메시지는 웹에서 데이터를 요청하고 응답하는 데 사용되며 요청(Request) 메시지와 응답(Response) 메시지라는 두 가지 유형이 존재합니다.
Request와 Response의 메시지 구조는 다음과 같습니다.

HTTP 헤더(Header)는 HTTP 메시지의 일부로, 메시지의 메타 정보와 제어 정보를 포함하는 부분입니다. 헤더는 클라이언트와 서버 간의 통신을 관리하고 메시지의 특성을 설명하기 위해 사용됩니다.
2) Body
HTTP 메시지의 본문(body)은 메시지에 포함된 실제 데이터를 나타냅니다. 본문은 메시지의 헤더(Header) 다음에 위치하며, 클라이언트와 서버 간에 주고받아야 하는 실질적인 정보를 담고 있습니다. HTTP Request(요청)와 HTTP Response(응답) 모두 본문을 가질 수 있습니다.
📌 Request와 Response
HTTP (Hypertext Transfer Protocol)에서 Request(요청)과 Response(응답)는 웹 서버와 웹 클라이언트(일반적으로 웹 브라우저) 간에 데이터를 교환하는 데 사용되는 두 가지 주요 메시지 유형입니다.
1) HTTP Request (요청)
클라이언트(웹 브라우저)가 웹 서버에게 정보를 요청하는 메시지입니다.
- HTTP 메소드: 요청의 목적을 나타내는 동사 형태의 메소드 (예: GET, POST, PUT, DELETE).
- URI (Uniform Resource Identifier): 요청 대상의 자원을 식별하는 경로 또는 URL.
- HTTP 버전: 사용 중인 HTTP 프로토콜 버전 (예: HTTP/1.1).
- 헤더(Headers): 요청에 대한 추가 정보, 메타데이터를 포함하는 부분.
- 메시지 본문 (Message Body): 요청과 함께 전송되는 데이터 (일반적으로 POST 또는 PUT 요청 시 사용).
2) HTTP Response (응답)
웹 서버가 클라이언트에게 요청에 대한 결과를 반환하는 메시지입니다.
- 상태 코드 (Status Code): 요청의 결과 상태를 나타내는 세 자리 숫자 (예: 200 OK, 404 Not Found).
- 상태 메시지 (Status Message): 상태 코드에 대한 간단한 설명.
- 헤더(Headers): 응답에 대한 추가 정보, 메타데이터를 포함하는 부분.
- 메시지 본문 (Message Body): 서버로부터 클라이언트로 전송되는 데이터 (웹 페이지의 내용 등).