Internet

互联网是怎么工作的

一个网站只是一堆保存在硬盘上的文件,网站包含一种称为 HTML 的代码, HTML 其实是让你的浏览器(Chrome、Safrai、FireFox、IE 等)去“理解”的信息,浏览器读得懂这些代码,然后会按照代码的内容展示这些文件。

服务器本质上也是一台电脑,它们没有屏幕、鼠标或者键盘,因为它们的主要目的是存储数据,并用它来提供服务。

因此如果想要存储更多的信息,我们有两种解决方案:

增加服务器的容量
增加服务器的数量
显而易见的,一台服务器可以存储的信息是有限的,哪怕是不断增加一台机器的容量也肯定是有上限的。所以,我们可以通过第二种方式以达到「量变产生质变」的效果。

于是,一台又一台的服务器通过“网线”连接在了一起,众多服务器组成的这种结构被称为“互联网”,而其中每台服务器都被称作“节点”

网络是用来存储文件的,寻找想要的文件信息通过URL,全称是 Uniform Resoure Locator,翻译过来就是“统一资源定位符”。

https://mp.weixin.qq.com/s/jHbf-cFTu6rpVEySw-juGg中,

mp.weixin.qq.com 这样的内容被称为“域名”,其真实的 IP 地址是 121.51.79.206(这个 IP 是会变化的),而从域名到 IP 的转换是通过一个叫 DNS 服务器的东西完成的

当两台电脑需要通信时,你必须连接他们,无论通过网线还是WIFI。当每两台电脑之间都需要网线相连时,情况会很复杂,于是为了解决这个问题,网络上的每台电脑需要链接到一个叫做路由器的特殊小电脑。路由器就是为了接收电脑A发过来的数据,然后将它正确的传达给电脑B而不是电脑C。这时,所有的电脑都要链接到路由器进行通信。路由器覆盖范围有限,所以我们还需要在不同路由器之间建立连接。为了把信息从我们的网络发送到想要送去的地方,就需要把网络连接到互联网服务商(ISP)。ISP是家可以管理一些特殊的路由器的公司,这些路由器连接其他的ISP的路由器。你的网络消息可以被ISP捕获到并发送到相应的网络。互联网就是由这些所有的网络设施所组成的。想给一台电脑发送一条信息,那你必须指明它是哪台电脑,这个电脑的唯一地址就是IP地址,为了便于记忆,就有了IP地址的别名:域名。

HTTP是什么

HTTP 全称为 Hypertext Transfer Protocol,翻译为中文是“超文本传输协议”的意思,它是互联网中应用最为广泛的一种网络协议

HTTP 是一个简单的请求/响应协议,通常运行在 TCP(Transmission Control Protocol 的简称,是一种面向连接的、可靠的、基于字节流的传输层通信协议)之上。HTTP 协议指定了客户端能够发送什么样的消息给服务端,以及服务端要做出怎样的响应。

HTTP 协议是基于 B/S 架构(全称为 Browser/Server,中文是浏览器/服务器的意思)进行通信的,协议中服务器端的实现程序主要是 httpd、nginx 等,客户端的实现程序通常是 Web 浏览器,例如 Firefox、Google chrome 等。服务器端的服务是基于 TCP 的,因此为了能够随时响应客户端的请求,服务器会默认监听 TCP 协议的 80 端口,当然后期您也可以修改为其它端口。

HTTP 协议为计算机之间的通信提供了一种标准和规范,它规定了:

  • 如何构造客户端的请求数据(也称报文);
  • 如何将请求数据发送到服务器;
  • 服务器端如何响应客户端的请求。

HTTP协议的特点
1) 简单快速
HTTP 协议支持客户端、服务器端模式,简单快速,当客户端向服务器端发送请求时,只需要传送请求方法和路径即可,常用的请求方法有 GET、HEAD、POST 等,每种方法都定义了客户端与服务器之间不同的信息交换方式。

2) 灵活
HTTP 允许传输任意类型的数据对象,包括音频、视频、图片、文本等等。

