前后端如何通信

目录

  • 前后端如何通信
    • URL . URI . URN
    • 第一部分:传输协议
    • 第二部分:域名
    • 第三部分:端口号
    • 第四部分:请求资源文件的路径名称
    • 第五部分:问号传参
    • 第六部分:HASH值

前后端如何通信

前段:客户端
后端: 服务器端
所谓的全栈,其实是你可以实现客户端和服务器端程序的编写,而且可以实现俩端之间的通信
 
 客户端和服务器端是如何通信的?

自己做一个技术博客

本地开发(当前项目可以在本地预览)
部署到服务器上,让别人可以通过域名或者外网访问

  • 购买一台服务器(阿里云独立主机,虚拟服务器等)https.//wanwang.aliyun.com/
  • 购买域名
  • 把自己做的项目传到服务器上
  • 让域名和服务器关联(DNS解析或是域名解析)
  • 在服务器上发布或者部署我们的项目(iis,nginx,apache。。。。。)

做一些推广(SEO推广。友情链接交换,技术文章持续更新。。。)

经典面试题:当我们在浏览器地址栏中输入一个URL地址,到最后看到页面,中间都经历了那些

1.假设我们访问的是:https://www.baidu.com/这个地址,按下ENTER键后,我们可以看到百度首页面
1)百度页面并没有在我们自己的客户端本地。我们是输入地址后,才请求过来的
2)输入不同的域名可以看到不同的页面
3)有的网址是https,有的是http
4)需要客户端联网才能完成这些事情

----------------------

都经历那些事情
[Request请求阶段]
1)首先根据客户端输入的域名,到DNS服务器上进行反解析(通过域名找到对应服务器的外网ip)
2)通过找到的外网ip。找到对应的服务器
3)通过在地址栏中输入的端口号(没有输入是因为不同协议有自己默认的端口号)找到服务器上发布的对应的项目
[Response响应阶段]
4)服务器获取到请求资源文件的地址例如 :/stu/index.html。把资源文件中的源代码找到
5)服务器端会把找到的源代码返回给客户端(通过HTTP等传输协议返回的)
[浏览器自主渲染]
6)客户端接受到源代码后,会交给浏览器的内核(渲染引擎)进行渲染,最后由浏览器绘制出对应的页面

URL . URI . URN

URI:统一资源标识符
URL:统一资源路径地址(在当前页面控制台输入:document.location.href)就可以得到当前页面的URL
URN:统一资源名称
URI=URL +URN

一个完整的URL包含很多部分
http://www.html5train.com/stu/index.html?name=zf&age=9&teacher=zxt#good

第一部分:传输协议

传输协议是用了完成客户端和服务端的数据(内容)传输的,类似于快递小哥,负责把客户和商家的物品来回传送
1:客户端不仅可以向服务器发送请求,而且还可以把一些内容传递给服务器
2:服务端也可以把内容返回给客户端
客户端和服务端传输的内容总称HTTP报文,这些报文信息都是基于传输协议完成传输的,客户端传递给服务器叫做请求(request),服务器返回给客户端叫做响应( response),request+response俩个阶段统称为一个HTTP事务(事务:一件完整的事情)
THTP事务
1:当客户端向服务端发送请求,此时客户端和服务端会建立一个传输通道(链接通道),传输协议就是基于这个通道把信息进行传输的
2:当服务器端接受到请求信息,把内容返回给客户端后,传输通道会自动销毁关闭

传输协议分类
http:超文本传输协议(客户端和服务端传输的内容除了文本以外,还可以传输图片,音视频等文件流[二进制编码/BASE64吗],以及传输XML格式的数据等),是目前市场上应用最广泛的传输协议
http:http SSL,它比http更加安全,因为数据内容的传输通道是经过SSL加密的(它需要在服务器端进行特殊的处理),所以涉及资金类的网站一般都是https协议的
FTP:资源文件传输协议:一般用于客户端把资源文件(不是代码)上传到服务器端,或者从服务器端下载一些资源文件(FTP传输的内容会比http这类协议传输的内容多)

HTTP报文

1:起始行

  • 请求起始行
  • 响应起始行

2:首部(头)

  • 请求头:内置请求头,自定义请求头
  • 响应头:内置响应头,自定义响应头
  • 通用头:请求和响应都有的

3:主体

  • 请求主体
  • 响应主体
1:请求xxx都是客户端设置的信息,服务器端获取这些信息
2:响应xxx都是服务端设置的信息,客户端用来接受这些信息
3:在谷歌浏览器控制台network选项中,我们可以看见当前客户端和服务器端交互的全部信息

``总结
客户端传递给服务器端数据

  • 1:URL问号传递参数
  • 2:设置请求头
  • 3:设置请求主体

服务器端返回给客户端

  • 1:设置响应头(例如服务器时间)
  • 2:设置响应主体

第二部分:域名

设置域名其实就是给不好记忆的服务器外网ip设置了一个好记忆的名字

  • 顶级域名(一级域名):qq.com
  • 二级域名:www.qq.com v.qq.com .....
  • 三级域名:kbs.sports.qq.com ......
  • .....

