Computer Science/Network

[Network] HTTP

LeeJaeJun 2023. 12. 22. 23:37
728x90
반응형

- HTTP(Hypertext Transfer Protocol)

HTTP는 HTML 문서를 전송 받기 위해 만들어진 응용 프로그램 계층 통신 프로토콜입니다.(문자열)
기본적으로 클라이언트의 요청에 대응하는 응답형식으로 작동합니다.
HTTP 요청은 주로 다음과 같은 구성 요소로 이루어집니다:

  1. HTTP 메서드: 요청의 목적이나 동작을 정의합니다. 일반적으로 GET, POST, PUT, DELETE와 같은 메서드를 사용합니다.
  2. 경로(URI): 서버에서 요청하는 리소스의 경로를 지정합니다. 예를 들어, "/index.html"은 웹 서버의 루트 디렉토리에 있는 "index.html" 파일을 요청함을 의미합니다.
  3. 헤더(Header): 요청의 부가 정보를 포함합니다. 예를 들어, 요청하는 클라이언트의 브라우저 유형, 요청의 인증 정보, 요청 데이터의 형식 등을 담을 수 있습니다. 헤더로 문자열입니다.
  4. 본문(Body): 요청과 함께 전송되는 데이터를 포함합니다. 주로 POST 메서드와 함께 사용되며, 서버에 전달할 데이터를 담습니다.

HTTP 응답은 서버에서 클라이언트로 전송되는 데이터입니다. 응답은 다음과 같은 구성 요소로 이루어집니다:

  1. 상태 코드: 요청의 처리 결과를 나타냅니다. 예를 들어, 200은 "성공"을 의미하고, 404는 "찾을 수 없음"을 의미합니다.
  2. 헤더: 응답의 부가 정보를 포함합니다. 예를 들어, 응답으로 전송되는 데이터의 형식, 서버의 소프트웨어 정보 등을 포함할 수 있습니다.
  3. 본문: 서버에서 클라이언트로 전송되는 데이터를 포함합니다. 주로 HTML, JSON, 이미지 등의 형식으로 전송됩니다.

 

- HTTP header

HTTP 헤더는 HTTP 요청이나 응답에 대한 부가 정보를 포함하는 메타데이터입니다. 헤더는 클라이언트와 서버 간의 통신을 지원하고, 요청이나 응답의 특성을 설명하고 제어하는 데 사용됩니다. 헤더는 키-값 쌍으로 구성되며, 각각의 헤더 필드는 콜론(:)으로 구분됩니다.
HTTP 헤더는 크게 요청 헤더와 응답 헤더로 나눌 수 있습니다.

  1. 요청 헤더(Request Headers): 클라이언트가 서버로 요청을 보낼 때의 부가 정보를 담고 있습니다. 일부 흔히 사용되는 요청 헤더는 다음과 같습니다: 
    • User-Agent: 클라이언트 애플리케이션(웹 브라우저)의 정보를 전송합니다.
    • Host: 요청을 받을 서버의 호스트명과 포트 번호를 지정합니다.
    • Accept: 클라이언트가 처리할 수 있는 콘텐츠 유형(MIME 타입)을 나타냅니다.
    • Content-Type: 요청 본문의 데이터 유형을 지정합니다.
    • Authorization: 서버에서 인증을 요구할 때 인증 정보를 포함합니다.
    • Cookie: 이전 요청에서 서버로부터 받은 쿠키 값을 전송합니다.
  2. 응답 헤더(Response Headers): 서버가 클라이언트에게 응답할 때의 부가 정보를 담고 있습니다. 일부 흔히 사용되는 응답 헤더는 다음과 같습니다: 
    • Content-Type: 서버가 전송하는 콘텐츠 유형(MIME 타입)을 나타냅니다.
    • Content-Length: 응답 본문의 길이를 바이트 단위로 나타냅니다.
    • Location: 리다이렉션된 리소스의 URL을 지정합니다.
    • Set-Cookie: 클라이언트에게 쿠키 값을 설정하도록 지시합니다.
    • Cache-Control: 캐시 동작을 제어하기 위해 사용됩니다.
    • ETag: 리소스의 버전을 식별하기 위한 태그 값을 포함합니다.
  3. 일반 헤더(General Header): 요청과 응답의 전반적인 속성과 동작에 영향을 주는 헤더입니다. 일반 헤더는 요청과 응답 모두에 적용됩니다. 즉, 메세지 전체에 적용되는 정보입니다.
  4. 엔티티 헤더(Entity Header): 요청이나 응답의 엔티티 본문(내용)과 관련된 헤더입니다. 엔티티 헤더는 주로 응답의 콘텐츠 유형, 길이, 압축 방법 등을 지정하며, 요청 본문의 특성을 설명하기도 합니다. 현재는 Representation Header(표현 헤더)라고 불리며, 메세지 본문의 Payload는 Representation Data(표현 데이터)라고 부릅니다.

 

