1.正向代理
1.1 概念
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。
1.2 特点
正向代理需要主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去访问内容并返回
正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见。
1.4 用途
突破访问显示:通过代理服务器,可以突破自身ip访问限制,访问国外网站等
提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度
隐藏客户端真实ip:上网者可以通过正向代理的方法隐藏自己的ip,免受攻击
-------------------------------------------------------------------------------------------------------------------------------
import java.io.*;
import java.net.*;
public class ForwardProxyServer {
public static void main(String[] args) {
int port = 8888;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Forward proxy server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
new Thread(() -> {
try {
// Connect to the destination server
Socket destSocket = new Socket("destination_server_address", 80);
// Get input/output streams for client and destination server
InputStream clientInput = clientSocket.getInputStream();
OutputStream clientOutput = clientSocket.getOutputStream();
InputStream destInput = destSocket.getInputStream();
OutputStream destOutput = destSocket.getOutputStream();
// Forward client request to destination server
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = clientInput.read(buffer)) != -1) {
destOutput.write(buffer, 0, bytesRead);
}
destOutput.flush();
// Forward destination server response to client
while ((bytesRead = destInput.read(buffer)) != -1) {
clientOutput.write(buffer, 0, bytesRead);
}
clientOutput.flush();
// Close sockets
destSocket.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
-----------------------------------------------------------------------------------------------------------------------------
2.反向代理
2.1 概念
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。
对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。
2.2 特点
正向代理需要配置代理服务器,而反向代理不需要做任何设置。
反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。
2.4 用途
隐藏服务器真实ip:使用反向代理,可以对客户端隐藏服务器的ip地址
负载均衡:反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上
提高访问速度:反向代理服务器可以对静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度
提供安全保障:反向代理服务器可以作为应用层防火墙,为网站提供对基于web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等。还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。
=========================================================================
import java.io.*;
import java.net.*;
public class ReverseProxyServer {
public static void main(String[] args) {
int port = 8888;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Reverse proxy server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
new Thread(() -> {
try {
// Connect to one of the internal servers (load balancing can be implemented here)
Socket internalServerSocket = new Socket("internal_server_address", 80);
// Get input/output streams for client and internal server
InputStream clientInput = clientSocket.getInputStream();
OutputStream clientOutput = clientSocket.getOutputStream();
InputStream internalInput = internalServerSocket.getInputStream();
OutputStream internalOutput = internalServerSocket.getOutputStream();
// Forward client request to internal server
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = clientInput.read(buffer)) != -1) {
internalOutput.write(buffer, 0, bytesRead);
}
internalOutput.flush();
// Forward internal server response to client
while ((bytesRead = internalInput.read(buffer)) != -1) {
clientOutput.write(buffer, 0, bytesRead);
}
clientOutput.flush();
// Close sockets
internalServerSocket.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
=========================================================================
3.正向代理和反向代理的异同
3.1 相同点
正向代理和反向代理所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。
3.2 不同点
正向代理是客户端的代理,服务器不知道真正的客户端是谁;反向代理是服务器的代理,客户端不知道真正的服务器是谁
正向代理一般是客户端架设的;反向代理一般是服务器架设的
正向代理主要是用来解决访问限制问题;反向代理则是提供负载均衡、安全防护等作用。二者都能提高访问速度
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Dax1_/article/details/124652162