第三部分:端口号

在服务器发布项目的时候,我们可以通过端口号区分当前服务器上不同的项目

一台服务器的端口号取值范围:0~65535之间,如果电脑上安装了很多程序,有一下端口号是被占用了

HTTP:默认端口号80
HTTPS:默认端口号443
FTP:默认端口号21

对于上述三个端口号其实是很重要的,如果被其他程序占用,我们则不能使用了;所以服务器上一般是禁止安装其他程序的

第四部分:请求资源文件的路径名称

/stu/index.html
在服务器中发布项目的时候,我们一般都会配置一些默认文档:用户即使不输入请求文件的名称。服务器也会找到默认文档(一般默认文档都是index/default...)
我们通常为了做SEO优化,会把一些动态页面的地址(xxx.php, xxx.aspx........)进行伪URL重写(需要服务器处理的)

http://item.jd.com/4325427.html
不可能是有一个商品,自己就单独写一个详情页面,肯定是同一个详情页做的不同处理

1)第一种方案:
由后台语音根据详情页模板动态生成具体的详情页面
2)第二种方案
当前页面就是一个页面,例如:detail.html/detail.php.....,我们做详情页面的时候,开发是按照detail.html?id=4325427来开发的,但是这种页面不方便做SEO优化,此时我们把真实的地址进行重写,重写为我们看到的4325427.html

第五部分:问号传参

?name=zf&age=9.....
把一些值通过xxx=xxx的方式,放在一个URL的末尾,通过问号传递

【作用】
1:在AJAX请求中,我们可以通过问号传参数的方式,客户端把一些信息传递给服务端,服务器根据传递信息的不一样,返回不同的数据

//=>$.ajax(url,{});
//=>$.get(url,function(){});对于AJAX请求的特殊写法,原理还是基于AJAX方法实现的  $.post/$.script......$.ajax({
url:'getPersonInfo?id=12'
.....
})
//=>当前案例,我们传递给服务器的编号是多少,服务器端就会把对应编号人员信息给返回

2.消除AJAX请求中GET方式缓存

$.ajax({
url:'xxx?_=0.123456',
method:'get'
});
//=>我们会在请求URL的末尾追加一个随机数,_=随机数,保证每一次请求URL都是不一样的,以此来消除GET请求遗留的缓存问题

3:通过URL传递参数的方式,可以实现页面之间信息的通信,例如:我们有俩个页面A/B,A是列表页面,B是详情页面,点击A中的某一条信息,进入到唯一的详情页B,如何展示不同的信息,这种操作就可以基于URL问号传递参数来实现了
例如:
http://sports.qq.com/kbsweb/game.htm?mid=100000:1471087
http://sports.qq.com/kbsweb/game.htm?mid=100000:1471086
在进入到game.htm页面的时候,我们可以获取URL传递的参数值,根据传递参数值的不一样,从服务器端获取不同的数据展示

在列表页面进行页面跳转的时候,我们需要记住的是跳转的同时传递不同的参数值
<a href= 'game.html?mid=xxxx'>

第六部分:HASH值

#xxx
URL末尾传递的井号就是HASH值(哈希值)

作用:
1:页面中错点定位
2:前端路由(SPA单页面开发)

转载于:https://www.cnblogs.com/kjz-jenny/p/9418246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue --- 获取子组件数据的一个应急方案$refs

使用$refs需要注意以下2点: 1.html方法使用子组件时,需使用ref “xxx” 声明. 2.在父组件中使用,this.refs.xxx.msg 获取数据 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body><div id"app"…

Mysql 根据出生日期计算年龄

最近因为业务要求需要根据出生日期计算年龄&#xff0c;在网上查了好多的方法&#xff0c;在这里总结一下。 网上的计算方法好多都提到了格里高利历法&#xff0c;特意去查了下资料&#xff0c;普及点知识。 格里高利历是公历的标准名称&#xff0c;是一种源自于西方社会的历法…

ES6-4/5 解构赋值、函数默认值、数组解构、对象解构

ES-4 解构赋值、函数默认值、数组解构、对象解构 ES-5 隐式转换、函数参数解构、解构本质、()用法 一 解构赋值 1 虚值 含义&#xff1a;在Boolean转换结果为假的值falsy 2 函数默认值 ES6 内部使用严格相等运算符&#xff08;&#xff09;&#xff0c;判断一个位置是否有值…

springboot之session、cookie

1- 获取session的方案 session: https://blog.csdn.net/yiifaa/article/details/77542208 2- session什么时候创建&#xff1f; 一个常见的误解是以为session在有客户端访问时就被创建&#xff0c;然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样…

echarts --- 多折线图按段显示颜色规则订制

