TCP协议族
应用层(http、ftp、smtp、pop3)
表示层(数据加密解密)
会话层(SSL、TLS -安全协议)
传输层()
网络层
数据链路层(地址解析协议 Cisco协议 隧道协议)
物理层(原始比特流传输)
HTTP
1、超文本传送协议,由客户端发起的,w3c文件传输标准,无状态的,http1.1和1.0,默认端口80;
2、URL (Uniform Resource Locator,统一资源定位符);
3、建立连接→client发送请求信息→server响应请求→关闭连接 (3握手,4挥手)
4、http状态码:
5XX:服务器错误 (500:请求未完成)
4XX:客户端错误 (400:服务器不理解请求,401:登陆错误,404:找不到)
3XX:重定向 (300:返回链接供选择,301/302:页面已转移)
2XX:成功 (200:OK,201:完成,同时新资源创建,202:处理中,未完成)
1XX:成功 (100:服务器接收到部分信息,请继续发送完成)
5、常用header:
Cache-Control头域:public、private、no-cache、no-store、max-age=100 …
1. public 指示响应数据可以被任何客户端缓存
2. private 指示响应数据可以被非共享缓存所缓存。
3. no-cache 指示响应数据不能被任何接受响应的客户端所缓存
4. no-store 指示所传送的响应数据除了不能被缓存,也不能存入磁盘。一般用于敏感数据,以免数据被复制。
Request Header:
Accept:告诉服务器,客户端支持的数据类型。
Accept-Charset:告诉服务器,客户端采用的编码。
Host:客户机通过这个头告诉服务器,想访问的主机名。
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境。
Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。
Response Header:
Location:这个头配合302状态码使用,告诉用户端找谁。
Server: nginx服务器的类型
Content-Length:1222 数据的长度。
Content-Language:服务器的语言环境。
Content-Type: application/javascript; charset=utf-8回送数据的类型
Last-Modified: 资源最后修改时间。
Refresh:告诉浏览器隔多长时间刷新一次。
ETag:与缓存相关的头(通过文件大小、大小、时间hash得到,具有唯一性)。
Expires: wed,28 Nov 2018 03:03:01 GMT缓存时间期限。
Cache-Control:max-age=300 控制浏览器缓存数据。
Connection: keep-alive 服务器通过这个头,响应完是保持链接还是关闭链接。
6、http缓存
缓存文件在chrome://version/ 中"个人资料路径"
chrome://chrome-urls/,打开所有URL列表页面。
chrome://cache,打开缓存页面。
①非HTTP协议定义的机制:<meta http-equiv="Pragma" content="no-cache">
--告诉浏览器当前页面所有资源不被缓存,部分浏览器支持,代理服务器不支持(因为不解析html)
②HTTP协议定义的机制:
--Expires策略,源于HTTP1.0,告诉浏览器在过期时间前直接从浏览器缓存取数据,而无需再次请求。
例子:Expires wed,28 Nov 2018 03:03:01 GMT
--Cache-control策略,源于HTTP1.1,作用与expires一致,优先级更高;
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
例子:Cache-control max-age=300 //单位s
Last-Modified/If-Modified-Since要配合Cache-Control使用:
Last-Modified告诉浏览器最后修改时间;
If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache
Etag/If-None-Match也要配合Cache-Control使用:
Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
既生Last-Modified何生Etag?(后者是资源的唯一标识,权限最高)
秒级-毫秒级、定期生成文件(实际无修改)、与代理服务器时间有误
③用户行为与缓存:
用户操作 Expires/Cache-Control & Last-Modified/Etag
地址栏回车 有效 & 有效
页链接跳转 有效 & 有效
新开窗口 有效 & 有效
前进/后退 有效 & 有效
F5刷新 无效 & 有效
ctrl+F5 无效 & 无效
AJAX
基于http协议,用于服务器和浏览器异步交换数据的通信技术。
XMLHttpRequest是js内置对象,提供了对HTTP协议的完全访问。
API详解:
xhr.open(“GET”,”url”) //发起请求,可以是get、post方式
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded') //设置请求头
xhr.send() //发送请求主体,get方式可传null
xhr.onreadystatechange //监听请求响应过程状态;(每当readyState值增加的时候都会触发)。
xhr.readyState //记录请求响应过程状态 4为完成
xhr.status //响应状态码,如200 status状态
xhr.statusText //响应状态信息。如:200时是OK (好像没卵用)
xhr.getAllResponseHeaders() //获取所有响应头信息
xhr.getResponseHeaders('') //获取指定头信息
xhr.responseText //以普通网页字符串形式,接收响应主体 response[李斯班s]响应
xhr.responseXML //以XML文档形式,接收响应主体
Websocket
Websocket是服务器推送技术的一种, 可实现双向即时通信, 可发送文本和二进制数据;
2011年诞生(HTML5), websocket协议建立在TCP之上,兼容http, 握手阶段采用http协议;
Socket.io
socket.io是把websocket作为子集(还有http轮询,jsonp轮询), 兼容低版本浏览器,实现双向通信的工具集.
Axios
基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。(浏览器兼容到IE6)
例子:
axios({
method: 'post',
url: 'http://localhost:5555/api/bz/getMonthCalendar',
//headers: {"Content-Type":"application/x-www-form-urlencoded"},
//timeout: 1000, //延时多久停止
//withCredentials: false, // 默认的 表示跨域请求时是否需要使用凭证
//onUploadProgress: function (progressEvent) {}, // 对原生进度事件的处理
// auth: { // `auth` 表示应该使用 HTTP 基础验证,并提供凭据 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
// username: 'janedoe',
// password: 's00pers3cret'
// },
data: params, //即year=2001&month=9'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});;
HTTPS
FTP, SMTP, POP3
都基于TCP/IP协议
FTP:文件传输协议,TCP/IP协议中,FTP标准命令TCP端口号为21, FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。
SMTP:简单邮件传输协议,邮件传输的规则,用于两台邮件服务器间交换邮件。默认端口号25
POP3:邮局协议版本3,用于从服务器下载邮件到客户端。默认端口110
注:本文总结的是构成web应用的“视图”、“通信”、“数据”三大块中的通信块的TCP协议族中开发常用的技术。
TCP/IP:应用层(http、ftp、smtp、pop3)
表示层(数据加密解密)
会话层(SSL、TLS -安全协议)
传输层()
网络层
数据链路层(地址解析协议 Cisco协议 隧道协议)
物理层(原始比特流传输)
HTTP
1、超文本传送协议,由客户端发起的,w3c文件传输标准,无状态的,http1.1和1.0,默认端口80;
2、URL (Uniform Resource Locator,统一资源定位符);
3、建立连接→client发送请求信息→server响应请求→关闭连接 (3握手,4挥手)
4、http状态码:
5XX:服务器错误 (500:请求未完成)
4XX:客户端错误 (400:服务器不理解请求,401:登陆错误,404:找不到)
3XX:重定向 (300:返回链接供选择,301/302:页面已转移)
2XX:成功 (200:OK,201:完成,同时新资源创建,202:处理中,未完成)
1XX:成功 (100:服务器接收到部分信息,请继续发送完成)
5、常用header:
Cache-Control头域:public、private、no-cache、no-store、max-age=100 …
1. public 指示响应数据可以被任何客户端缓存
2. private 指示响应数据可以被非共享缓存所缓存。
3. no-cache 指示响应数据不能被任何接受响应的客户端所缓存
4. no-store 指示所传送的响应数据除了不能被缓存,也不能存入磁盘。一般用于敏感数据,以免数据被复制。
Request Header:
Accept:告诉服务器,客户端支持的数据类型。
Accept-Charset:告诉服务器,客户端采用的编码。
Host:客户机通过这个头告诉服务器,想访问的主机名。
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境。
Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。
Response Header:
Location:这个头配合302状态码使用,告诉用户端找谁。
Server: nginx服务器的类型
Content-Length:1222 数据的长度。
Content-Language:服务器的语言环境。
Content-Type: application/javascript; charset=utf-8回送数据的类型
Last-Modified: 资源最后修改时间。
Refresh:告诉浏览器隔多长时间刷新一次。
ETag:与缓存相关的头(通过文件大小、大小、时间hash得到,具有唯一性)。
Expires: wed,28 Nov 2018 03:03:01 GMT缓存时间期限。
Cache-Control:max-age=300 控制浏览器缓存数据。
Connection: keep-alive 服务器通过这个头,响应完是保持链接还是关闭链接。
6、http缓存
缓存文件在chrome://version/ 中"个人资料路径"
chrome://chrome-urls/,打开所有URL列表页面。
chrome://cache,打开缓存页面。
①非HTTP协议定义的机制:<meta http-equiv="Pragma" content="no-cache">
--告诉浏览器当前页面所有资源不被缓存,部分浏览器支持,代理服务器不支持(因为不解析html)
②HTTP协议定义的机制:
--Expires策略,源于HTTP1.0,告诉浏览器在过期时间前直接从浏览器缓存取数据,而无需再次请求。
例子:Expires wed,28 Nov 2018 03:03:01 GMT
--Cache-control策略,源于HTTP1.1,作用与expires一致,优先级更高;
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
例子:Cache-control max-age=300 //单位s
Last-Modified/If-Modified-Since要配合Cache-Control使用:
Last-Modified告诉浏览器最后修改时间;
If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache
Etag/If-None-Match也要配合Cache-Control使用:
Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
既生Last-Modified何生Etag?(后者是资源的唯一标识,权限最高)
秒级-毫秒级、定期生成文件(实际无修改)、与代理服务器时间有误
③用户行为与缓存:
用户操作 Expires/Cache-Control & Last-Modified/Etag
地址栏回车 有效 & 有效
页链接跳转 有效 & 有效
新开窗口 有效 & 有效
前进/后退 有效 & 有效
F5刷新 无效 & 有效
ctrl+F5 无效 & 无效
AJAX
基于http协议,用于服务器和浏览器异步交换数据的通信技术。
XMLHttpRequest是js内置对象,提供了对HTTP协议的完全访问。
API详解:
xhr.open(“GET”,”url”) //发起请求,可以是get、post方式
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded') //设置请求头
xhr.send() //发送请求主体,get方式可传null
xhr.onreadystatechange //监听请求响应过程状态;(每当readyState值增加的时候都会触发)。
xhr.readyState //记录请求响应过程状态 4为完成
xhr.status //响应状态码,如200 status状态
xhr.statusText //响应状态信息。如:200时是OK (好像没卵用)
xhr.getAllResponseHeaders() //获取所有响应头信息
xhr.getResponseHeaders('') //获取指定头信息
xhr.responseText //以普通网页字符串形式,接收响应主体 response[李斯班s]响应
xhr.responseXML //以XML文档形式,接收响应主体
Websocket
Websocket是服务器推送技术的一种, 可实现双向即时通信, 可发送文本和二进制数据;
2011年诞生(HTML5), websocket协议建立在TCP之上,兼容http, 握手阶段采用http协议;
Socket.io
socket.io是把websocket作为子集(还有http轮询,jsonp轮询), 兼容低版本浏览器,实现双向通信的工具集.
Axios
基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。(浏览器兼容到IE6)
例子:
axios({
method: 'post',
url: 'http://localhost:5555/api/bz/getMonthCalendar',
//headers: {"Content-Type":"application/x-www-form-urlencoded"},
//timeout: 1000, //延时多久停止
//withCredentials: false, // 默认的 表示跨域请求时是否需要使用凭证
//onUploadProgress: function (progressEvent) {}, // 对原生进度事件的处理
// auth: { // `auth` 表示应该使用 HTTP 基础验证,并提供凭据 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
// username: 'janedoe',
// password: 's00pers3cret'
// },
data: params, //即year=2001&month=9'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});;
HTTPS
FTP, SMTP, POP3
都基于TCP/IP协议
FTP:文件传输协议,TCP/IP协议中,FTP标准命令TCP端口号为21, FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。
SMTP:简单邮件传输协议,邮件传输的规则,用于两台邮件服务器间交换邮件。默认端口号25
POP3:邮局协议版本3,用于从服务器下载邮件到客户端。默认端口110