如何保持http会话

来源:互联网 发布:未识别的网络win10 编辑:程序博客网 时间:2024/05/16 17:41

 刚才面试被别人问到这个问题,不会。记录一下。

在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, 简单的讲,当浏览器向服务器发送Http请求的时候, HTTP服务器会产生一个SessionID,这个SessionID就唯一的标识了一个客户端到服务器的请求会话过程。

为了保持这个状态, 当服务端向客户端回应的时候,会附带Cookie信息,当然,Cookie里面就包含了SessionID客户端在执行一系列操作时向服务端发送请求时,也会带上这个SessionID, 一般来说,Session也是一个URL QueryParameter ,就是说,session可以以Key-Value的形式通过URL传递。比如,http://www.51etest.com/dede/login.php?PHPSESSIONID=7dg3dsf19SDf73wqc32fdsf
一般而言,浏览器会自动把此Session信息放入Header报文体中进行传递。如果浏览器不支持Cookie,那么,浏览器会自动把SessionID附加到URL中去。

哈哈,Session信息中放在Header报文体中的,我点击人人网上的“好友”链接,看看页面的request和response的http头部是什么:

Response Headers

Cache-Controlno-cacheConnectionkeep-aliveContent-EncodinggzipContent-Typeapplication/x-javascript; charset=utf-8DateWed, 07 Mar 2012 13:15:36 GMTExpiresWed, 07 Mar 2012 13:15:35 GMTServernginx/0.8.54Set-Cookiean_slot=3555; path=/ebpnTransfer-Encodingchunked


Request Headers

Accept*/*Accept-CharsetISO-8859-1,utf-8;q=0.7,*;q=0.7Accept-Encodinggzip, deflateAccept-Languageen-us,en;q=0.5Connectionkeep-aliveCookiean_slot=3554; _r01_=1; ick=7f9a8e6a-8f3c-4f09-b819-f4a02c6e41bf; _de=E66E3FF6EBCA21E3757173A867DCB561696BF75400CE19CC; p=fbd97453bed0f738d2e166e4edaac7117; ap=322837427; first_login_flag=1; t=7a870c82d2a425ec3627ec81ef40c2997; societyguester=7a870c82d2a425ec3627ec81ef40c2997; id=322837427; xnsid=12b3b8d6; loginfrom=null; depovince=HUB; jebecookies=d93ab225-a088-4432-8014-0cfb0484f3ba|||||Hostebp.renren.comRefererhttp://friend.renren.com/myfriendlistx.doUser-AgentMozilla/5.0 (Ubuntu; X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0

 

注意上面那个id=322837427是什么意思,事实上http://www.renren.com/322837427就是我的人人网主页。似乎没有看到sessionID,只是response的an_slot比request的an_slot加了个1。

同时我们也看到人人网用的web服务器是Nginx,它是Apache不错的替代品,其源代码使用2-clause BSD-like license。Nginx还是优秀的反向代理和邮件代理服务器。Nginx使用C语言编写,采用epoll and kqueue作开发模型,支持高达50,000个并发连接的响应。

 

百科了一下什么叫“反向代理服务器”。

通常的代理服务器, 只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由 于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet 上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访 问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而 不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理 服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

 

原创粉丝点击