HTTP协议是基于TCP还是UDP协议?有什么特点?

HTTP协议是基于TCP协议的应用层协议,它有以下主要特点:

  1. 面向连接:HTTP协议用于定期连接的传输,在发送每条HTTP请求和接收响应时都需要建立连接。
  2. 默认端口:HTTP协议默认使用80端口,HTTPS默认使用443端口。
  3. 请求-响应模型:HTTP协议采用请求-响应模型,浏览器发送HTTP请求,服务器返回HTTP响应。
  4. 无状态:HTTP协议是无状态的,每次请求-响应之间是独立的,不保留状态信息。
  5. 支持B/S模型:HTTP协议广泛用于浏览器-服务器(B/S)网络模型中,实现网页浏览等功能。
  6. 媒体类型:HTTP协议中包含Content-Type头用于描述传输数据的媒体类型,支持文件下载等功能。
  7. 缓存机制:HTTP协议中包含缓存相关头信息,用于控制响应结果的缓存行为,提高访问效率。
  8. 支持管线化:HTTP/1.1支持在一个TCP连接上发送多个请求,并接收响应,提高协议效率。
  9. 支持加密:HTTPS是HTTP的安全加密版本,使用SSL/TLS为数据通信加密和服务器认证。

代码示例:

// 客户端
Socket socket = new Socket("www.example.com", 80);
OutputStream out = socket.getOutputStream();
String request = "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n";
out.write(request.getBytes());

InputStream in = socket.getInputStream();
byte[] response = new byte[1024];
in.read(response);
String html = new String(response);
// 服务器
ServerSocket server = new ServerSocket(80);
Socket socket = server.accept();

InputStream in = socket.getInputStream(); 
byte[] request = new byte[1024];
in.read(request);
String httpReq = new String(request);

OutputStream out = socket.getOutputStream();
String httpRes = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, world!</h1>";  
out.write(httpRes.getBytes());

HTTP协议作为当今互联网的基础,已经发展到HTTP/2版本,不断提高其性能、安全性和功能,成为连接万物的重要桥梁。