3) 无连接
HTTP 是无连接的,当服务器接受到来自客户端的请求后,会按顺序依次处理这些请求,处理完成一个就关闭一个,然后开始处理下一个请求。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户端的应答后,随即断开连接,采用这种方式可以节省传输时间。

4) 无状态
HTTP 协议是无状态协议,无状态是指协议对于信息的处理没有记忆能力。也就是说来自同一个客户端的多个请求之间没有上下文关系,每次的请求都是独立的,一次请求的执行情况和结果与它前面的请求或后面的请求没有直接关系。

服务器中并不会保存客户端的状态,也就意味着如果后续处理中需要用到前面的信息,那么您就需要将它重新发送到服务端,这样可能会导致每次连接传送的数据量增大。但从另一方面来讲,如果服务器不需要先前信息时它的响应就会比较快。
HTTP/1.0 成为最重要的面向事务的应用层协议。

HTTP/1.1 是目前我们所使用的版本

HTTP/2.0 使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比 HTTP/1.1 大了好几个数量级。

HTTP/2.0 是一个二进制协议,头信息和数据体都是二进制,并且统称为“帧”(frame),即头信息帧和数据帧。而且 HTTP/2.0 协议允许服务器在未经请求的情况下,主动向客户端发送资源,即服务器推送。

HTTP的工作流程
一次完整的 HTTP 请求与响应的过程(请求和响应缺一不可)称为一个 HTTP 事务,其过程大致可分为四步:

首先客户端与服务器需要建立连接,比如当我们单击网页中的某个链接时;
建立连接后,客户端向服务器发送一个请求;
服务器在接收到请求后,给予相应的响应信息;
客户端接收到服务器所返回的信息后与服务器断开连接。
HTTP 规范定义了 9 种请求方法,常用的请求方法是 GET 和 POST。服务器将根据客户请求完成相应操作,并将最终结果返回给客户端,最后关闭连接。

浏览器以及浏览器如何运作

每启动一个应用程序必须至少启动一个进程来执行其功能。每个程序往往需要运行很多任务,那么进程就会创建一些线程来帮助它去执行这些小的任务。这里我们就引入了两个概念:进程和线程。

进程是操作系统进行资源分配和调度基本单元,可以申请和拥有计算机资源。进程是程序的基本执行体。
线程是操作系统能够进行运算调度的最小单位。一个进程可以并发多个线程,每条线程执行不同的任务。
当我们启动某个程序时,就会创建一个进程来执行任务代码,同时操作系统会为该进程分配内存和空间,该应用进程的状态都保存在该内存空间里。当应用关闭时,该内存空间就会被回收。

进程可以启动更多的进程来执行任务,由于每个进程分配的内存空间是独立的,如果两个进程间需要传递某些数据,则需要通过进程间通信管道IPC来传递。

很多应用程序都是多进程的结构,这样是为了避免某一个进程卡死,由于进程间相互独立,这样就不会影响到整个应用程序。举个例子,你可以把笔记本电脑想象成一个应用程序,外接鼠标是该应用程序的一个进程,如果外接鼠标出了问题并不会影响你继续使用笔记本电脑。

进程可以将任务分成更多细小的任务,然后通过创建多个线程并行执行不同的任务,同一进程下的线程之间是可以直接通信共享数据的。

浏览器也是一个多进程结构,但早期的浏览器并不是多进程的结构,而是一个单进程的结构。在一个进程中,由页面线程负责页面渲染和展示等;js线程执行js代码;还有其他各种线程。

