2013-02-27 63 views

Trả lời

65

HTTP là một giao thức ứng dụng. Về cơ bản nó có nghĩa là bản thân HTTP không thể được sử dụng để truyền thông tin đến/từ một điểm kết thúc từ xa. Thay vào đó nó dựa trên một giao thức cơ bản trong trường hợp của HTTP là TCP.

enter image description here

Bạn có thể đọc thêm về OSI layers nếu bạn quan tâm.

Ổ cắm mặt khác là một API mà hầu hết các hệ điều hành đều cung cấp để có thể nói chuyện với mạng. API socket hỗ trợ các giao thức khác nhau từ tầng vận chuyển và xuống.

Điều đó có nghĩa là nếu bạn muốn sử dụng TCP, bạn sử dụng ổ cắm. Nhưng bạn cũng có thể sử dụng ổ cắm để giao tiếp bằng cách sử dụng HTTP, nhưng sau đó bạn phải giải mã/mã hóa tin nhắn theo đặc tả HTTP (RFC2616). Vì đó có thể là một nhiệm vụ rất lớn đối với hầu hết các nhà phát triển, chúng tôi cũng có các khách hàng đã sẵn sàng trong các khung phát triển của chúng tôi (như .NET), ví dụ: các lớp WebClient hoặc HttpWebRequest.

+0

Vì vậy, cả hai đều sử dụng TCP, nó chỉ là HTTP phản hồi trong một định dạng được xác định trước và ổ cắm cho dữ liệu như được trả về từ đầu kia của một socket, phải không? –

+0

yep. TCP đảm bảo rằng mọi thứ đến (lớp truyền tải) và HTTP cho biết các ứng dụng web nên làm gì. – jgauffin

19

Với HTTP, bạn sử dụng giao thức HTTP cấp cao (hoạt động trên đầu một ổ cắm). Đó là phiên ít có nghĩa là bạn gửi yêu cầu văn bản như GET google.com và nhận văn bản hoặc dữ liệu nhị phân trong trở lại, sau khi kết nối được đóng lại (trong HTTP 1.1 kết nối liên tục có sẵn)

MSDN dụ:

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(); 
} 

Với ổ cắm bạn đi trên mức thấp hơn và thực sự kiểm soát kết nối và gửi/nhận byte thô.

Ví dụ:

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}); 
+0

Kết nối không được đóng từ HTTP 1.1. – EJP

+0

@EJP: phụ thuộc vào cách đặt tiêu đề 'Connection';) – jgauffin

+0

@jgauffin Chính xác. Nó không phải là đóng cửa willy-nilly. – EJP

1

lập trình HTTP hoặc yêu cầu HTTP được sử dụng cho các khớp nối lỏng lẻo và công nghệ ngôn ngữ nền tảng trung lập giao tiếp nơi như lập trình socket được sử dụng khi hệ thống có ngôn ngữ giao thức đặc điểm kỹ thuật

+1

Bạn muốn nói gì bằng ngôn ngữ? Một ứng dụng java có thể giao tiếp với một ứng dụng Python thông qua các ổ cắm ví dụ –

2

HTTP kết nối

  • Kết nối HTTP là giao thức chạy trên ổ cắm.
  • Kết nối HTTP là mức trừu tượng cao hơn của kết nối mạng.
  • Với kết nối HTTP, việc triển khai sẽ thực hiện tất cả các chi tiết cấp cao hơn và chỉ cần gửi yêu cầu HTTP (một số thông tin tiêu đề ) và nhận phản hồi HTTP từ máy chủ.

Ổ cắm kết nối

  • socket được sử dụng để vận chuyển dữ liệu giữa các hệ thống. Nó chỉ đơn giản là kết nối hai hệ thống với nhau, một địa chỉ IP là địa chỉ của máy qua mạng IP.
  • Với kết nối ổ cắm, bạn có thể thiết kế giao thức riêng cho kết nối mạng giữa hai hệ thống.
  • Với kết nối Ổ cắm, bạn cần phải chăm sóc tất cả các chi tiết cấp thấp hơn của kết nối TCP/IP.
Các vấn đề liên quan