`
pluto418
  • 浏览: 169481 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HTTP协议--cookie、session、缓存与代理

    博客分类:
  • J2EE
阅读更多

1 Cookie Session

Cookie Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决 HTTP无状态的问题而所做的努力。

Session可以用 Cookie来实现,也可以用 URL回写的机制来实现。用 Cookie来实现的 Session可以认为是对 Cookie更高级的应用。

1.1 两者比较

Cookie Session有以下明显的不同点:

1 Cookie将状态保存在客户端, Session将状态保存在服务器端;

2 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。 Cookie最早在 RFC2109中实现,后续 RFC2965做了增强。网络服务器用 HTTP头向客户端发送 cookies,在客户终端,浏览器解析这些 cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些 cookies Session并没有在 HTTP的协议中定义;

3 Session是针对每一个用户的,变量的值保存在服务器上,用一个 sessionID来区分是哪个用户 session变量 ,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用 cookie时,这个值也可能设置为由 get来返回给服务器;

4)就安全性来说:当你访问一个使用 session 的站点,同时在自己机子上建立一个 cookie,建议在服务器端的 SESSION机制更安全些 .因为它不会任意读取客户存储的信息。

1.2 Session 机制

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个 session的时候,服务器首先检查这个客户端的请求里是否已包含了一个 session标识  - 称为 session id,如果已包含一个 session id则说明以前已经为此客户端创建过 session,服务器就按照 session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含 session id,则为此客户端创建一个 session并且生成一个与此 session相关联的 session id session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

1.3 Session 的实现方式

1.3 .1   使用 Cookie 来实现

服务器给每个 Session分配一个唯一的 JSESSIONID 并通过 Cookie发送给客户端。

当客户端发起新的请求的时候,将在 Cookie头中携带这个 JSESSIONID。这样服务器能够找到这个客户端对应的 Session

流程如下图所示:
   

1.3 .2   使用 URL 回显来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带 JSESSIONID的参数,这样客户端点击任何一个链接都会把 JSESSIONID带会服务器。

如果直接在浏览器输入服务端资源的 url来请求该资源,那么 Session是匹配不到的。

Tomcat Session的实现,是一开始同时使用 Cookie URL回写机制,如果发现客户端支持 Cookie,就继续使用 Cookie,停止使用 URL回写。如果发现 Cookie被禁用,就一直使用 URL回写。 jsp开发处理到 Session的时候,对页面中的链接记得使用 response.encodeURL()

1.3.3 Cookie 相关的 HTTP 扩展头

1Cookie 客户端将服务器设置的 Cookie返回到服务器

2Set-Cookie 服务器向客户端设置 Cookie

3Cookie2 (RFC2965)): 客户端指示服务器支持 Cookie的版本

4Set-Cookie2 (RFC2965) 服务器向客户端设置 Cookie

1.3.4 Cookie 的流程

服务器在响应消息中用 Set-Cookie头将 Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在 Cookie头中发送给服务器。从而实现会话的保持。

流程如下图所示:

2 缓存的实现原理

2.1 什么是 Web 缓存

WEB缓存 (cache)位于 Web服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如 html页面, 图片,文件,当下一个请求来到的时候:如果是相同的 URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

HTTP协议定义了相关的消息头来使 WEB缓存尽可能好的工作。

2.2 缓存的优点

q      减少相应延迟 :因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让 web服务器看上去相应更快。

q      减少网络带宽消耗 :当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

2.3 与缓存相关的 HTTP 扩展消息头

q      Expires:指示响应内容过期的时间,格林威治时间 GMT

q      Cache-Control:更细致的控制缓存的内容

q      Last-Modified:响应中资源最后一次修改的时间

q      ETag:响应中资源的校验值,在服务器上某个时段是唯一标识的。

q      Date:服务器的时间

q      If-Modified-Since:客户端存取的该资源最后一次修改的时间,同 Last-Modified

q      If-None-Match:客户端存取的该资源的检验值,同 ETag

2.4 客户端缓存生效的常见流程

服务器收到请求时,会在 200OK中回送该资源的 Last-Modified ETag头,客户端将该资源保存在 cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带 If-Modified-Since If-None-Match两个头。两个头的值分别是响应中 Last-Modified ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回 304响应。常见流程如下图所示:

2.5 Web 缓存机制

HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量; HTTP利用一个“过期( expiration)”机制来为此目的。后者减少了网络应用的带宽; HTTP用“验证( validation)”机制来为此目的。

HTTP定义了 3种缓存机制:

1Freshness:允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如, Expires回应头给了一个文档不可用的时间。 Cache-Control中的 max-age标识指明了缓存的最长时间;

2Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个 Last-Modified回应头,缓存能够使用 If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;

3Invalidation 在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个 URL关联到一个缓存回应,但是其后跟着 POST PUT DELETE的请求的话,缓存就会过期。

3 断点续传和多线程下载的实现原理

q      HTTP协议的 GET方法,支持只请求某个资源的某一部分;

q      206 Partial Content 部分内容响应;

q      Range 请求的资源范围;

q      Content-Range 响应的资源范围;

q      在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,来实现断点续传。

分块请求资源实例:

Eg1Range: bytes=306302- :请求这个资源从 306302个字节到末尾的部分;

Eg2Content-Range: bytes 306302-604047/604048:响应中指示携带的是该资源的第 306302-604047的字节,该资源共 604048个字节;

客户端通过并发的请求相同资源的不同片段,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的 FlashGet和迅雷基本都是这个原理。

多线程下载的原理:

q      下载工具开启多个发出 HTTP请求的线程;

q      每个 http请求只请求资源文件的一部分: Content-Range: bytes 20000-40000/47000

q      合并每个线程下载的文件。

4 https通信过程

4.1 什么是 https

HTTPS(全称: Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP通道,简单讲是 HTTP的安全版。即 HTTP下加入 SSL层, HTTPS的安全基础是 SSL,因此加密的详细内容请看 SSL

见下图:
   

https所用的端口号是 443

4.2 https 的实现原理

有两种基本的加解密算法类型:

1对称加密 :密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有 DES AES等;

2非对称加密 :密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有 RSA DSA等。

下面看一下 https的通信过程:
  

https通信的优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

5 http代理

5.1 http 代理服务器

代理服务器英文全称是 Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。

代理服务器是介于浏览器和 Web服务器之间的一台服务器,有了它之后,浏览器不是直接到 Web服务器去取回网页而是向代理服务器发出请求, Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

而且,大部分代理服务器都具有缓冲的功能,就好象一个大的 Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从 Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

更重要的是: Proxy Server(代理服务器 ) Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI)模型的对话层。

5.2 http 代理服务器的主要功能

主要功能如下:

1)突破自身 IP访问限制,访问国外站点。如:教育网、 169网等网络用户可以通过代理访问国外网站;

2)访问一些单位或团体内部资源,如某大学 FTP(前提是该代理地址在该资源的允许访问范围之内 ),使用教育网内地址段免费代理服务器,就可以用于对教育 网开放的各类 FTP下载上传,以及各类资料查询共享等服务;

3)突破中国电信的 IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同 Serve对地址的封锁是不同的。所以不能访问时可以换一个国 外的代理服务器试试;

4)提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度;

5)隐藏真实 IP:上网者也可以通过这种方法隐藏自己的 IP,免受攻击。

5.3 http 代理图示

http代理的图示见下图:
  

对于客户端浏览器而言, http代理服务器相当于服务器。

而对于 Web服务器而言, http代理服务器又担当了客户端的角色。

 

转:http://www.blogjava.net/zjusuyong/articles/304788.html

分享到:
评论

相关推荐

    Tomcat8亲测可用 tomcat-redis-session-manager的jar包

    当用户在网站上进行操作时,服务器会为每个用户创建一个唯一的session ID,并将其存储在客户端(通常是cookie)和服务器端(如内存或数据库)。这样,即使用户在浏览不同的页面,服务器也能识别出同一用户。 4. **...

    cookie、session及一些缓存的对比

    状态管理是Web应用程序的核心组成部分,尤其是在C# ASP.NET框架中,它允许开发者在无状态的HTTP协议下维持用户会话的连续性和数据的完整性。本文将深入探讨几种常见的状态管理方式,包括Cookie、Session、...

    浅析http协议、cookies和session机制、浏览器缓存.docx

    本文将深入探讨HTTP协议的几个核心概念:HTTP头、Cookies、Session机制以及浏览器缓存。 首先,HTTP请求头和响应头是HTTP协议的重要组成部分,它们包含了关于请求和响应的元信息。在请求头中,例如`GET`方法、`Host...

    nginx-upstream-jvm-route nginx共享Session

    在多JVM环境中,常见的Session共享方法有Cookie Stickiness、数据库存储、Redis缓存和特定的解决方案如Nginx-upstream-jvm-route。 3. **nginx-upstream-jvm-route**:这是一个特定的Nginx模块,旨在解决Nginx与...

    cookie与session深入讲解

    - Session 与 Cookie 类似,但数据存储在服务器端,更安全。客户端通过一个称为 Session ID 的唯一标识来访问对应的 Session 数据。 - PHP 中,可以通过 `session_start()` 初始化 Session,`$_SESSION` 超全局...

    cookie&session;

    cookie和session缓存技术的思维导图,结构清晰,便于初学者阅读

    redis-session-manager-redis-session-manager-2.0.3.zip

    它可以用作数据库、缓存和消息代理。Redis以其出色的速度和丰富的数据结构而闻名,如字符串、哈希、列表、集合、有序集合等,这使得它在处理大量实时数据时表现优异。此外,Redis支持发布/订阅模式,可以进行消息...

    redis-session-manager-redis-session-manager-2.0.1.zip

    在Web应用中,session是用于跟踪用户状态的重要机制,当用户登录后,服务器会为该用户创建一个session,将用户的登录信息、购物车等数据存储在服务器端,而不是在客户端的cookie中,这样可以提高安全性并防止数据...

    Session&Cookie;.rar

    在Web开发中,Session和...了解和熟练运用Session与Cookie,对于提高网站用户体验和安全性至关重要。在实际项目中,通常结合两者使用,以达到最佳效果。在编程时,还需注意隐私政策和数据保护,确保用户数据的安全。

    JquerySession-JqueryCookie缓存插件(实例+注释说明)

    **jQuery Session & Cookie缓存插件详解** 在Web开发中,数据存储是不可或缺的一部分,而Session和Cookie作为客户端与服务器之间交互数据的重要手段,经常被用于实现用户状态管理。jQuery库提供了一些方便的方法来...

    redis-session-manager-redis-session-manager-2.0.0.tar.gz

    传统的 session 存储方式是将用户信息存储在服务器的内存中或通过 cookie,但这在分布式系统中会面临数据同步和性能瓶颈的问题。Redis Session Manager 将用户的 session 数据存储到 Redis 服务器,解决了这些问题,...

    redis-session-manager-redis-session-manager-2.1.1.tar.gz

    客户端通常将session ID保存在cookie中,每次请求时携带此ID,服务器据此找到对应的session数据。 **Redis Session Manager的工作原理** Redis Session Manager将传统的session存储从服务器内存或者文件系统中移出...

    cookie_session知识点

    这些文件通常保存在浏览器的缓存或特定的Cookie文件夹中。 2. **生命周期**:如果没有设置有效期(setMaxAge()),Cookie被视为临时Cookie,只存在于内存中,当浏览器关闭时,它们会自动消失。若指定了有效期,则...

    redis-session-manager-redis-session-manager-2.0.7.tar.gz

    1. **会话创建**:当用户首次访问Web应用时,服务器会在Redis中创建一个新的Session,并将Session ID返回给客户端(通常通过Cookie)。 2. **会话存储**:服务器将用户的会话数据(如登录状态、购物车等)序列化后...

    redis-session-manager-redis-session-manager-2.0.5.tar.gz

    Redis Session Manager是一款基于Redis数据库实现的会话管理工具,它主要用在Web应用程序中,用于高效、安全地存储和管理用户的会话数据。这个压缩包文件"redis-session-manager-redis-session-manager-2.0.5.tar.gz...

    Memcahed分布式缓存服务替换Session解决方案

    1. **SessionID生成与Cookie管理:**每次会话开始时,生成一个全局唯一标识符(GUID)作为SessionID,并将其存储在客户端的Cookie中。Cookie的作用域设置为顶级域名,允许跨子域名共享。系统通过SessionID来识别同一...

    Cookie&SessionJsp-授课

    Cookie 和 Session 在 JSP 中的应用 在 Web 开发中,会话技术是非常重要的一部分。它可以使得不同的请求之间实现数据共享,从而提高用户体验和开发效率。本文将详细介绍 Cookie 和 Session 在 JSP 中的应用,包括...

    redis-session-manager-redis-session-manager-2.0.4.tar.gz

    它通常被用作数据缓存、消息代理以及会话存储等,因为其数据持久化和高速读写能力。Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合,使得它在处理复杂数据操作时表现出色。此外,Redis提供了丰富的...

Global site tag (gtag.js) - Google Analytics