表明我写这篇文章的目的其实是为了科普下基本的数据传输交互流程。其实就是写一些http协议相关的东西。而写这篇文章主要是因为最近和长期很多人问的问题都是关于这个的(也许问题不是这样问的,但根本原因主要和这个有关),所以想写这篇文章也算是科普一下,让你在写前后端程序的时候,因为数据传输的问题不知道怎么解决bug。我认为这是一篇基础文章。本来想用个高大上的名字,想了想还是这么叫,方便初学者或者写过一段时间与服务器交互的程序的人理解。当然,整篇文章只是基于我这几年开发经验的总结。底层的理解难免会有一些表述或偏差。如有错误,请指出。在开始HTTP协议之前,我觉得还是先解释一下HTTP协议比较好。后面的文章主要基于这一篇。关于这部分,我在百度百科上发了一篇文章,我觉得解释的还是比较全面的。(这里不用担心补贴wiki链接)https://baike.baidu.com/item/...HTTP分为数据请求(发送)阶段和数据响应阶段。数据请求阶段的数据内容格式主要包括:请求行-通用信息头-请求头-实体头-消息体数据响应阶段的内容格式主要包括:状态行-通用信息头-响应头-实体头-message我们看到的消息主体是数据响应的消息体,开发者是看不到的。这个解释可能有些不正确。应该说消息体是由浏览器解析的。一般来说就是:。...内容。作为开发者,我们在Chrome浏览器下打开调试工具,可以看到请求头和响应头,数据返回会根据错误或者对应的成功返回对应的响应状态(比如常见的200,404、500、502等)。数据类型数据类型有数千种。我想任何写程序的人都应该知道基本的数据类型。通常有整型、浮点型、字符型、字符串型、数组等,数据是二进制表示,可以花很多时间深入研究和理解这个)。在这些基本数据类型的基础上,会衍生出各种数据类型,进而会有图片数据类型、文本数据类型、流媒体数据类型等等。我们在写web程序的时候,通常会遇到html、json、图片、音频、视频等数据,其实html、json等数据其实都可以归类为字符串数据。说到这里,我觉得应该引入一个“引用对象”,即针对不同的引用对象,主要描述什么样的数据类型。对于浏览器,html是html类型。解析后可以渲染出好看的界面,当然也有可能渲染出草率的界面。对于后端程序,比如PHP或者java程序,html无非是一堆字符串,这些字符串可以代表某种意义(浏览器用来渲染的文档)。同样,json相对于后端程序来说无非是一堆有意义的字符串,而对于JavaScript脚本来说,json代表的是一个数据对象。这种数据格式的目的和数据格式的参考主要是我们在写程序的时候,我们要想到不同的数据对于不同的程序有不同的意义,所以我们处理数据的思路也不同,否则就会和同样的思维,很难不去想问题。当然也有一些常见的数据类型,比如图片、流媒体数据等,对这类数据的处理方法基本相同。异步数据交互我们通常知道的异步一般就是AJAX,但是这里的AJAX可能也可以说是异步的一部分,所以先说说AJAX。AJAX是一种数据交互方式,仍然遵循HTTP协议,但通常我们都是通过程序接口触发浏览器在后台隐式请求和处理数据。一般来说,当我们输入一个网址时,浏览器会向这个网址发起请求,然后我们就会看到一个网页。但实际上,如果我们只做这一步,没有异步,那么我们是不可能看到完整的网页的,也就是说可能没有交互动画和好看的样式。为什么是这样?我们通常会在一个页面中定义一些外部的css样式和外部的js程序。而这其实取决于浏览器在做html解析的时候,遇到外部的css样式引入或者js引入,会在后台主动发起一个资源请求,但是这个请求我们是看不到的。当然,并不是说这个请求是不可见的或者是异步的,而是因为它没有和自己的html资源加载同步,而是等到html数据加载完毕再异步加载数据。而这个异步交互本身是基于HTTP协议的,而我们自己写AJAX的时候,其实从另一个角度来说,我们已经接管了浏览器对交互数据的处理,也就是说,它不跟随浏览器本身。比如我们在传输json数据的时候,需要自己对服务器返回的json进行处理,解析成节点数据交给浏览器显示。同样,我们自己接管了AJAX数据的管理,这也为数据处理增加了很多灵活性。而异步只说明AJAX只是片面的,这是为什么呢?因为有异步程序和异步程序,所以现在很多高级语言都有异步的特性。当然,它们也可以手动实现。关于异步程序这里就不多介绍了。异步程序是另一个话题。关于cookies和session,我也会分别说说cookie和session机制。当然,我不会过多阐述。和整篇文章一样,主要是在基础理解上。写前端程序的我们都知道cookies是有作用域和存储时间的。cookie的范围是为了安全和防止跨域使用,存储过期时间也有这个作用。我们使用cookie的目的其实就是为了缓存一些短小的数据,浏览器本身对cookie的支持也很好。每次进行数据请求时,都会将用户设置的cookie带入Cookie头,服务端会通过程序解析请求头获取cookie头,这样也可以获取到客户端的cookie值.同样,服务器设置的cookie会被添加到响应头中,如果浏览器发现响应头中有cookie,也会将cookie存储在浏览器本地,并在后续每次请求时带上cookie.这就是服务器设置cookie的方式。以上基础知识理论为会议提供了支持。首先说一下什么是session。session的中文翻译是会话的意思。通常我们最基本的理解就是“session用于用户登录”。但我说的基本上是正确的。Session通常用来保存用户的登录状态,但也不完全正确。接下来说一下session的实现机制,然后,我想就可以清楚session可以扩展的一些功能了。session和cookie是相互依赖的。首先,当用户打开一个网站时,服务器会生成一个session_id,然后将session_id放在响应头中,告诉浏览器存储起来。那么浏览器每次请求都会带上session_id的cookie值,服务器拿到后会检查session_id,保持session。当然这只是说说而已,也就是用户的在线状态,但与用户此时的登录没有任何关系。然后,当用户登录时,会将用户信息与session_id关联起来,表示登录成功,我们的后台服务会检查是否有关联的用户信息,并告知用户用户是否登录。这是用户登录如何工作。以上就是对这些的泛泛聊聊,主要是我个人的一些经验和对服务器端数据交互的一些理解。
