一、Socket编程的客户端和服务端的主要步骤:
Java Socket编程:对于http传输协议
客户端:
1、创建新的socket,绑定服务器host和端口号
2、Socket创建成功后获得相应的输出流
3、将请求报文通过输出流传到服务器,记得flush()刷新缓存
4、创建该socket所对应的输入流,获取服务器的相应报文
服务端:
1、通过建立相应端口的socket实现监听某端口的socket请求
2、当有别的socket请求连接就开始监听socket的信息,接收到请求报文
3、根据对请求报文的解析,得到请求者的url、端口还有请求信息
4、将响应信息还有必要的头部连接形成响应报文,通过socket的输出流返回给请求客户端
二、HTTP代理服务器的基本原理:
代理服务器,即作为真实服务器的一个代理端,客户端的请求信息不是发送的真实请求的服务器而是发送的代理服务器,此时代理服务器是作为一个服务器,之后代理服务器通过解析客户端的请求信息,再向真实服务器发送请求报文,获得请求的信息,此时代理服务器是作为一个客户端。
使用代理服务器的好处是:
1、在请求客户端和真实服务器之间添加了一层,这样就可控的对于请求的响应报文做一些限制或者是改变,例如网站过滤、钓鱼网站等使得响应到客户端的信息是代理服务器处理过的;
2、还有就是请求报文先发送到代理服务器,这样代理服务器可以设立缓存,通过对请求报文解析后代理服务器可以通过查找本地缓存,如果有缓存好的,并且通过向服务器发送是否更新的信息后得到没有修改后就可以直接从代理服务器将响应报文返回给客户端,这样减少了服务端的负载,减少了流量。
三、HTTP代理服务器的程序流程图:
中间代理服务器可以设定对请求报文和响应报文做一些修改
四、实现HTTP代理服务器的关键技术及解决方案
1、关键技术:socket编程发送和接受报文
由于http的请求和响应报文都有特定的格式,所以一旦对于报文的格式理解错误就不能获得正确的响应,例如:对于请求报文每一行需要换行符,但是在编程的时候需要清楚理解换行符和回车符,如果在写请求报文时单单以\n作为换行组成的报文将得不到服务器的响应会产生400 bad request错误。
解决方案:每一行换行需要以回车符和换行符即\r \n 两个一起,这样才能得到正确的报文。在读取响应报文时也要注意会有两个符号作为一行的换行,所以在读取到\r时就表明一行已经读取完毕,而且下一行之前还有一个