描述: 图中有4个序列,序列1和序列2在同一个x轴下,显示不同的颜色.(如,在-40到-30,序列一是红色,而序列2是黑色) 关键: VisualMap中的seriesIndex属性(根据不同的系列,制定不同的颜色规则). 下面是代码,可以直接复制到 echart实例 中进行调试 var symbolSize 20; var data [[…

Git-分布式版本控制系统

一、版本控制 版本控制系统是记录若干文件内容变化&#xff0c;以便将来查阅修订特定版本或还原部分文件的系统 分为&#xff1a;集中式版本控制系统&#xff08;svn&#xff09;简称cvcs 都有一个单一集中管理服务器&#xff0c;保存所有文件修订版本&#xff0c;开发人员通…

ES6-6 - this指向、箭头函数基本形式、rest运算符

一 chrome断点调试 观察函数调用栈 // 25min var x 1; function foo(x, y function () { x 2; console.log(2) }) {var x 3;y();console.log(x) } foo() console.log(x) // 2 3 1var x 1; function foo(x, y function () { x 2; console.log(x) }) {x 3;y();console.…

【二分答案】Problem C:木材加工

Problem C:木材加工 Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:20 Description 【问题描述】 木材厂有一些原木&#xff0c;现在想把这些木头切割成一些长度相同的小段木头&#xff08;木头有可能有剩余&#xff09;&#xff0c;需要得到的小段的数目是…

vue --- vue.js实战基础篇课后练习

练习1:在输入框聚焦时,增加对键盘上下键按键的支持,相当于加1和减1 练习2:增加一个控制步伐的prop-step,比如设置为10,点击加号按钮,一次增加10 思路: // 考虑到子模板的复用性,即在父模板中复用如下: <input-number v-model"value" :max"10" :min&qu…

js打字效果

//文字依次出来效果 $.fn.autotype function() {var $text $(this);// console.log(this, this);var str $text.html(); //返回被选 元素的内容var index 0;var x $text.html();//$text.html()和$(this).html()有区别var timer setInterval(function() {//substr(index, …

ES6-7 - 箭头函数的实质、箭头函数的使用场景

箭头函数返回对象 // 这种情况要要用(),否则会将对象的{}解释为块 const fn (a, b) > ({a:1, b:2})箭头函数的特点 this指向由外层函数的作用域来决定&#xff0c;它本身没有this&#xff0c;不能通过call、apply、bind改变不能作为构造函数使用不可以使用arguments对象&…

mybatis比hibernate处理速度快的原因

mybatis:是面向结果集的。当要展示的页面需要几个字段时&#xff0c;springmvc会提供这几个字段并将其拼接成结果集&#xff0c;在转化为相应的对象。 hibernate&#xff1a;是面向对象的。要展示的页面需要某些字段时&#xff0c;会将所有字段都查出来&#xff0c;在转化为相应…

zabbix 从入门到精通

https://www.cnblogs.com/clsn/p/7885990.html 转载于:https://www.cnblogs.com/learningJAVA/p/8376589.html

javasript --- 一个日期规范(x秒前,x分前...)

Time函数(通俗易懂,自己根据实际需求修改吧- -) // time.js var Time {// 获取当前时间戳getUnix: function () {var date new Date();return date.getTime();},// 获取今天0点0分0秒的时间戳getTodayUnix: function () {var date new Date();date.setHours(0);date.setMin…

ES6-8 - 函数名/对象拓展、描述符、getter/setter

函数名 有两种特殊情况&#xff1a;bind方法创造的函数&#xff0c;name属性返回bound加上原函数的名字&#xff1b;Function构造函数创造的函数&#xff0c;name属性返回anonymous。 bind函数名 // 以bound开头 function foo() { } const fnName foo.bind().name console.lo…

javascript --- 再识闭包

看下面一个例子: function zipCode(code, location) {let _code code;let _location location || ;return {code: function () {return _code;},location: function() {return _location;}} }再上述封闭的函数中,code的匿名函数根据作用域链可以访问到外面的_code变量. con…

iframe.contentWindow介绍

一、在使用iframe的页面&#xff0c;要操作这个iframe里面的DOM元素可以用&#xff1a; contentWindow、contentDocument(测试的时候chrome浏览器&#xff0c;要在服务器环境下) 1、先获取iframe里面的window对象&#xff0c;再通过这个对象&#xff0c;获取到里面的DOM元素 例…

ES6-9 对象密封4种方式、assign、取值函数的拷贝

一 对象密封 1 Object.preventExtensions 禁止对象拓展&#xff0c;仍可删除 严格模式下报错 const origin {a: 1 } const fixed Object.preventExtensions(origin) console.log(origin fixed) // true console.log(Object.isExtensible(origin)) // false 不可拓展 orig…

MySQL入门命令

我主要是在维护OpenStack云平台的时候会涉及MySQL数据库的操作&#xff0c;这里就跟大家分享一下常用的简单命令&#xff0c;也为自己做个小练习。 1.登录MySQL数据库 mysql -h localhost -u root -p 123456 其中&#xff0c;-h&#xff1a;mysql服务器的IP地址或主机名&#x…

【模板】分块

题意简述 已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 1.将某区间每一个数加上x 2.求出某区间每一个数的和 题解思路 对于一个长度为n的序列&#xff0c;我们可以讲其中的元素分为\( \sqrt{n} \) 个连续的子序列&#xff0c;每块的长度自然就为\( \sqrt{n} \)…