单进程的结构引发了很多问题:一是不稳定,其中一个进程的卡死可能会导致整个进程出问题,比如打开多个标签页,其中一个标签页卡死可能会导致整个浏览器无法正常运行;二是不安全,浏览器之间是可以共享数据的,那js线程就可以随意访问浏览器进程内的所有数据;三是不流畅,一个进程需要负责太多事情会导致运行效率的问题。
浏览器进程负责控制Chrome浏览器除标签页外的用户界面,包括地址栏、书签、后退和前进按钮,以及负责与浏览器的其他进程协调工作;网络进程负责发起或接手网络请求;GPU进程负责整个浏览器页面的渲染;插件进程负责控制网站使用的所有插件,例如flash(这里的插件并不是指Chrome市场里安装的扩展);渲染进程用来控制显示tab标签内的所有内容,浏览器在默认情况下chromium为用户访问的网站的每个实例创建一个渲染器进程,这样可以确保来自不同站点的页面是独立呈现的,并且对同一站点的单独访问也是彼此隔离的,简单来说就是访问不同站点和统一站点的不同页面都会创建一个新的进程,每个tab及tab内的每个站点都是相互隔离互不影响的,当其中一个标签页渲染器进程卡死,并不会影响其他标签页。

当我们在地址栏里输入内容时,浏览器内部会发生什么事情?

当我们在地址栏里输入内容时,浏览器进程的UI线程会捕捉你的输入内容,如果访问的是网址,则UI线程会启动一个网络线程来请求DNS进行域名解析,接着开始连接服务器获取数据;如果你的输入不是网址而是一串关键词,浏览器就知道你是要搜索,于是就会使用默认配置的搜索引擎来查询。

网络线程获取到数据之后会发生什么样的事情?

当网络线程获取到数据后,会通过SafeBrowsing来检查站点是否是恶意站点。如果是,则会提示警告页面,告诉你这个站点有安全问题,浏览器会阻止你的访问,当然你也可以强行继续访问。SafeBrowsing是谷歌内部的一套站点安全系统,通过检测该站点的数据来判断是否安全,比如通过查看该站点的IP是否在谷歌的黑名单之内。

当返回数据准备完毕,并且安全校验通过时,网络线程会通知UI线程我就要准备好了,该你了,然后UI线程会创建一个渲染进程来渲染页面。浏览器进程通过IPC管道将数据依次传递给渲染器进程,正式进入渲染流程。

渲染器进程接收到的数据,也就是html。渲染器进程的核心任务就是把html、css、js、image等资源渲染成用户可以交互的web页面。渲染器进程的主线程将html进行解析,构造DOM数据结构。DOM也就是文档对象模型,是浏览器对页面在其内部的表示形式,是web开发程序员可以通过js与之交互的数据结构和API。

html首先经过tokeniser标记化,通过词法分析将输入的html内容解析成多个标记,根据识别后的标记进行DOM树构造,在DOM树构造过程中会创建document对象,然后以document为根节点的DOM树不断进行修改,向其中添加各种元素。html代码中往往会引入一些额外的资源,比如图片、CSS、JS脚本等。图片和CSS这些资源需要通过网络下载,或者从缓存中直接加载。这些资源不会阻塞html的解析,因为它们不会影响DOM的生成。但当html解析过程中遇到script标签,就会停止html解析流程,转而去加载并且执行js。

那么为什么不直接跳过js的加载和执行,等html解析完后,再加载运行js呢?

这是因为浏览器并不知道js执行是否会改变当前页面的HTML结构,如果js代码里用了document.write方法来修改html,那之前的html解析就没有任何意义了。这也就是为什么我们一直说要把script标签要放在合适的位置,或者使用async或defer属性来异步加载执行js。
在html解析完成后,我们就会获得一个DOM Tree(树),但我们还不知道DOM树上的每个节点应该长什么样子。主线程需要解析CSS,并确定每个DOM结点的计算样式。即使你没有提供自定义的CSS的样式,浏览器也会有自己默认的样式表,比如h2的字体要比h3的大等等。
在知道DOM结构和每个节点的样式后,我们接下来需要知道每个节点需要放在页面上的哪个位置,也就是节点的坐标以及该节点需要占用多大的区域,这个阶段被称为layout布局。

