TCP/IP通信案例
HTTP代理服务器的工作原理
- 在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。
- 一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。
- 代理服务器按照其使用方式和作用,分为正向代理服务器和反向代理服务器以及透明代理服务器。
正向代理服务器
- 正向代理要求客户端自己设置代理服务器的地址。
- 客户端的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。
比如处于防火墙内的局域网机器要访问Internet,或者访问一些被屏蔽掉的网站,就需要正向代理服务器。
反向代理服务器
- 反向代理被设置在服务器端,因而客户端无需进行任何设置。
- 反向代理指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。
这种情况下,代理服务器对外就表现为一个真实的服务器。 - 各大网站通常分区域设置了多个代理服务器,所以在不同的地方ping同一个域名可能得到不同的IP地址。因为这些IP地址实际上都是代理服务器的IP地址。
透明代理
- 透明代理只能设置在网关上。用户访问Internet的数据必然都经过网关,如果在网关上设置代理,则该代理对用户来说是显然透明的。
- 透明代理可以看作是正向代理的一种特殊情况。
代理服务器
- 正向代理服务器和客户端处于同一个逻辑网络中。该逻辑网络可以是一个本地LAN,也可以是一个更大的网络。
- 反向代理服务器和真正的Web服务器也位于同一个逻辑网络中,这通常由提供网站的公司来配置和管理。
service
- serveice是一个脚本程序,
/usr/sbin/service
,它为/etc/init.d/
目录下的众多服务器程序(如httpd,vsftpd,sshd,mysqld等)的启动、停止、以及重启等动作提供了一个统一的管理。
本地名称查询
- 一般来说,通告域名来访问Internet上的某台主机时,需要使用DNS服务来获取该主机的IP地址。
但如果我们通过主机名来访问本地局域网上的机器,则可通过本地的静态文件夹来获得该机器的IP地址。 - 在
/etc/hosts.conf
里面。用户可以通过修改这个文件来自定义系统解析主机名的方法和顺序。
一般是先访问本地文件/etc/hosts
,再访问DNS服务。
HTTP
HTTP请求
1 2 3 4 |
GET http://www.baidu.com/index.html HTTP/1.0 User-Agent: Wget/1.12 (linux-gnu) Host: www.baidu.com Connection: close |
- 这些方法中,HEAD,GET,OPTIONS和TRACE被视为安全的方法,因为它们只是从服务器获取资源或信息,而不对服务器进行任何修改。
而POST,PUT,DELETE和PATCH则影响服务器上的资源。 - 另一方面,GET,HEAD,OPTIONS,TRACE,PUT和DELETE等请求方法被认为是等幂的,也就是多次连续的、重复的请求和只发送一次该请求具有完全相同的效果。
而POST方法则不同,连续多次发送同样一个请求可能进一步影响服务器上的资源。 - 在旧的HTTP协议中,Web客户端和Web服务器之间的一个TCP连接只能为一个HTTP请求服务。当处理完客户的一个HTTP请求之后,Web服务器就主动将TCP连接关闭了。
此后,同一个客户如果要再发送一个HTTP请求的话,必须与服务器建立一个新的TCP连接,也就是说,同一个客户的多个连续的HTTP请求不能公用同一个TCP连接,这称为短连接。 - 长连接与之相反,指多个请求可以使用同一个TCP连接。
上面的Connection就是专门用于告诉对方一个请求完成之后该如何处理连接的。close
为立即关闭。keep-alive
为保持一段时间或等待后续请求。- 在所有头部字段之后,HTTP请求必须包含一个空行,以标识头部字段的结束。
请求行和每个头部字段都必须以<CR><LF>
也就是回车和换行结束。
而空行必须只包含一个<CR><LF>
,不能有其他的字符,甚至是空白字符也不行。
空行之后,HTTP请求可以包含可选的消息体。如果消息体非空,则HTTP请求的头部字段中必须包含描述该消息体长度的字段“Content-Length”。
HTTP应答
1 2 3 4 5 6 7 |
HTTP/1.0 200 OK Server: BWS/1.0 Content-Length: 8024 Content-Type: text/html;charset =gbk Set-Cookie: BAIDUID=A5B6C72D48CF639CE8896FD79A03FBD8:FG=1; expires=Wed, 04 -Jul-42 00:10:47 GMT; path=/; domain=.baidu.com Via: 1.0 localhost (squid/3.0 STABLE18) |
- 第1行是状态行。
HTTP/1.0
指的是服务器使用的HTTP协议的版本号。200 OK
是状态码和状态信息。 - 2到7行是HTTP应答的头部字段。
Server: BWS/1.0
表示目标Web服务程序的名字是BWS(Baidu Web Server)。Content-Length: 8024
表示目标文档的长度是8024个字节。Content-Type: text/html;charset =gbk
中,text是主文档类型,html是子文档类型。text/html
表示目标文档index.html是text类型中的html文档。charset
是text文档类型的一个参数,用于指定文档的字符编码。Set-Cookie: BAIDUID=A5B6C72D48CF639CE8896FD79A03FBD8:FG=1; expires=Wed,04 -Jul-42 00:10:47 GMT; path=/; domain=.baidu.com
表示服务器传送一个Cookie给客户端。BAIDUID是指定Cookie的名字,expires指定Cookie的生存时间,domain和path指定该Cookie生效的域名和路径。Via: 1.0 localhost (squid/3.0 STABLE18)
表示HTTP应答在返回过程中经历过的所有代理服务器的地址和名称。
- 在所有头部字段之后,HTTP应答必须包含一个空行,以标识头部字段的结束。
状态行和每个头部字段都必须以<CR><LF>
结束;而空行则必须只包含一个<CR><LF>
,不能有其他字符,甚至是空白字符。 - 空行之后是被请求文档index.html的内容。
Cookie
- HTTP协议是一种无状态的协议,也就是每个HTTP请求之间没有任何上下文关系。
如果服务器处理后续HTTP请求时需要用到前面的HTTP请求的相关信息,客户端必须重传这些信息。这将会导致HTTP请求必须传输更多的数据。 - 为了解决上述这种上下文关系,就需要额外的手段来保持HTTP连接状态,常见的解放方法就是Cookie。
- Cookie是服务器发送给客户端的特殊信息(通过HTTP应答的头部字段“Set-Cookie”),客户端每次向服务器发送请求的时候都需要带上这些信息。这样服务器就可以区分不同的客户了。
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Shell学习总结一08/07
- ♥ Linux_ 命令大全 系统设置03/16
- ♥ Shell 语法记述 第一篇09/04
- ♥ Linux_ 命令大全 磁盘维护03/16
- ♥ gdb的操作使用03/20
- ♥ Cef:介绍06/29