客户端服务器

cookie的工作原理

你离开我真会死。 提交于 2020-03-10 23:33:23
  Cookie是进行网站用户身份,实现服务端Session会话持久化的一种非常好方式。Cookie最早由Netscape公司开发,现在由 IETF 的 RFC 6265 标准备对其规范,已被所有主流浏览器所支持。    1. 为什么需要Cookie?   HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,数据传输完成后,连接就会关闭。再次交互数据需要建立新的连接,因此,服务器无法从连接上跟踪会话,也无法知道用户上一次做了什么。这严重阻碍了基于Web应用程序的交互,也影响用户的交互体验。如:在网络有时候需要用户登录才进一步操作,用户输入用户名密码登录后,浏览了几个页面,由于HTTP的无状态性,服务器并不知道用户有没有登录。   Cookie是解决HTTP无状态性的有效手段,服务器可以设置或读取Cookie中所包含的信息。当用户登录后,服务器会发送包含登录凭据的Cookie到用户浏览器客户端,而浏览器对该Cookie进行某种形式的存储(内存或硬盘)。用户再次访问该网站时,浏览器会发送该Cookie(Cookie未到期时)到服务器,服务器对该凭据进行验证,合法时使用户不必输入用户名和密码就可以直接登录。   本质上讲,Cookie是一段文本信息。客户端请求服务器时,如果服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。客户端浏览器保存该Cookie信息

重温FTP的主动模式和被动模式

廉价感情. 提交于 2020-03-10 10:33:57
最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同。在此重温一下FTP的主动模式和被动模式的相关知识。 在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。 1.FTP的PORT(主动模式)和PASV(被动模式) (1) PORT(主动模式) PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图: (2) PASV(被动模式) PASV 是Passive的缩写,中文成为被动模式,工作原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,

redis-like项目

守給你的承諾、 提交于 2020-03-10 09:00:15
Myredis 项目源码 项目目标 项目使用技术栈与平台 项目背景 认识缓存 认识redis 项目功能 项目演示 启动服务器 启动一个客户端redis-cli 插入一些数据 再启动一个客户端读取数据 系统流程 系统设计 socket设计 协议支持的数据类型 创建一个内存数据库 命令 开发步骤 创建Maven 实现客户端与服务器连接 获取socket的I/O流 建立一个固定大小的线程池 redis协议的处理 内存数据库 命令实现 项目总结 项目参考资料 项目源码 项目源码: https://gitee.com/li_tong_jia/project.git 项目目标 巩固多线程、集合框架、TCP、字节流、redis等技术 实现redis协议、命令等 可以使用redis-cli进行测试 项目使用技术栈与平台 所用技术:redis,字节流协议,内存数据库,多线程等 平台与环境:Windows/Mac,IDEA,Maven 项目背景 认识缓存 实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。 例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。 认识redis redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多

科普-- 白话HTTPS

会有一股神秘感。 提交于 2020-03-10 05:59:06
HTTPS是传输协议 吗? HTTPS与HTTP有什么关系? HTTPS为什么会安全? 闲扯一下 Mac笔记本、Windows台式机、Linux主机。像这三种类型,它们硬件不同,系统不同,服务端处理的编程语言不同。它们之间却可以在网络的世界了自由联通。靠的是什么呢? 靠的是它们遵守相同的规则(如:HTTP)。应用层用什么格式(语言编码,报文字段)封装报文、传输层如何将大量的数据分段,并给每帧数据添加编号和端口信息、网络层如何给没帧数据添加IP地址,目标MAC地址、数据链路层如何将数字信息通过网卡发出去。 HTTPS是传输协议吗? 目前常见的应用层协议 ​ 好像没有看到HTTPS啊? 没错,HTTPS并非TCP/IP协议族中的一员,它其实是HTTP协议+SSL协议的组合体,是披着SSL外衣的HTTP。 HTTPS与HTTP有什么关系? HTTP实现的功能 :一种机制简单(这也是从早期众多传输协议中走出来的原因)的超文本传输协议,为客户端和服务器通信服务,是处在TCP/IP协议族中的应用层协议。 HTTP在发送请求时,采用四层架构。 应用层:提供多种应用服务,如:HTTP FTP DNS等,可以直接提供给开发者使用。 传输层:网络间数据的传输,如: TCP TDP,报文 数据分割打包成帧 网络层:处理网络中流动的数据包,在复杂的网络段中选择一条传输路线,将数据包送到目的地

TCP的三次握手与四次挥手(详解+动图)

半腔热情 提交于 2020-03-09 21:53:26
TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80。 TCP报文首部 源端口和目的端口,各占2个字节,分别写入源端口和目的端口; 序号,占4个字节, TCP连接中传送的字节流中的每个字节都按顺序编号 。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始; 确认号,占4个字节,是 期望收到对方下一个报文的第一个数据字节的序号 。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这 表明B正确的收到了A发送的到序号700为止的数据 。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701; 数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远; 保留,占6位,保留今后使用,但目前应都位0; 紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据; 确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1; 推送PSH,当两个应用进程进行交互式通信时

