이 자료는 "엔터프라이즈 개발 소개" 시리즈의 일부입니다. 이전 기사:
안녕하세요! 오늘 우리는 HTTP와 HTTPS 프로토콜을 이해하겠습니다. 하지만 먼저 한 가지 점을 명확히 합시다. 우리는 OSI 모델의 애플리케이션 계층에서 네트워크를 통한 데이터 전송 프로토콜에 대해 이야기하고 있습니다. 기억하시겠지만, 이전 기사 중 하나에서 OSI 모델에 대해 논의했습니다. 기억나지 않는다면 여기 있습니다 .
HTTP 프로토콜이 텍스트로만 구성되어 있다는 점을 바로 주목할 가치가 있습니다. 글쎄, 우리는 이 텍스트가 위치한 구조에 가장 관심이 있습니다. 각 메시지는 세 부분으로 구성됩니다.
데이터 전송 프로토콜이란 무엇입니까?
이는 다양한 서비스 개발자가 단일 형식으로 정보를 보내는 덕분에 일반적으로 허용되는 계약에 부여되는 이름입니다. 예를 들어 Google Chrome을 사용하면 개발자가 표준 HTTP 프로토콜을 사용하여 정보를 전송하고 브라우저가 이를 처리할 수 있기 때문에 Facebook과 Twitter 모두에서 정보를 얻을 수 있습니다. 통일된 규칙은 서버측 개발자 자신에게도 매우 편리합니다. 정보를 변환하고 필요한 프로토콜을 사용하여 전송할 수 있는 라이브러리가 많이 있습니다. HTTP는 원래 HTML 페이지를 전송하기 위한 프로토콜로 고안되었습니다. 오랫동안 이런 일이 있었지만 이제는 프로그래머가 문자열과 미디어 파일을 모두 전송하는 경우가 많습니다. 전반적으로 이 프로토콜은 다재다능하고 유연하며 사용하기가 정말 쉽습니다. 이제 이를 수행하는 방법을 알아봅시다.
HTTP 구조
HTTP 프로토콜이 텍스트로만 구성되어 있다는 점을 바로 주목할 가치가 있습니다. 글쎄, 우리는 이 텍스트가 위치한 구조에 가장 관심이 있습니다. 각 메시지는 세 부분으로 구성됩니다.
- 출발선 - 서비스 데이터를 정의합니다.
- 헤더 - 메시지 매개변수에 대한 설명입니다.
- 메시지 본문(Body) - 메시지 데이터입니다. 빈 줄로 제목과 구분해야 합니다.
간단한 HTTP 요청의 모습
GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
출발선에는 다음이 포함됩니다.
- GET - 요청 방법;
- / — 요청 경로(경로);
- HTTP/1.1 - 데이터 전송 프로토콜 버전.
- 호스트 — 요청이 처리되는 호스트입니다.
- User-Agent는 요청을 보내는 클라이언트입니다.
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com
{
"Id": 12345,
"User": "John"
}
요청은 javarush.com/user/create/json으로 전송되며 프로토콜 버전은 HTTP/1.1입니다. Accept는 클라이언트가 수신할 것으로 예상되는 응답 형식을 지정하고, Content-Type은 메시지 본문이 전송되는 형식을 지정합니다. Content-Length - 본문의 문자 수입니다. HTTP 요청에는 다양한 헤더가 포함될 수 있습니다. 자세한 내용은 프로토콜 사양에서 확인할 수 있습니다 .
HTTP 응답
요청을 받은 후 서버는 이를 처리하고 클라이언트에 응답을 보냅니다.HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98
<html>
<head>
<title>An Example Page</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
응답의 시작 줄에는 프로토콜 버전(HTTP/1.1), 상태 코드(200), 상태 설명(OK)이 포함됩니다. 제목은 콘텐츠의 유형과 길이를 나타냅니다. 응답 본문에는 브라우저가 HTML 페이지에 그리는 HTML 코드가 포함되어 있습니다.
응답 상태 코드
메시지 본문과 헤더를 보면 모든 것이 명확하지만 상태 코드에 대해 몇 마디 말씀드릴 가치가 있습니다. 응답 상태 코드는 항상 세 자리이며, 코드의 첫 번째 숫자는 응답 범주를 나타냅니다.- 1xx - 정보 제공용. 요청이 수신되었으며 서버는 계속할 준비가 되었습니다.
- 2xx - 성공했습니다. 요청이 접수, 이해 및 처리되었습니다.
- 3xx - 리디렉션. 요청을 처리하려면 다음 단계를 수행해야 합니다.
- 4xx - 클라이언트 오류입니다. 요청에 오류가 있거나 프로토콜을 준수하지 않습니다.
- 5xx - 서버 오류. 요청이 올바르게 구성되었음에도 불구하고 서버가 요청을 처리할 수 없습니다.
- 200 OK — 요청이 수신되어 성공적으로 처리되었습니다.
- 201 생성됨 - 요청이 수신되어 성공적으로 처리되어 새 리소스 또는 해당 인스턴스가 생성되었습니다.
- 301 영구적으로 이동됨 - 요청된 리소스가 영구적으로 이동되었으며 이에 대한 후속 요청은 새 주소에서 발생해야 합니다.
- 307 임시 리디렉션 - 리소스가 일시적으로 이동되었습니다. 지금은 자동 리디렉션을 사용하여 액세스할 수 있습니다.
- 403 금지됨 - 요청이 명확하지만 승인이 필요합니다.
- 404 찾을 수 없음 - 서버가 이 주소에서 리소스를 찾지 못했습니다.
- 501 구현되지 않음 - 서버가 이 요청에 응답하는 기능을 지원하지 않습니다.
- 505 HTTP 버전이 지원되지 않음 - 서버가 지정된 HTTP 프로토콜 버전을 지원하지 않습니다.
GO TO FULL VERSION