멍멍코 2023. 9. 6. 00:34

HTTP


HTTP (HyperText Transfer Protocol)는 웹에서 데이터를 교환하기 위한 프로토콜입니다. 웹 브라우저와 웹 서버 간에 정보를 전달하기 위해 사용됩니다.

Request (요청)

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

{
    "username": "JohnDoe",
    "password": "password123"
}

1. Start Line: GET /index.html HTTP/1.1
2. Headers:
Host, User-Agent, Accept 등
3. Body:
JSON 데이터 (username과 password)

1.  Start Line

GET /index.html HTTP/1.1

1)Method: HTTP 요청 방식(예: GET, POS, PUT, DELETE 등)

- GET: 데이터를 검색하기 위한 요청.(조회)
- POST: 데이터를 서버에 제출하기 위한 요청.(생성/수정/삭제)
- PUT: 데이터를 업데이트하기 위한 요청.
- DELETE: 데이터를 삭제하기 위한 요청.

2)URI(Uniform Resource Identifier): 요청 대상이 되는 리소스의 위치

예: https://www.example.com/path?query=value 
- https: 프로토콜
www.example.com:도메인 이름 (호스트)
- /path: 경로
- ?query=value: URL의 쿼리 문자열 부분에 포함되는 키-값 쌍. 주로 GET 요청에 사용됩니다.

예: https://www.example.com/search?query=apple에서 query=apple은 쿼리 파라미터입니다.

구조

시작: URL의 경로 부분 다음에 ? 문자로 시작합니다.
키-값 쌍: 키와 값은 = 문자로 연결되며, 여러 키-값 쌍은 & 문자로 구분됩니다.

https://www.example.com/search?query=apple&sort=price&order=asc 
위 URL에서 query=apple, sort=price, order=asc는 쿼리 스트링의 키-값 쌍입니다.

주의점
- 쿼리 스트링은 URL의 일부이므로 길이에 제한이 있을 수 있습니다. 따라서 매우 큰 양의 데이터를 전달할 때는 요청 본문을 사용하는 것이 좋습니다.
- 쿼리 스트링의 내용은 웹 브라우저의 주소창에 노출되므로 민감한 정보(예: 패스워드)를 포함해서는 안 됩니다.
결론적으로, 쿼리 스트링은 웹 서버에 간단한 파라미터를 전달할 때 사용되며, URL의 일부로서 사용자에게 노출될 수 있습니다. 따라서 주의를 기울여 사용해야 합니다.

3)HTTP Version: 사용되는 HTTP의 버전

2. Headers

Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

요청의 추가 정보를 제공합니다. 예를 들면:
- User-Agent: 클라이언트(브라우저나 앱)의 정보
- Accept: 클라이언트가 받을 수 있는 응답 타입
- Authorization: 인증 정보

5. Body

{
    "username": "JohnDoe",
    "password": "password123"
}

메소드에 따라 데이터를 포함하여 서버로 보낼 수 있습니다. 주로 POST나 PUT 요청에서 사용됩니다.


Response (응답)

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2021 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Content-Type: text/html

{
    "id": 12345,
    "name": "John Doe",
    "email": "john@example.com"
}

1. Status Line: HTTP/1.1 200 OK
2. Headers: Date, Server, Content-Type 등
3. Body: JSON 데이터 (id, name, email)

1. Status Line

HTTP/1.1 200 OK

1) HTTP Version: 사용되는 HTTP의 버전

2) Status Code: 응답의 상태를 나타내는 코드

요청의 결과를 나타내는 코드.
HTTP 상태 코드는 웹 서버가 클라이언트(예: 웹 브라우저)에게 응답을 보낼 때 그 응답의 상태나 결과를 설명하는 짧은 숫자 코드입니다. 이 코드를 통해 요청이 어떻게 처리되었는지 빠르게 파악할 수 있습니다.

HTTP 상태 코드의 주요 범주는 다음과 같습니다

1. 1xx (Informational): 정보 전달을 위한 코드입니다. 이 범주의 코드는 임시 응답을 나타내며, 클라이언트는 요청을 계속해야 합니다.
2. 2xx (Successful): 성공적으로 처리된 요청을 나타냅니다.
 - 200 OK: 요청이 성공적으로 처리되었을 때 가장 일반적으로 반환되는 코드입니다.
3. 3xx (Redirection): 클라이언트에게 다른 위치로의 리디렉션을 알리거나, 추가적인 조치가 필요할 때 사용됩니다.
 - 301 Moved Permanently: 리소스가 영구적으로 다른 URL로 이동했음을 나타냅니다.
4. 4xx (Client Errors): 클라이언트의 요청에 문제가 있을 때 반환되는 코드입니다. 이러한 코드는 서버에 문제가 있어서가 아니라, 클라이언트 요청 자체에 오류가 있음을 나타냅니다.
 - 400 Bad Request: 일반적인 클라이언트 오류를 나타냅니다. 요청이 잘못되었거나 서버가 처리할 수 없습니다.
 - 404 Not Found: 요청한 리소스(예: 웹 페이지)가 서버에 없음을 나타냅니다.
5. 5xx (Server Errors): 서버에 문제가 있어서 요청을 처리할 수 없을 때 반환되는 코드입니다.
 - 500 Internal Server Error: 서버에 오류가 발생해서 요청을 처리할 수 없음을 나타냅니다.

HTTP 상태 코드는 웹 개발과 관련된 많은 상황에서 중요한 역할을 합니다. 개발자는 이 코드들을 통해 웹 애플리케이션에서 발생하는 문제의 원인을 진단하거나 사용자에게 적절한 메시지를 전달할 수 있습니다.

3)Status Message: 상태 코드에 대한 설명

2. Headers

Date: Mon, 27 Jul 2021 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Content-Type: text/html

응답의 추가 정보를 포함합니다. 예를 들면
- Content-Type: 응답 본문의 데이터 타입 (예: text/html, application/json)
- Set-Cookie: 클라이언트에 쿠키를 설정하라는 지시
- Cache-Control: 캐싱 관련 지시

3. Body

{
    "id": 12345,
    "name": "John Doe",
    "email": "john@example.com"
}

서버로부터 반환되는 실제 데이터를 포함합니다. 이 데이터는 HTML, JSON, 이미지 등 다양한 형식을 가질 수 있습니다.

 

간단히 요약하면, 클라이언트는 서버에 특정 작업을 요청하는 request를 보내고, 서버는 해당 요청을 처리한 결과를 response로 클라이언트에 반환합니다.