http工作原理和特点

博客分类: web

一.http的基本原理:

HTTP协议的工作原理主要包括四个步骤

图1 HTTP协议工作原理 
  (1)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。( 客户端-----通过socket建立连接-----服务器) 
  (2)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1。其中,文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。 
  (3)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为www.mycompany.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。其中,常用的HTTP头信息如下。 
  HTTP 1.0 200 Ok:这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。 
  MIME_Version:1.0:它指示MIME类型的版本。 
  content_type:类型:这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。 
  content_length:长度值:它指示HTTP体信息的长度(以字节为单位)。 
  (4)关闭连接 :当应答结束后,Web浏览器与Web服务器必须断开,以保证其他Web浏览器能够与Web服务器建立连接。

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例

二.http的特点 
    1)支持客户/服务器模式。(c/s模式) 
    2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有          GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得     HTTP服务器的程序规模小,因而通信速度很快。 
    3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 
    4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 
    5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

三.cookie和session解决http的无状态的问题 
两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session 
由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。 
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从:[系统盘]:\Documents and Settings\[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。 
(理解:cookie的创建时间在服务器响应后,存放信息是服务器发来的超文本和个人信息还有sessionId)

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。 
会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘中的cookie可以在不同浏览器间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式 
Cookie支持跨域名访问,例如将domain属性设置为“.helloweenvsfei.com”,则以“.helloweenvsfei.com”为后缀的所有域名均可以访问该Cookie。跨域名Cookie现在被广泛用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

生成Cookie对象: 
java.util.Date date = new java.util.Date(); 
Cookie c = new Cookie("lastVisited",date.toString());

前面一个参数是key,后面一个参数是value值。

设定Cookie的有效期: 
c.setMaxAge(60*60*24);//单位为毫秒

Cookie的路径与域名: 
c.setPath("/"); 
c.setDomain(".v512.com");

发送Cookie对象: 
response.addCookie(c);

读取Cookie:

Cookie [] cookies=request.getCookies(); 
Cookie c = null; 
if(cookies!= null) 

    for(int i=0;i<cookies.length;i++) 
    { 
         c = cookies[i]; 
         out.println("cookie name:"+c.getName()+"<br>"); 
         out.println("cookie value:"+c.getValue()+"<br>"); 
     }

}

·修改Cookie: 
Cookie [] cookies=request.getCookies(); 
Cookie c = null; 
}

·删除Cookie: 
即把Cookie的失效时间设置为0即可。

·Cookie文本信息的大小和数量有限制。以明文保存,没有任何加密措施。 
for(int i=0;i<cookies.length;i++) 

         c = cookies[i]; 
         if(c.getName().equals("lastVisited")) 
         { 
             c.setValue("2010-10-1"); 
             c.setMaxAge(6000); 
             response.addCookie(c); 
         } 
}

要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。 正式这样一个过程,用户的状态也就得以保持了。

综述:HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了

四、cookie 和session 的区别: 
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 
   考虑到安全应当使用session,将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中 
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 
   考虑到减轻服务器性能方面,应当使用COOKIE 
4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。 
5.session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。 
6.session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。 
7.session调用了 session.invalidate()方法或者前后两次请求超出了session指定的生命周期时间,Session会销毁,否则在用户会话结束后就会关闭了。但若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。保存在硬盘里的,可以长期保存 
8.session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 
9.Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

五、session机制 
    一个唯一的标识用于 会话 
    过期机制 
六、HttpSession是Java平台对session机制的实现规范 
  cookie 
  httpssionListener 
  web容器(Jboss,tomcat,Jetty,weblogic...) 
七、容器实现HTTPsession面临的问题 
  集群环境下共享困难 
  非持久,吃内存

