一、HTTP代理服务器工作原理
HTTP协议是一种应用层协议,它默认使用的传输层协议是TCP协议,在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问,一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。代理服务器按照其使用方法和作用,分为正向代理服务器、反向代理服务器和透明代理服务器。
正向代理服务器要求客户端自己设置代理服务器的地址。客户端的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如访问国外被屏蔽了的网站,就需要使用正向代理服务器。
反向代理服务器则被设置在服务器上,无需客户端进行任何设置。换句话说就是代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。如图下图为HTTP通信链上的代理服务器。
透明代理服务器的地址只能设置在网关上,用户访问Internet的数据报必然都经过网关,该代理对用户显然是透明的,透明代理可以看作正向代理的一种特殊情况。
代理服务器通常还提供缓存目标资源的功能,当然这是可选的,这样用户下次访问同一资源时速度将很快。
二、HTTP通信
客户端与服务器之间的通信是依据TCP协议进行的,如下图为TCP时序图。
HTTP请求方法有9种,如下图:
HTTP应答常见的状态码和状态信息及其含义如下表:
HTTP协议是一种无状态的协议,即每个HTTP请求之间没有任何上下文关系,在交互式Web应用程序兴起之后,HTTP的这种无状态特性就显得不适应了,因为交互式程序通常要承上启下,那么,我们就要使用额外的手段来保持HTTP连接状态,常见的解决方法是Cookie,它是服务器发送给客户端的特殊信息,客户端每次向服务器发送请求的时候都要带上这些信息,这样服务器就可以区分不同的客户端了,基于浏览器的自动登录就是用Cookie实现的。
总结:
HTTP协议过程(一次HTTP操作称为一个事务)
三次握手、四次挥手
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
三、HTTP和HTTPS的区别
HTTP&HTTPS主要应用于Web浏览器和网站服务器之间传递数据,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此它是不安全的,不适合传输一些敏感信息。而HTTPS为了数据传输的安全,在HTTP协议的基础上加了SSL协议,SSL协议依靠证书来验证服务器的身份,并未浏览器和服务器之间的通信加密。
HTTP和HTTPS的主要区别:
1)https协议需要到ca申请证书,一般免费的证书很少,需要交费;
2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;
3)http和https使用的是完全不同的连接方式,用的端口也不一样前者是80,后者是443;
4)http的连接很简单,是无状态的;https协议是由ssl+https协议构建的可进行加密传输、身份认证的网络协议比http协议安全。
拓展:
SSH协议(安全外壳协议),是建立在应用层基础上的安全协议,SSH是目前较为可靠的,专门为远程登录会话和其他网路服务提供安全性的协议,并且用SSH协议传输的数据时经过压缩的,能够加快数据传输的速度,SSH协议提供两种级别的安全验证,一:基于口令验证;二:基于秘钥的安全验证。SSH协议的组成部分:传输层协议、用户认证协议、连接协议。
传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
SSH运行过程:
1)Client端向Server端发起SSH连接请求。
2)Server端向Client端发起版本协商。
3)协商结束后Server端发送Host Key公钥 Server Key公钥,随机数等信息。到这里所有通信是不加密的。
4)Client端返回确认信息,同时附带用公钥加密过的一个随机数,用于双方计算Session Key。
5)进入认证阶段。从此以后所有通信均加密。
6)认证成功后,进入交互阶段。