目前我有以下理解(我认为这是不完整的,甚至可能是错误的)。
Web服务器接收来自客户端的请求。请求来到特定的“路径”(“地址”,“URL”)并具有特定类型(GET,POST和其他可能的东西?)。 GET和POST请求也可以带有变量及其值(可以作为“字典”或“关联数组”)。 GET请求的参数在地址行中设置(例如:http://example.com?x=1&y=2
),而POST请求的参数由客户端(用户)通过Web表单设置(换句话说,用户填写表单并按“提交”按钮)。
除此之外,我们还有所谓的SESSION(也称为COOKIES)。这按以下方式工作。当Web服务器获得(GET或POST类型)请求时,它(Web服务器)检查发送参数的值,并根据它生成并发送回客户端在浏览器中显示的HTML代码(并且是用户看到的)。除此之外,Web服务器发送一些参数(也可以想象为“字典”或“关联数组”)。这些参数由客户端某处的浏览器保存,当客户端发送新请求时,他/她还会发回先前从Web服务器接收的会话参数。事实上服务器说:你从我那里得到这个,记住它,下次当你跟我说话时,把它还给你(所以,我能认出你)。
所以,我不知道的是客户端是否可以看到会话中究竟是什么(有哪些参数以及它们具有什么值)以及客户端是否能够修改这些参数的值(或者添加或删除参数)。但是用户可以做什么,他/她可能决定不接受任何cookie(或会话)。
还有一种称为“本地存储”的东西(HTML5中提供)。它的工作原理如下。与SESSION一样,它是Web服务器发送给客户端的一些信息,也是客户端记忆(保存)的(如果客户希望的话)。与会话相反,它不会被客户端发送回服务器。相反,在客户端运行的JavaScripts(并由Web服务器作为HTML代码的一部分发送)可以从本地存储访问信息。
我仍然缺少的是AJAX是如何工作的。就像通过点击浏览器中的内容一样,用户向Web服务器发送(通过浏览器)请求并等待响应。然后浏览器接收一些响应并使用它来修改(但不是替换)用户观察到的页面。我缺少的是浏览器如何知道如何使用来自Web服务器的响应。它是用HTML代码编写的(类似于:如果单击它,将此请求发送到Web服务器,并使用其答案(提供的内容)来修改页面的这一部分。)
答案 0 :(得分:5)
我将回答你关于 AJAX 和 LocalStorage 的问题,这也是非常重要的问题,因为你的定义在很高的层次上打击了我。< / p>
AJAX 代表 A 同步 J avaScript a nd <强> X 强> ML 。 您的浏览器使用名为XMLHTTPRequest的对象来建立具有远程资源的HTTP请求。
作为客户端的客户端忘记了远程服务器所需要的内容。它所要做的就是为请求提供URL,方法和可选的请求有效负载。有效负载通常是远程服务器接收的参数或一组参数。
请求对象有几个方法和属性,它还有处理响应的方法。
我缺少的是浏览器如何知道如何使用响应 来自网络服务器。
您只需告诉它如何处理响应。如上所述,还可以告知请求对象如何处理响应。它会听取响应,当这些响应到来时,您告诉客户如何处理它。
是否(响应)写在HTML代码中?
没有。响应将写入服务器所服务的任何内容中。最常见的是,它是Unicode。提供响应的常用方法是JSON(JavaScript Object Notation)对象。
之后发生的任何事情都是纯粹的实施问题。
<强> localStorage的强>
还有一种名为&#34;本地存储&#34; (它可以在 HTML5)。它的工作原理如下。像SESSION一样,它发送了一些信息 通过Web服务器到客户端,也被记忆(保存) 客户(如果客户想要)
不完全准确。 本地存储确实是HTML5引入的新功能。这是一种在客户端中存储数据的新方法,对于原点是唯一的。根据来源,我们指的是一个独特的协议和域。
客户端上的本地存储对象(同样,每个唯一来源)的生命周期完全取决于用户。也就是说,客户端应用程序当然可以操纵数据并决定本地存储对象中的内容。你是对的,因为它是存储的,可以通过JavaScript在客户端中使用。
示例:某些网络跟踪工具希望拥有某种备份计划,以防收集用户数据的服务器由于某种原因无法访问。 Web跟踪器有时作为JavaScript插件引入,可以先将任何事件写入本地存储,只有当远程服务器确认它已成功接收到事件时才会释放它,即使用户关闭了浏览器。
答案 1 :(得分:4)
我将总结您的主要问题以及正确的答案:
Q1:
客户端可以查看会话中的确切内容吗?
答:不可以。客户端只知道“SessionID”,即元数据(所有其他会话数据仅存储在服务器上,客户端无法查看或更改它)。 SessionID仅由服务器用于标识客户端并将应用程序进程映射到其先前的状态。 HTTP是一种无状态协议,这种经典技术使其成为有状态的。 在完整的会话数据存储在客户端时非常罕见(但在这种情况下,服务器还应加密会话数据,以便客户端无法查看/更改它)。 另一方面,有些Web客户端根本无法存储cookie,或者它们具有阻止存储cookie数据的功能(例如,用户拒绝来自域的cookie的能力)。在这种情况下,解决方法是使用HTTP重定向将SessionID注入URL参数。
Q2:
HTML5 LocalStorage和Session之间有什么区别?
LocalStorage可以被视为客户端自己的“会话”数据,或者更好地说是客户端可以保存/保存数据的本地数据存储。只有客户端(主要来自javascript)才能访问和更改数据。可以将其视为javascript控制的持久存储(具有优于cookie的优势,您可以控制哪些数据,它的结构和您想要存储的格式)。它比将数据存储到cookie更有利 - 它们有自己的限制,如数据大小和结构。
Q3:
AJAX如何运作?
简单来说,AJAX意味着在已加载的(HTML)页面上加载按需数据。典型的http请求会加载页面的整个数据,而ajax请求只会加载和更新(已加载的)页面的一部分。 话虽如此,AJAX请求与标准HTTP请求非常相似。 Ajax请求由javascript代码控制,它可以丰富与页面的交互。您可以请求特定的数据段并更新页面的各个部分。
现在,如果我们记得与网站进行任何互动(例如登录,导航到其他网页等)需要重新加载完整页面的旧时代?那时候,为了执行任何简单的操作,发生了很多不必要的流量。这反过来又会影响网站响应能力,用户体验,网络流量等。 发生这种情况是由于浏览器无法(在那时)到[a。]执行对服务器的并行HTTP请求并且[b]呈现部分HTML视图。 现代浏览器具有这两个支持AJAX技术的功能 - 即调用异步(并行)HTTP请求(Ajax HTTP请求),它们还通过javascript(实时HTML文档对象模型操作)提供动态DOM更改机制)。
如果您需要有关这些主题的更多信息,或者我还可以提供帮助,请告知我们。
为了更深刻的理解,我还建议this nice web history article,因为它解释了一切从HTML何时开始以及它的目的是什么(定义[当时]富文档),以及HTTP如何最初创建和它解决了什么问题(当时 - “转移”静态HTML)。这就解释了为什么它是无状态协议。 随后,随着HTML和WEB的发展,出现了其他需求(例如需要与最终用户交互) - 然后Cookie机制增强了协议,通过使用会话cookie实现有状态的客户端 - 服务器通信。然后是Ajax。如今,cookie也有其自身的局限性,我们有LocalStorage。我还提到了WebSockets吗?
答案 2 :(得分:4)
首先,这只是一个简单的解释,以澄清你的想法。为了更详细地解释这些内容,我们需要写一本书。有人说,我会一步一步走。
请求是请求/向服务器发送数据的客户端 该请求包含以下部分:
我会省略首字母缩略词的含义,因为你可以轻松地谷歌。
关于AJAX的好处是第一个A,代表异步,这意味着JS引擎(在这种情况下是在浏览器中构建)不会阻止直到响应回来了。
要了解AJAX的工作原理,您必须知道它与普通请求非常相似,但区别在于它可以在不重新加载网页的情况下触发。
响应的内容无论你想要什么。从一些HTML代码到JSON字符串。甚至是一些纯文本。
处理响应的方式取决于实现和编程。例如,您可以简单地alert()
AJAX调用的结果,或者将其附加到DOM元素。
这与任何事情都没有多大关系。
本地存储只是浏览器提供的一些磁盘空间,因此即使页面或浏览器关闭,您也可以在浏览器中保存数据。
Chrome提供了一个用于管理本地存储的JavaScript API。它是客户端,您可以通过编程方式访问此存储并进行CRUD操作。它就像浏览器中的非sql非关系数据库一样。
答案 3 :(得分:2)
Web服务器和客户端通信的最常见方式是通过传输控制协议或 TCP 之后的连接。基本上,在使用TCP时,通过一系列来回检查在客户端和服务器之间建立连接。建立并打开连接后,可以在客户端和服务器之间发送数据。此连接也可以称为会话。
还有 UDP 或用户数据报协议,它的通信方式略有不同,并且有自己的优缺点。我相信最近一些浏览器可能已经开始使用两者的组合以获得最佳结果。
这里还有更多要说的内容,但除非您要编写浏览器(或成为黑客),否则这不应该超出基本要求。
建立客户端 - 服务器连接后,可以在两者之间发送数据包。 TCP数据包包含各种信息位,以协助两个端口之间的通信。对于Web程序员,数据包最重要的部分是包含 HTTP请求的部分。
HTTP ,超文本传输协议是另一种协议,它描述了这些客户端 - 服务器通信的构成/格式应该是什么。
从客户端发送到服务器的数据包相关部分的最基本示例如下:
GET /index.html HTTP/1.1
Host: www.example.com
此处的第一行称为Response line
。 GET
描述了要使用的方法,(其他包括POST,HEAD,PUT,DELETE等)/index.html
描述了所请求的资源。最后,HTTP/1.11
描述了正在使用的协议。
在这种情况下,第二行是请求中唯一的header field
,在这种情况下,它是HOST
字段,它是服务器IP地址的别名,由DNS。
[自从您提到它以来,GET
请求与POST
请求之间的区别仅仅是在GET
请求中,参数(例如:表单数据)作为一部分包含在内在Response Line
请求中,参数将作为POST
的一部分包含在内(见下文)。]
根据发送到服务器的请求,服务器会抓住它的头,考虑你提出的问题,并做出相应的响应(也就是你编程要做的事情)。
以下是从服务器发送的响应数据包的示例:
Message Body
这里的第一行是HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
...
<html>
<head>
<title>A response from a server</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
,其中包括数字代码和简短的文字说明。 Status Line
显然意味着成功。例如,大多数人可能也熟悉200 OK
。
第二行是404 Not Found
中的第一行。通常添加的其他字段包括Response Header Fields
,date
和其他有用的元数据。
标题下方和必要的空行最后是(可选)Content-Length
。当然,这通常是响应中最令人兴奋的部分,因为它将包含我们的浏览器为我们显示的HTML等内容,JSON数据,或几乎任何可以在Message Body
语句中编码的内容。
基于所有这些,AJAX很容易理解。实际上,发送和接收的数据包看起来与return
请求完全相同。
唯一的区别是浏览器决定发送请求数据包的方式和时间。通常,在页面刷新时,浏览器将向服务器发送请求。但是,当发出AJAX请求时,程序员只是告诉浏览器请将数据包发送到服务器,而不是页面刷新。
但是,考虑到AJAX请求的性质,通常non-ajax
不会包含整个HTML文档,但会请求更小,更具体的数据位,例如来自数据库的查询。
然后,调用Ajax的JavaScript也可以根据响应进行操作。任何JavaScript方法都可用,因为进行Ajax调用只是另一个JavaScript函数。因此,您可以执行innerHTML之类的操作,以使用Ajax调用返回的一些HTML在页面上添加/替换内容。或者,您也可以执行类似于生成Ajax调用的操作,该调用只返回True或False,然后您可以使用if else语句调用某些JavaScript函数。正如您所希望看到的那样,Ajax与HTML无关,它只是一个JavaScript函数,它从服务器发出请求并返回响应,无论它是什么。
HTTP协议是无状态协议的示例。基本上,这意味着每对Message Body
和Request
(就像我们描述的那样)将独立于其他请求和响应进行处理。因此,服务器不必跟踪当前要求关注的所有数千个用户。相反,它可以单独响应每个请求。
但是,有时我们希望服务器能够记住我们。如果我每次忘记检查我的Gmail时都会因为服务器忘记了我而重新登录,那会有多烦人?
要解决此问题,服务器可以发送 Cookie 以存储在客户端计算机上。服务器可以发送一个响应,告诉客户端存储cookie以及它应该包含什么。客户端的浏览器负责将这些cookie存储在客户端系统中,因此这些cookie的位置将根据您的浏览器和操作系统而有所不同。重要的是要意识到这些只是存储在客户机上的小文件,实际上任何知道如何定位和理解它们的人都可以读写。可以想象,这会带来一些不同的潜在安全威胁。一种解决方案是加密存储在这些cookie中的数据,以便恶意用户无法利用您提供的信息。 (由于您的浏览器正在设置这些cookie,因此浏览器中通常会有一个设置,您可以修改该设置以接受,拒绝或设置Cookie的新位置。
这样,当客户端从服务器发出请求时,它可以在其中一个Response
中包含Cookie,这将告诉服务器,&#34;嘿,我是经过身份验证的用户,我的名字是鲍勃,我刚刚在我的笔记本电脑死亡之前写了一篇非常迷人的博客文章,#34;或者,&#34;我在购物车中挑选了3件设计师套装,但我仍然计划明天搜索你的网站以获得第4个,&#34;例如。
HTML5引入了本地存储作为Cookie的更安全的替代方案。与cookie不同,本地存储数据实际上并未发送到服务器。相反,浏览器本身会跟踪状态。
这种替代方案还允许存储更大量的数据,因为不需要在客户端和服务器之间通过互联网传递数据。
这应该涵盖基础知识,并清楚地说明客户端和服务器之间的情况。关于这些要点还有更多内容,您可以通过简单的Google搜索找到大量信息。