http工作原理和机制相关推荐

  1. Spring MVC的工作原理和机制

    Spring  MVC的工作原理和机制 参考: springMVC 的工作原理和机制 - 孤鸿子 - 博客园 https://www.cnblogs.com/zbf1214/p/5265117.htm ...

  2. 原子性概念及原子类的工作原理-CAS机制

    1.原子性概念 原子性是指一个操作是不可中断的,要么全部执行成功,要么全部执行失败,有着"同生共死"的感觉.即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其它的线程干扰. ...

  3. IPFS系列 - 工作原理和机制

    IPFS的工作原理和机制 (1) IPFS为每⼀个文件分配一个独一无⼆的哈希值(文件指纹:根据文件的内容进行创建),即使是两个文件内容只有1个比特的不相同,其哈希值也不相同.这个方式使得IPFS可以支 ...

  4. springMVC 的工作原理和机制

    转载自 https://www.cnblogs.com/zbf1214/p/5265117.html 工作原理 上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器, ...

  5. JavaScript 工作原理之五-深入理解 WebSockets 和带有 SSE 机制的HTTP/2 以及正确的使用姿势(译)...

    原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第五章. 现在 ...

  6. Android开发:图文分析 Handler通信机制 的工作原理

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 下面,将图文详解 Handler机制 的工作原理 目录 1. 定义 一套 Android 消息传递机制 2. 作用 在多线程的 ...

  7. 分布式系统熔断机制的工作原理

    目录 前言 1. 问题产生 2. 形成过程 2. 服务熔断和服务降级区别 2.1 服务降级:系统有限的资源的合理协调 2.2 服务熔断:应对雪崩效应的链路自我保护机制.可看作降级的特殊情况 2.3 服 ...

  8. java的两种运行机制_Java☞JVM工作原理

    参考博客:1 2 3 JVM工作原理 java虚拟机体系结构 Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平 ...

  9. 以太坊完整工作原理和运行机制!

    以太坊完整工作原理和运行机制! 2018年04月28日 00:00:00 阅读数:26 作者 | Preethi Kasireddy 编译 | 老曹.Aholiab 链圈的人提起「以太坊」三个字想必是 ...

  10. 理解并取证:以太通道的动态协商机制的工作原理

    理解并取证:以太通道的动态协商机制的工作原理 取自博主<思科CCNP交换技术详解与实验指南>试读版 3.1理解以太通道的理论部分 3.1.1提出以太通道的原因.以太通道的作用和功能 3.1 ...

最新文章

  1. JAVA逆向反混淆-追查Burpsuite的破解原理(转)
  2. CNN为何把地震和计划生育扯一起
  3. Unity3d 简单的小球沿贝塞尔曲线运动(适合场景漫游使用)
  4. code iban 是有什么组成_深入浅出Zookeeper(四):客户端的请求在服务器中经历了什么...
  5. 大工17秋《计算机文化基础》在线测试1,奥鹏大工15秋《计算机文化基础》在线测试1答案...
  6. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
  7. 小米上市 365 天:雷军的坚守与败退
  8. 性能测试的那些事儿!
  9. 秩和比算法matlab程序,Matlab学习系32. 秩和比综合评价法.docx
  10. Sketch 56.2 Mac中文版
  11. 连接SQLserver数据库发生错误,提示用户sa登录失败解决方法(亲试有用)
  12. Keras中那些学习率衰减策略
  13. python数组求和_python数组求和
  14. 信息系统项目管理师必背核心考点(四十三)预期货币价值(EMV)
  15. 【论文分享】GeoGAN:从卫星图像中生成地图的标准层
  16. 台式计算机使用寿命,惠普台式电脑怎么样(深度评测其质量及使用寿命)
  17. 【爬虫】 Squid 3.5.20 安装与配置 高匿代理
  18. resetFields方法重置表单
  19. Linux文件系统--文件类型
  20. c/c++下取消结构体字节对齐方法

热门文章

  1. Latex中的花体格式
  2. (CVPR-2022)具有密集 3D 表示和基准的野外步态识别
  3. kmz转换为dwg_CAD软件中的PDF插件如何实现转换DWG?一篇文章完整解释
  4. 生命计算机在线,抖音生命计算器在线测试
  5. matlab泊松分布图,将泊松分布拟合到MATLAB中的一组数据
  6. java获取本机IP地址,非127.0.0.1
  7. 致远项目管理SPM系统五大技术平台层-CMP能力概述
  8. SCARA四轴机器人丝杆花键_视频图文为你揭秘SCARA机器人!马了备用!
  9. Linux 远程拷贝命令
  10. 阿里巴巴图表库 Bizcharts 正式开源