主线程通过遍历dom和计算好的样式来生成Layout Tree。Layout Tree上的每个节点都记录了x,y坐标和边框尺寸。这里需要知道的一点是DOM Tree和Layout Tree并不是一一对应的,设置了display:none的节点不会出现在Layout Tree上,而在before伪类中添加了content值的元素。content里的内容会出现在Layout Tree上,不会出现在DOM树里。这是因为DOM是通过html解析获得,并不关系样式,而Layout Tree是根据DOM和计算好的样式来生成。Layout Tree是和最后展示在屏幕上的节点是对应的。
现在我们已经知道了元素的大小形状和位置,这还不够,我们还需要知道以什么样的顺序绘制这个节点。举个例子来说,z-index属性会影响节点绘制的层级关系,如果我们按照dom的层级结构来绘制页面,则会导致错误的渲染。为了保证在屏幕上展示正确的层级,主线程会遍历Layout Tree,创建一个绘制记录表。该表记录了绘制的顺序,这个阶段被称为绘制。

现在知道了文档的绘制顺序,终于到了该把这些信息转化成像素点显示在屏幕上的时候了,这种行为被称为栅格化。Chrome最早使用了一种很简单的方式,只栅格化用户可视区域的内容,当用户滚动页面时,再栅格化更多的内容来填充缺失的部分。这种方式带来的问题显而易见,会导致展示延迟。

随着不断的优化升级,现在的Chrome使用了一种更为复杂的栅格化流程,叫做合成。合成是一种将页面的各个部分分成多个图层,分别对其进行栅格化,并在合成器线程中单独进行合成页面的技术。简单来说就是页面所有的元素按照某种规则进行分图层,并把图层都栅格化好了,然后只需要把可视区的内容组合成一帧展示给用户即可。
主线程遍历Layout Tree,生成Layer(图层) Tree。当Layer Tree生成完毕和绘制顺序确定后,主线程将这些信息传递给合成器线程。于一层可能像页面的整个长度一样大,因此合成器线程将他们切分为许多图块,然后将每个图块发送给栅格化线程。

栅格化线程栅格化每个图块,并将它们存储在GPU内存中。当图片栅格化完成后,合成器线程将收集称为“draw quads”的图块信息。这些信息里记录了图块在内存中的位置和在页面的哪个位置绘制图块的信息

根据这些信息,合成器线程生成了一个合成器帧,然后合成器帧Frame(帧)通过IPC传送给浏览器进程。接着浏览器进程将合成器帧传送到GPU,然后GPU渲染展示到屏幕上,这时候我们就可以看到页面的内容。当页面发生变化时,比如滚动了当前页面,都会生成一个新的合成器帧,新的帧再传给GPU,然后再次渲染到屏幕上。

当我们改变一个元素的尺寸位置属性时,会重新进行样式计算、布局、绘制以及后面的所有流程,这种行为我们称为重排。当我们改变某个元素的颜色属性时,不会重新触发布局,但还是会触发样式计算和绘制,这个就是重绘。

我们可以发现重排和重绘都会占用主线程,js也是运行在主线程上。既然它们都是在主线程上运行,就会出现抢占执行时间的问题。如果你写了一个不断导致重排重绘的动画,浏览器则需要在每一帧都运行样式计算、布局和绘制的操作。我们知道当页面以每秒60帧的刷新率刷新时,才不会让用户感觉到卡顿,如果你在运行动画时还有大量的js任务需要执行,因为布局、绘制和js执行都是在主线程运行的,当在一帧的时间内布局和绘制结束后,还有剩余时间,js就会拿到主线程的使用权。如果js执行时间过长,就会导致在下一帧开始时js没有及时归还主线程,导致下一帧动画没有按时渲染,就会出现页面动画的卡顿。

有什么优化的手段吗?

有。第一种就是通过requestAnimationFrame()来帮助我们解决这个问题,这个方法会在每一帧被调用,通过API的回调,我们可以把js运行任务分成一些更小的任务块(分到每一帧),在每一帧时间用完前暂停执行js执行,归还主线程。这样的话,在下一帧开始时,主线程就可以按时执行布局和绘制。React最新的渲染引擎React Fiber,就是用到了API来做了很多优化。