- HTTP method

  1. GET서버로부터 지정된 리소스의 표시를 요청합니다. GET 요청은 서버에서 데이터를 읽기 위해 사용되며, 요청한 데이터는 응답 본문에 포함됩니다.
  2. POST서버에 새로운 엔티티를 제출하거나 처리를 요청합니다. POST 요청은 주로 서버에 데이터를 제출하거나 수정을 요청하기 위해 사용됩니다. 서버는 주로 POST 요청에 대한 응답으로 새로 생성된 리소스의 정보를 반환합니다.
  3. PUT요청된 URI(Uniform Resource Identifier)에 엔티티를 저장합니다. PUT 요청은 서버에 새로운 리소스를 만들거나, 기존 리소스를 수정할 때 사용됩니다. 클라이언트는 요청 본문에 업데이트할 데이터를 포함시킵니다.
  4. DELETE: 서버로부터 지정된 리소스의 삭제를 요청합니다. DELETE 요청은 서버에서 특정 리소스를 삭제하기 위해 사용됩니다.
  5. PATCH: 서버에게 리소스의 일부를 수정하도록 요청합니다. PATCH 요청은 PUT과 유사하지만, 리소스의 전체 업데이트가 아닌 일부 변경을 수행합니다. 클라이언트는 요청 본문에 변경된 데이터를 포함시킵니다.
  6. HEAD: HEAD 메서드는 GET 메서드와 유사하지만, 서버는 응답 본문을 반환하지 않습니다. 대신, 서버는 헤더와 상태 코드만을 포함한 응답을 반환합니다. HEAD 메서드는 주로 리소스의 메타데이터나 헤더 정보를 가져오기 위해 사용됩니다. 예를 들어, 리소스가 수정되었는지 확인하기 위해 If-Modified-Since 헤더와 함께 사용할 수 있습니다.
  7. OPTIONS: OPTIONS 메서드는 서버가 지원하는 메서드의 목록이나 특정 리소스에 대한 지원 가능한 옵션을 요청합니다. 서버는 Allow 헤더를 통해 지원되는 메서드 목록을 반환하고, 클라이언트는 이를 확인하여 적절한 요청을 할 수 있습니다. OPTIONS 메서드는 CORS(Cross-Origin Resource Sharing)와 같은 상황에서 사용되어 특정 도메인으로부터 리소스에 접근할 수 있는 권한을 확인하기 위해 사용될 수도 있습니다.
  8. TRACE: TRACE 메서드는 클라이언트의 요청을 서버에게 되돌려주는 역방향 루프백 메커니즘입니다. TRACE 요청은 서버에 도달하기 전에 중간 프록시 서버들을 거치며, 프록시 서버 간의 통신 동작을 디버깅하고 확인하기 위해 사용될 수 있습니다. 하지만 TRACE 메서드는 보안상의 이유로 기본적으로 비활성화되어 있을 수 있습니다.
  9. CONNECT: CONNECT 메서드는 클라이언트와 서버 간의 터널을 설정하기 위해 사용됩니다. 일반적으로 HTTPS 프로토콜에서 사용되며, 클라이언트는 프록시 서버를 통해 목적지 호스트와 직접적인 연결을 설정하고 암호화된 통신을 수행합니다. CONNECT 메서드는 보안 터널링에 사용되는데, 예를 들어 웹 브라우저가 프록시를 통해 SSL/TLS 연결을 설정하는 경우에 사용됩니다.

 
get과 post의 차이

  1. 데이터 전송 방식
    • GET: GET 메서드는 서버로부터 데이터를 요청하기 위해 사용됩니다. 요청된 데이터는 URL의 쿼리 매개변수 또는 경로에 포함될 수 있습니다. GET 요청은 요청 본문에 데이터를 포함시키지 않고, 데이터를 URL에 노출시킵니다. 예를 들어, 검색 결과를 요청하거나 특정 리소스의 세부 정보를 요청할 때 GET 메서드를 사용할 수 있습니다.
    • POST: POST 메서드는 서버로 데이터를 제출하거나 처리를 요청하기 위해 사용됩니다. POST 요청은 요청 본문에 데이터를 포함시킵니다. 이는 보안적인 이유로 데이터가 URL에 노출되지 않으며, 요청하는 데이터의 양이 많을 때 유용합니다. 예를 들어, 회원 가입 양식을 제출하거나 파일을 업로드하는 경우 POST 메서드를 사용할 수 있습니다.
  2. 캐싱
    • GET: GET 요청은 동일한 URL에 대한 반복된 요청에 대해 캐싱이 가능합니다. 서버는 GET 요청에 대한 응답을 캐시하여 동일한 요청이 있을 때 캐시된 응답을 반환할 수 있습니다. 이는 네트워크 대역폭을 절약하고 성능을 향상시킵니다.
    • POST: POST 요청은 일반적으로 캐싱되지 않습니다. 서버는 POST 요청을 항상 처리하여 동일한 요청에 대해 매번 새로운 응답을 반환합니다. POST 요청은 일회성 작업에 적합합니다.
  3. 보안
    • GET: GET 요청은 URL에 데이터를 노출시킵니다. 따라서 민감한 데이터(예: 비밀번호)를 GET 요청으로 전송하는 것은 보안상 위험할 수 있습니다. 또한, 브라우저의 히스토리나 로그에 GET 요청이 기록될 수 있습니다.
    • POST: POST 요청은 요청 본문에 데이터를 포함시킴으로써 민감한 데이터를 안전하게 전송할 수 있습니다. POST 요청은 HTTPS와 같은 암호화된 연결을 통해 전송되는 것이 좋습니다.
  4. 데이터 길이
    • GET: GET 요청은 URL의 길이에 제한이 있습니다. 브라우저에 따라 URL의 최대 길이가 다를 수 있으며, 서버도 URL 길이에 제한을 둘 수 있습니다. URL 길이 제한을 초과하는 GET 요청은 문제가 발생할 수 있습니다.
    • POST: POST 요청은 요청 본문에 데이터를 포함시키기 때문에 길이 제한에 영향을 받지 않습니다. POST 요청은 대부분의 서버에서 훨씬 더 많은 데이터를 처리할 수 있습니다.

