《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器

第四章      TCP/IP通信案例:访问Internet上的Web服务器

  HTTP协议是工作在应用层上的协议,其应用十分广泛,而在进行通信的过程中,经常使用HTTP代理服务器。HTTP代理服务器主要分为:正向代理服务器,反向代理服务器和透明代理服务器。其中,正向代理服务器要求客户端自己设置代理服务器的地址,客户的每次请求都直接发送至该代理服务器,并由代理服务器来请求目标资源。比如防火墙内的局域网主机想要访问Internet或想要访问一些被屏蔽掉的国外网站,就需要使用正向代理服务器。而反向代理服务器则被设置在服务器端,用来接收用户请求,然后将请求转发给内部网络的服务器,并将内部返回的结果返回给客户端,这样,代理服务器对外就表现为一个真实的服务器。透明代理只能设置在网关上,可以看作是正向代理的特殊情况。常用的代理服务器软件有squid、varnish、nginx等,squid支持所有代理方式,而varnish只支持反向代理。

  关于HTTP协议,HTTP协议是为数不多的不以二进制作为首部和数据而是以明文作为首部和数据协议。HTTP工作在TCP之上,所以在传输数据之前,需要三次握手来建立TCP连接。下面我们以HTTP首部为例来简单讲解一下HTTP协议,首先是HTTP请求报文:

  GET http://www.baidu.com/index.html HTTP/1.0

  User-Agent: Wget/1.12 (linux-gnu)

  Host: www.baidu.com

  Connection: close

  在这样一个请求报文的首部中,首先GET代表请求方法,其余常用请求方法还有HEAD、POST等,后面接的是请求资源的URL,我们来分析一下这个URL,首先的http代表使用的http协议,后面的www.baidu.com代表资源所在的主机,而后是指定资源文件的路径及名称。后面的HTTP/1.0代表客户端使用的HTTP版本号是1.0,但是目前主流的版本号为1.1。下面的User-Agent是客户端程序,Host代表目标主机名,而HTTP协议规定头部中必须包含的字段就是主机名。最后的Connection表示连接方式,close代表短连接,此次传输完毕连接就可以断开,而keep-alive代表长连接。在头部字段的最后应该包含一个空行,只包含<CR><LF>,分别是回车符和换行符。

  对于HTTP应答报文:

  HTTP/1.0 200 OK

  Server: BWS/1.0

  Content-Length: 8024

  Content-Type: text/html;charset = gbk

  第一行是状态行,200 OK是状态码和状态信息,1xx代表仍有数据要发送,2xx代表成功,3xx代表资源重定向,4xx代表客户端错误,5xx代表服务器错误。后面的字段含义显而易见,值得注意的是在这个应答报文中没有Cookie,但是我们在平时使用中会用这个字段,接下来我们简单分析一下Cookie的作用。  

  前面我们说过HTML协议是无状态的协议,类似于IP协议,即HTTP报文段之间没有上下文关系,但是对于现在交互式Web应用程序,这样的协议就比较落后了,所以我们使用Cookie来唯一标识不同的客户端,用来保持HTTP的连接状态,我们浏览器内部的自动登录就是使用Cookie实现的。

posted @ 2018-02-01 14:41  Torrance_ZHANG  阅读(825)  评论(0编辑  收藏  举报