还有第二个优化方法,通过刚才流程图我们知道栅格化的整个流程是不占用主线程的,只在合成器线程和栅格线程中运行,这就意味着它无需和js抢夺主线程。我们刚才提到,如果反复进行重绘和重排,可能会导致掉帧,这是因为有可能js执行阻塞了主线程。而CSS中有个动画属性叫transform,通过该属性实现的动画不会经过布局和绘制,而是直接运行在合成器线程和栅格化线程中,所以不会收到主线程中js执行的影响,更重要的是通过transform实现的动画由于不需要经过布局绘制、样式计算等操作,所以节省了很多运算时间(方便实现负责的动画)。

我们常常会使用哪些手续来实现动画效果呢?位置变化、宽高变化(旋转、3D等)这些都是可以使用transform来代替的。

域名(Domain Name)是什么

域名是互联网上访问网站、应用程序或服务所必需的一种地址。它们由一个或多个单词组成,位于一个可由客户和服务器识别的地址之后。每个网站都必须有自己的域名,它可以作为用户访问网站的统一入口。域名作为网络上网站的唯一标识,它可以是可视的文本字符串,也可以是IP地址,它提供了一种方便的方式来访问网站,而不用担心网址的改变。域名可以分为不同的类型,如顶级域名(TLD)、国家域名(ccTLD)、通用域名(gTLD)等,它们可以用来表明网站属于哪个国家以及相关网站的主题。域名也可以用来表达特定网站的信息,例如域名“www.example.com”表明该网站是一个属于“example”的网站,而“.com”表明该域名是一个商业网站。此外,域名还可以用来判断域名所有者的身份,因为域名注册者必须提供联系信息,以便查询该域名的所有者。因此,域名不仅可以用来表明网站的地址,也是网站的身份识别标识。

1).com,.net,.org,.cn都属于国际顶级域名,但应用有一些不同:

2).com域名是目前国际最广泛流行的通用域名格式,现全球的用户超过1.015亿个。所有国际化公司都会注册.com域名,.com域名一般代表是商业机构。

3).net域名应用没有.com广泛,大部分使用者是网络公司。

4).org域名大部分使用者是非赢利组织或协会。

5).cn域名是由我国管理的域名,使用者基本上都是中国境内的公司和组织机构。

但是这些使用上没有任何不同,没有要求在中国境内就必须使用.cn域名,也没有规定在中国境内就不能使用.com或.net,.org域名。
例如 icoc.bz 就是一级域名,ly.icoc.bz 就是隶属 icoc.bz 的二级域名。以后更换网站,无需重新购买域名,直接做域名指向转移,就可以访问您的新网站了。

网络层引入了一套地址,用来区分不同的计算机是否属于同一个子网络,建立“主机到主机”的通信基础。这套地址就是“网络地址”,也就是我们常说的网址互联网实现的方式还规定了许多协议,其中规定网络地址的协议,叫做IP协议。IP地址用来建立互联网通信,它具有唯一性,只有知道对方主机的IP地址,我们才能和对方主机互相通信。而这一串IP地址是非常难记的.这时候域名登场了。域名(Domain Name)是IP地址的映射,每个域名对应一个唯一的IP地址。

使用域名访问网站的时候,实际上是先经过域名系统DNS (Domain Name Server)将域名解析成计算机识别的IP地址(二进制数字串),系统再通过这个IP地址建立主机与主机的通信基础。Hosts文件也可以解析域名,用来提高解析效率。在进行DNS请求以前,系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个IP地址映射,如果没有再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。当Hosts文件里面有对应的IP时,它就会直接访问那个IP,可以跳过DNS的解析这一步,提高解析效率。
cookie\session是什么?
       Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。所以出现了Cookie机制是为了辩别用户身份,进行会话跟踪而存储在客户端上的数据;

cookie是什么?

       cookie指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)客户端请求服务器,服务器就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

