소켓 프로그래밍과 Http 프로그래밍의 차이점


답변:


109

HTTP는 애플리케이션 프로토콜입니다. 기본적으로 HTTP 자체를 사용하여 원격 엔드 포인트로 /로부터 정보를 전송할 수 없습니다. 대신 HTTP의 경우 TCP 인 기본 프로토콜에 의존합니다.

여기에 이미지 설명 입력

관심이있는 경우 OSI 레이어 에 대해 자세히 읽을 수 있습니다 .

반면 소켓은 대부분의 운영 체제에서 네트워크와 통신 할 수 있도록 제공하는 API입니다. 소켓 API는 전송 계층과 그 아래의 다른 프로토콜을 지원합니다.

즉, TCP를 사용하려면 소켓을 사용합니다. 그러나 소켓을 사용하여 HTTP를 사용하여 통신 할 수도 있지만 HTTP 사양 ( RFC2616 ) 에 따라 메시지를 디코딩 / 인코딩해야합니다 . 이는 대부분의 개발자에게 큰 작업이 될 수 있으므로 개발자 프레임 워크 (예 : .NET)에 클라이언트를 준비했습니다 (예 : WebClient또는 HttpWebRequest클래스).


2
그래서 둘 다 TCP를 사용합니다. HTTP는 미리 정의 된 형식으로 응답하고 소켓은 소켓의 다른 끝에서 반환 된 데이터를 제공합니다.
आनंद

4
네. TCP는 모든 것이 도착하는지 (전송 계층) 확인하고 HTTP는 웹 애플리케이션이 수행해야하는 작업을 알려줍니다.
jgauffin

25

HTTP에서는 (소켓 위에서 작동하는) 고수준 HTTP 프로토콜을 사용합니다. 세션 GET google.com이 없으므로 연결이 닫힌 후 텍스트 요청을 보내고 텍스트 또는 이진 데이터를 수신합니다 (HTTP 1.1에서 영구 연결을 사용할 수 있음).

MSDN 예 :

public static void Main (string[] args)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

    Console.WriteLine ("Content length is {0}", response.ContentLength);
    Console.WriteLine ("Content type is {0}", response.ContentType);

    // Get the stream associated with the response.
    Stream receiveStream = response.GetResponseStream ();

    // Pipes the stream to a higher level stream reader with the required encoding format. 
    StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);

    Console.WriteLine ("Response stream received.");
    Console.WriteLine (readStream.ReadToEnd ());
    response.Close ();
    readStream.Close ();
} 

소켓을 사용하면 레벨이 낮아지고 실제로 연결을 제어하고 원시 바이트를 송수신합니다.

예:

var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});

HTTP 1.1에서 연결이 닫히지 않습니다.
론의 후작

@EJP는 다음 방법에 따라 달라 Connection헤더 설정)
jgauffin

@jgauffin 맞아요. 닫혀 있지 않습니다.
Marquis of Lorne

사실이지만 OP가이 주제에 대한 다른 95 % 정보와 함께 자신을 발견 할 세부 사항입니다.
Anri

13

HTTP 연결

  • HTTP 연결은 소켓에서 실행되는 프로토콜입니다.
  • HTTP 연결은 네트워크 연결의 상위 수준 추상화입니다.
  • HTTP 연결을 통해 구현은 이러한 모든 상위 수준 세부 정보를 처리하고 단순히 HTTP 요청 (일부 헤더 정보)을 보내고 서버에서 HTTP 응답을받습니다.

소켓 연결

  • 소켓은 시스템간에 데이터를 전송하는 데 사용됩니다. 두 시스템을 함께 연결하기 만하면 IP 주소는 IP 기반 네트워크를 통한 시스템의 주소입니다.
  • 소켓 연결을 사용하면 두 시스템 간의 네트워크 연결을위한 고유 한 프로토콜을 설계 할 수 있습니다.
  • 소켓 연결을 사용하면 TCP / IP 연결의 모든 하위 수준 세부 정보를 처리해야합니다.

1

HTTP 프로그래밍 또는 HTTP 요청은 시스템에 언어 사양 프로토콜 이있는 소켓 프로그래밍이 사용 되는 경우 느슨하게 결합되고 플랫폼 중립적 인 언어 기술 통신에 사용됩니다.


1
언어 란 무엇을 의미합니까? 자바 애플리케이션은 소켓을 통해 Python 애플리케이션과 통신 할 수 있습니다. 예를 들면
Adam Hughes

그가 의미하는 바는 일반적으로 느슨하게 결합 된 (또는 완전히 다른) 시스템을 연결하려는 경우 HTTP가 유용하다는 것입니다. 다른 기술과 함께 지원되는 빌드를 사용하여 일부 기술로 구축 된 프런트 엔드는 URL을 통해 웹의 리소스에 액세스합니다. 일반적으로 TCP / UDP와 같은 낮은 수준의 연결 프로토콜을 사용하는 경우 유사한 기술 (예 : 다른 Java 응용 프로그램)을 사용하는 시스템과의 통신을 조율 할 수 있습니다. 이게 옳은 거니? 나는 그것을 스스로 이해하려고 노력하고있다.
Nicola Amadio

0

두 엔드 포인트가 서로 통신 할 수 있으려면 둘 다 규칙 세트를 따라야합니다. 컴퓨터에서는 이러한 규칙 집합을 프로토콜이라고합니다.

예를 들어 브라우저와 같은 엔드 포인트와 웹 서버와 같은 다른 엔드 포인트의 경우 둘 다 http라는 규칙 또는 프로토콜 집합을 따라야 정보를주고받을 수 있습니다. 따라서 월드 와이드 웹과 이러한 종류의 통신에서는이 http 프로토콜을 기반으로 대화하는 사람들 만 서로 성공적으로 대화 할 수 있습니다.

소켓은 끝 점일뿐입니다. http 프로토콜을 따라 www에서 페이지를 요청하는 클라이언트로 통신하거나 연결을 수신하는 서버 역할을 할 수 있습니다. 또는 ssh, ftp와 같은 다른 규칙이나 프로토콜을 따르고 다른 방식으로 통신 할 수 있습니다.

이제 소켓 프로그래밍에서 소켓을 만들고 IP 주소와 포트 번호에 바인딩하여 포트 번호로 작동하고 http, ssh, ftp 또는 사용하려는 통신을 기반으로 원하는 모든 것을 따르도록 지시 할 수 있습니다. 소켓.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.