이러한 차이점들을 고려하여 GET과 POST 메서드 중 적절한 메서드를 선택해야 합니다. 일반적으로 데이터를 서버로 보내는 경우에는 POST를 사용하는 것이 안전하고 적합합니다. 그러나 단순히 데이터를 요청하여 받아오는 경우에는 GET을 사용하는 것이 보통입니다

 

- HTTP 응답 코드(상태 코드)

  1. 1xx (Informational): 요청이 수신되었고 처리 중임을 나타냅니다. 실제로 많이 사용되지는 않습니다.
  2. 2xx (Success): 요청이 성공적으로 처리되었음을 나타냅니다. 가장 흔히 사용되는 응답 코드 그룹입니다. 일부 주요한 코드는 다음과 같습니다: 
    • 200 OK요청이 성공적으로 처리되었음을 나타냅니다. 서버는 요청에 대한 적절한 응답을 반환합니다.
    • 201 Created: 요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 나타냅니다.
    • 204 No Content: 요청이 성공적으로 처리되었지만, 응답 본문에는 내용이 없음을 나타냅니다.
  3. 3xx (Redirection): 요청을 완료하기 위해 추가 동작이 필요함을 나타냅니다. 일반적으로 리디렉션과 관련이 있습니다. 일부 주요한 코드는 다음과 같습니다: 
    • 301 Moved Permanently: 요청한 리소스가 새로운 위치로 영구적으로 이동되었음을 나타냅니다. 클라이언트는 새로운 위치를 사용하여 재요청해야 합니다.
    • 302 Found: 요청한 리소스가 일시적으로 다른 위치로 이동되었음을 나타냅니다. 클라이언트는 새로운 위치를 사용하여 재요청해야 합니다.
    • 304 Not Modified: 클라이언트의 캐시된 버전이 아직 유효하며, 서버에서 리소스가 수정되지 않았음을 나타냅니다.
  4. 4xx (Client Errors): 클라이언트에 의해 잘못된 요청이 전송되었음을 나타냅니다. 몇 가지 주요한 코드는 다음과 같습니다: 
    • 400 Bad Request잘못된 요청이 서버에 전송되었음을 나타냅니다. 요청 구문이 잘못되었거나 요청을 이해할 수 없는 경우에 사용됩니다.(HTTP 규약에 맞지 않는 요청)
    • 403 Forbidden: 클라이언트가 요청한 리소스에 대한 접근 권한이 없음을 나타냅니다.(또는 잘못된 파일 실행 접근 시도)
    • 404 Not Found: 요청한 리소스가 서버에서 찾을 수 없음을 나타냅니다.
  5. 5xx (Server Errors): 서버가 요청을 처리하지 못했음을 나타냅니다. 일부 주요한 코드는 다음과 같습니다: 
    • 500 Internal Server Error: 서버에서 요청을 처리하는 동안 내부 오류가 발생했음을 나타냅니다.
    • 502 Bad Gateway: 서버가 게이트웨이나 프록시 서버 역할을 하는 서버로부터 잘못된 응답을 받았음을 나타냅니다.
    • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없음을 나타냅니다. 일시적인 과부하 또는 유지 보수 작업 등이 원인일 수 있습니다.
728x90
반응형

'Computer Science > Network' 카테고리의 다른 글

[Network] DPI(Deep Packet Inspection)  (0) 2023.12.22
[Network] 네트워크 장치 구조(Inline, Out of path, Proxy)  (1) 2023.12.22
[Network] URI와 URL  (1) 2023.12.22
[Network] DNS  (0) 2023.12.22
[Network] UDP header  (1) 2023.12.22