cookie的分类:
  cookie分为会话cookie和持久cookie,会话cookie是指在不设定它的生命周期expires时的状态,前面说了,浏览器的开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。当关闭一个页面时,不影响会话cookie的销毁。持久cookie则是设定了它的生命周期expires,此时,cookie像商品一样,有个保质期,关闭浏览器之后,它不会销毁,直到设定的过期时间。对于持久cookie,可以在同一个浏览器中传递数据,比如,你在打开一个淘宝页面登陆后,你在点开一个商品页面,依然是登录状态,即便你关闭了浏览器,再次开启浏览器,依然会是登录状态。这就是因为cookie自动将数据传送到服务器端,在反馈回来的结果。

什么是SESSION
       Session:在计算机中,称为“会话控制”。是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。在打开浏览器第一次请求服务器时,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器(通过cookie)。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:Cookie:JSESSIONID=客户端第一次拿到的session ID。服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象进行比对,提供给请求使用。当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

        Session的作用是回话跟踪,比如购物车,当A用户点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书,这几本书是谁的。

Session删除的时间:

1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。

2)程序调用HttpSession.invalidate()

3)服务器关闭或服务停止

COOKIE的用处是什么?
        每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用Cookie来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP反馈的报文通过Cookie携带Session ID反馈给客户端,以后客户端每次请求把这个会话ID发送到服务器,服务器通过比对反馈的Session ID来判断是哪个用户。

①.保存用户的登陆状态,用户进行登陆,成功登陆后,服务器生成特定的cookie返回给客户端,客户端下次访问该域名下的任何页面,将该cookie的信息发送给服务器,服务器经过检验,来判断用户是否登陆。

②.记录用户的行为,例如,京东商场左下角有一个最近访问的产品记录信息,当当网上有你最近浏览过的书籍信息,都是根据用户访问页面,记录到cookie的信息来制作的。

③.电商购物车的处理,因为在不同页面,点击添加到购物车,这个信息也是记到了cookie里面。结账的时候统一提交

④.定制页面。如果网站提供了换肤的功能,我们这个时候也是将他记录到cookie里面,以便下次访问还是保持原来的风格页面。

COOKIE的有效期?
Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。Cookie默认的maxAge值为–1。如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,

例如:

cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie

cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。

COOKIE、session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。session存于服务器端。状态信息保存在服务器端。这意味着session安全性更高

3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

4、 单个cookie保存的数*据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

5、 建议将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中

6、session保存在服务器,客户端不知道其中的信心;cookie保存在客户端,服务器能够知道其中的信息

7、session中保存的是对象,cookie中保存的是字符串

8、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的

如果客户端的浏览器禁用了Cookie怎么办?

       一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端据此来识别用户。重写URL,在URL后面追加jsessionid。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

Jsessionid?

Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。

hosting是什么

服务器和主机有什么区别?主机通常是指某一台计算机,而服务器则是指能运行多个应用程序的计算机。主机只能运行单一程序,服务器则可以运行多个程序。
1:服务器是什么
服务器是一台专业的计算机,用于存储网站或应用程序的数据,并通过互联网提供访问。服务器通常由专业公司提供,并根据客户的需求配置和维护。
2:为什么要使用服务器
服务器可以提供很多方面的帮助,比如存储和处理数据、提供应用程序和服务、连接到其他设备等等。使用服务器可以让这些任务变得更加简单和高效。
3:Hosting 和 Server 有什么区别
Hosting 和 Server 有什么区别?了解这两者之间的区别很重要,因为它们代表着不同的概念,并且在某些情况下可能会被混淆。简单地说,服务器是一台计算机,而 hosting 则是将这台计算机用于特定目的的过程。当您使用服务器时,您需要拥有并管理计算机上的相应软件。例如,如果您希望使用服务器来托管网站,则需要安装 Web 服务器软件(例如 Apache)。此外,您还需要确保服务器上的软件更新到最新版本,以防止安全漏洞。相比之下,使用 hosting 服务则要容易得多。您无需购买、安装或维护任何软件,只需将您的网站文件上传到特定的服务器上即可。
如果有需要,服务器可以提供更多的功能,比如数据库服务、邮件服务等等。因此,对于大型网站或者需要多个应用程序运行的网站,服务器是必不可少的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱golang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值