几个重要的TCP/IP选项解析(Java Socket)

帅比萌擦擦* 提交于 2020-03-09 21:43:40
Socket选择可以指定Socket类发送和接受数据的方式。在JDK1.4中共有8个Socket选择可以设置。这8个选项都定义在 java.net .SocketOptions接口中。定义如下: public final static int TCP_NODELAY = 0x0001;public final static int SO_REUSEADDR = 0x04;public final static int SO_LINGER = 0x0080;public final static int SO_TIMEOUT = 0x1006;public final static int SO_SNDBUF = 0x1001;public final static int SO_RCVBUF = 0x1002;public final static int SO_KEEPALIVE = 0x0008;public final static int SO_OOBINLINE = 0x1003; 有趣的是,这8个选项除了第一个没在SO前缀外,其他7个选项都以SO作为前缀。其实这个SO就是Socket Option的缩写;因此,在Java中约定所有以SO为前缀的常量都表示Socket选项;当然,也有例外,如TCP_NODELAY.在Socket

request response session的常用方法

偶尔善良 提交于 2020-03-09 17:43:24
.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。 序号 方 法 说 明 1 object getAttribute(String name) 返回指定属性的属性值 2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 3 String getCharacterEncoding() 返回字符编码方式 4 int getContentLength() 返回请求体的长度(以字节数) 5 String getContentType() 得到请求体的MIME类型 6 ServletInputStream getInputStream() 得到请求体中一行的二进制流 7 String getParameter(String name) 返回name指定参数的参数值 8 Enumeration getParameterNames() 返回可用参数名的枚举 9 String[] getParameterValues(String name) 返回包含参数name的所有值的数组 10 String getProtocol() 返回请求用的协议类型及版本号 11 String getScheme() 返回请求用的计划名,如:http

cookie and session

牧云@^-^@ 提交于 2020-03-09 17:05:06
##### cookie 通过在客户端记录信息确定用户身份,Session通过在服务记录信息确定用户身份 http信息是无状态的协议。一旦数据交换完毕,客户端与服务器的链接就会关闭,再次交换数据需要建立新的链接。这就意味者服务器无法在链接上跟踪会话。 cookie就是这样的一种机制,它可以弥补http无状态的不足。 - 通过request.getCookie()获取客户端提交的所有的Cookie(Cookie[])数组形式返回。 - response.addCookie(Cookie cookie) 向 客户端设置Cookie. - cookie的不可夸域名性 Cookie在客户端是由浏览器来管理的 不同的域名的客户端是不能相互操作的 - cookie 的删除与修改 Cookie如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。 如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性 ## Session是服务器端使用的一种记录客户端状态的 机制,使用上比Cookie简单些,相应的增加服务的存储压力。 - session保存在服务器端

浓缩精华的架构演进过程,经验总结,值得收藏!

◇◆丶佛笑我妖孽 提交于 2020-03-09 12:27:53
架构设计的演进过程 业务驱动技术的发展是亘古不变的道理。最开始的时候,业务量少,业务复杂度低,采取的技术也相对简单,基本满足用户对功能的需求。随着IT信息化的普及,更多的交易放到了网络上,信息量增加和访问次数频繁就是要解决的问题了。因此,逐渐加入了缓存、集群等技术手段。同时对业务的扩展性和伸缩性的要求也越来越高。高并发、高可用、可伸缩、可扩展、够安全的软件架构一直是架构设计追求的目标。今天我们来看一下架构设计经历了哪些阶段,每个阶段都解决了哪些问题,又引出了哪些新问题。主要是引起大家的思考,在不同的业务发展阶段采取合适技术手段,用变化拥抱变化是IT人追求的目标。 应用与数据一体模式 最早的业务应用以网站、OA等为主,访问的人数有限,单台服务器就能够应付。通常,将应用程序和数据库部署到一台服务器上面,如图1-1所示。在这一阶段,我们利用LAMP(Linux Apache MySQL PHP)技术就可以迅速搞定,并且这些工具都是开源的。很长一段时间内,有各种针对这种应用模式的开源代码可以使用。这种模式基本上没有高并发的要求,可用性也很差。有的服务器采用托管模式,上面就安装了不同的业务应用,一旦服务器出现问题,所有的应用就罢工了。不过其开发和部署成本相对较低,适合刚刚起步的应用服务。图1 就描述了单个应用和数据库运行在单台服务器的模式,我们称这种模式为应用与数据一体模式。 图 1

网络协议

こ雲淡風輕ζ 提交于 2020-03-09 11:01:08
网络协议介绍 OSI(Open System Interconnect)七层模型:通信的特点是对等通信 从上往下分别为 应用层:为应用程序提供服务,此层应有的网络协议有HTTPS,HTTP,FTP等协议 实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。 表示层:数据格式化,数据加密;表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别 由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。 会话层:建立,管理,维护会话,会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。 会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息