Http代理前后的不同之处

winsock实现HTTP代理提交HTTP请求的方法有两种
1、直接请求
2、先连通远程服务器后就相普通提交请求一样提交HTTP请求

说一下第一种方法:


先说一下我们普通的提交HTTP请求的过程:
直接连接远程服务器后,当连接成功时向服务器提交HTTP头,注意看看大概的格式
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Connection: Keep-Alive


再看看使用代理的连接方法
先连接代理服务器(IP地址、端口),然后向代理服务器提交这样的HTTP头
GET http://www.baidu.com/ HTTP/1.0
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Proxy-Connection: Keep-Alive


区别
就这么一点,
1、连接的不是目标服务器的IP地址和端口而是代理服务器IP地址和端口
2、提交的不是相对的地址而是绝对的HTTP地址
3、Connection: Keep-AliveProxy-Connection: Keep-Alive区别

再说说第二种方法:

其实这种方法很强大,他除了可以实现HTTP协议的代理,还可以实现其他TCP/IP协议的处理。
如:POP2、SMTP、FTP等等
先看看理论把,其实就是客户端连接代理服务器后,让代理服务器去连接远程服务器,当代理服务器连接好远程服务器
成功后,会返回连接结果给客户端,这时客户端判断结果,如果连接成功了就直接发送正常的数据给代理,代理收到数据
后立刻转发给服务器,其实就是个中转站。就是开始连接的时候不同,后面所有的通讯可以照常操作

客户端先连接代理服务器,然后向代理服务器提交请求,告诉他要连接到哪:
CONNECT www.baidu.com:80 HTTP/1.1
Accept: */*
Content-Type: text/html
Proxy-Connection: Keep-Alive
Content-length: 0

这时,如果代理服务器连接成功会返回这样一段信息(客户端收到的信息,注意,不要这个时候断开连接哟,呵呵)
HTTP/1.0 200 Connection established
Proxy-agent: CCProxy 6.4.2    '这里是代理程序的名称,看你的是什么代理软件


这时你就可以发出正常的请求了
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Connection: Keep-Alive

然后就可以收到远程服务器发过来的网页信息了

如何判断返回的消息接收完了呢?有时候消息会分成几段来返回

这个要看协议的,如果是HTTP协议,可以有两种方式判断。
1、通过Content-length的值判断要接收的数据大小,数据够了就断开连接,注意,HTTP头的数据大小不算。
2、在HTTP换上Connection: Close,由服务器发送完服务器自动断开,不用你去判断什么时候该断开
  你就管收数据,收到 Close事件时断开连接就可以了。
### 配置Nginx实现前后端均为HTTPS的反向代理 为了使Nginx能够作为支持HTTPS协议的反向代理服务器,需确保前端和后端通信均采用加密传输。以下是详细的配置方法: #### 1. 安装并启用SSL模块 大多数Linux发行版自带OpenSSL库,安装Nginx时通常已编译入此功能。如果未包含,则需要重新编译Nginx加入`--with-http_ssl_module`选项。 #### 2. 获取或生成证书文件 对于生产环境建议购买正式CA签发的SSL/TLS证书;测试环境下可以自签名创建一对密钥与公钥组合用于实验目的。假设已经拥有了如下两个文件: - `server.crt`: SSL证书文件 - `server.key`: 私钥文件 #### 3. 修改Nginx配置文件 编辑站点对应的虚拟主机配置文件(一般位于/etc/nginx/sites-available/default),添加必要的指令来开启HTTPS监听以及定义具体的location规则[^4]。 ```nginx server { listen 443 ssl; server_name yourdomain.com; # 加载SSL证书及私钥 ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; # 推荐只允许较新的TLS版本 ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass https://backend-server-address/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 启用WebSocket支持 (可选) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /api/ { proxy_pass https://backend-api-server-address/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Proto https; } } ``` 上述配置中,针对根路径 `/` 和API接口前缀 `/api/` 设置了不同的后端服务地址,并指定了使用HTTPS协议进行转发。同时设置了几个重要的HTTP头信息以便于后端应用获取原始请求的相关数据。 #### 4. 测试配置有效性 完成修改之后先执行命令`sudo nginx -t`验证语法无误后再重启Nginx让更改生效:`sudo systemctl restart nginx`. #### 5. 更新DNS记录指向新搭建好的安全连接入口 确保域名解析正确指向部署有以上配置的Nginx服务器公网IP地址。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值