http协议属于TCP/IP协议族中的一员,TCP/IP是互联网中各类协议的总称,分层管理,共有4层。
应用层:application层,决定了向用户提供应用服务时的通信活动,或者是实现某类应用。运行在用户空间的。
常见应用层协议有:
1.HTTP:用于浏览网页,基于TCP端口号80
2.HTTPS:安全的超文本传输协议,用于安全的浏览网页,基于TCP端口号443.
3.FTP 文本传输协议,用来上传和下载大批量的文件数据,基于TCP端口20,21,20用于建立虚拟信道,21用于传输(常见21)
4.DNS 域名解析服务 将域名解析为IP,基于UDP端口53.
5.SMTP (Simple Mail Transfer Protocol)简单邮件传输协议 用来发送email,基于TCP端口25
6.POP3 (Post Office Protocol - Version 3)邮局协议第三版 用来接受email,基于UDP端口110
7.Exchange 即可收email又可发email
8.DHCP:动态主机配置协议 让PC和服务器或网络设备自动接受ip地址,子网掩码,网关,基于UDP端口号68
9.TFTP 简单文件传输协议 用来传输小批量数据文件,基于UDP端口号69
10.telnet 终端仿真协议 用来让网管pc通过网络远程网管网络设备,基于TCP端口号23,不安全
11.SSH 安全外壳 加密RSA,基于TCP端口号22
12.SNMP:简单网络管理协议 (更方便的让网管pc管理大企业所有网络设备)
13.NTP 网络时间协议 让网络设备与NTP服务器同步时钟,基于UDP端口号123
传输层:提供处于网络连接中的两个计算机的数据通信,host-to-host
常见协议:
TCP:传输控制协议,面向连接服务,提供可靠的应用程序数据流转发工作
UDP:用户数据报协议
ICMP:因特网控制消息协议
网络层:internet层,网络上流动的数据包
常见协议:
ipv4
ipv6
概念:
IP地址:网络位+主机位
分段:
classA 0.x.x.x - 127.x.x.x
classB 128.x.x.x - 191.x.x.x
classC 192.x.x.x - 223.x.x.x
classD 224.x.x.x - 239.x.x.x
classE 240.x.x.x - 255.x.x.x
其中私有IP取自ABC段中的一部分:
10.x.x.x - 10.255.255.255
172.16.x.x - 172.31.255.255
192.168.x.x - 192.168.255.255
划分网络区段:Netmask子网掩码
链路层:network-interface网络接口层,连接网络中的硬件设备
广域网中常见设备:ADSL调制解调器、光纤、宽带等;
局域网中常见设备:以太网络硬件接口/光纤;
以太网的传输协议CSMA/CD标准,网卡对网卡的数据传递;
当客户端发送http请求时,由浏览器数据包由http协议打包,传给传输层添加tcp报头(协议+端口),传给网络层添加ip报头(ip地址),传给链路层(若为以太网根据CSMA/CD标准,报文增加mac地址),发送到客户端依次解包。
URI 统一资源标识符,Uniform Resource Identifier,标识某一个互联网资源。
Uniform:协议方案,访问资源使用的协议名称,有http协议、ftp、telnet、file等;
Resource:可标识的任何东西;
Identifier:可标识的对象;
URL统一资源定位符,标识资源的位置;
http协议:必须是存在客户端和服务器的,客户端发送请求到服务器,服务器返回数据到客户端。所以有请求报文(客户端发送)和响应报文(服务器返回)。
请求报文:由请求行、请求头部、空行、请求数据四部分组成;
而请求行、请求头部(http首部字段)这两部分又称为报文首部;
请求头部又称:http首部字段;
请求行:包含请求方法、URI、http版本
请求头部:字段:值 组成
空行:标识不再有请求头部
请求数据:POST方法中使用,与请求数据相关的请求头是Content-Type和Content-Length
请求方法:GET(获取资源)、POST(传输实体的主体,主要目的不是获取响应的主体内容,将信息告知服务器)、PUT (传输文件)、HEAD(获取报文首部)、DELETE(删除文件)、OPTIONS(获取支持的方法)、TRACE(追踪路径)、CONNECT(使用安全隧道协议连接代理ssl/tls)
Host: apache.org Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive Upgrade-Insecure-Requests: 1
http首部字段:由键:值组或键:值,值多个值组成,其中有4种http首部字段类型:
1.通用首部字段,请求报文和响应报文都会使用的字段;
cache-control控制缓存行为
connection 逐跳首部、链接管理,控制不再转发给代理的首部字段和管理持久连接;
date创建报文的日期时间
pragma报文指令,可设置为no-cache让所有中间服务器不返回缓存的资源;
trailer报文末端的首部一览
transfer-encoding报文主体的传输编码方式
warning错误通知
upgrade升级为其他协议
via代理服务器信息
2.请求首部字段,客户端发送请求报文时,补充请求的附加内容、客户端信息等信息;
accept用户代理可处理的媒体类型,客户端要求返回资源的类型,如文本文件、图片文件、视频文件、二进制文件,若浏览器不支持图片,则不能使用图片文件类型;
accept-charset优先的字符集
accept-encoding优先的内容编码,告诉服务器用户代理支持的内容编码及内容编码优先级顺序,如gzip、compress、deflate、identity;
accept-language优先语言
authorization Web认证信息
expect期待服务器特定行为
from用户的电子邮箱
host请求资源所在服务器
if-match附带条件请求
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range只需获取部分资源的范围请求
Referer告知服务器请求的原始资源的 URI
TE告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段 Accept-Encoding 的功能很相像,但是用于传输编码
user-agent Http客户端程序的信息
Cookie
3.响应首部字段,服务器返回响应报文时,补充响应的附加内容、要求客户端附加额外的信息;
accept-ranges是否接受字节范围请求
age推算资源创建经过时间
etag资源的匹配信息,服务器会为每份资源使用etag标识
location令客户端重定向指定uri
proxy-authenticate代理服务器对客户端的认证信息
retry-after对再次发送请求的时机要求
server服务器安装信息
vary代理服务器缓存信息
www-authenticate www服务器对客户端的认证信息
set-cookie
4.实体首部字段,请求报文和响应报文的实体部分实用的首部;
allow 资源可支持的http方法
content-encoding 实体主体适用的编码方式,内容编码在不丢失的前提下进行压缩;
content-language 实体主体使用的语言
content-length实体主体的大小
content-location替代对应资源的uri
content-md5实体主体的报文摘要
content-range实体主体的内容范围(范围请求)
content-type实体主体的媒体类型
expires实体主体过期的日期时间
last-modified资源的最后修改日期时间
响应报文:由状态行、各首部字段、空行、报文主体组成;
状态行、各首部字段又称报文首部;
各首部字段又称:http首部报文;
状态码:由3位数字组成;
1xx:表示请求正在处理;
2xx:表示请求返回成功;
3xx:重定向状态码,表示需要进行附加操作以完成请求;
4xx:客户端错误状态码,表示服务器无法处理请求;
5xx:服务器错误状态码,表示服务器处理请求错误;
常见状态码:
200 ok 处理成功
204 处理成功但无资源返回
206 客户端发送范围请求,服务器执行返回范围数据
301 永久重定向
302 临时重定向
400 客户端错误,存在语法错误
401 用户认证失败
403 请求被服务器拒绝
404 页面不存在
500 服务器内部错误
503 服务器超负荷
HTTP/1.0 200 OK Date: Fri, 30 Nov 2018 03:04:01 GMT Server: Apache/2.4.18 (Ubuntu) Last-Modified: Mon, 26 Nov 2018 22:08:32 GMT ETag: "f2e8-57b9892db4d5c-gzip" Accept-Ranges: bytes Vary: Accept-Encoding Content-Encoding: gzip Cache-Control: max-age=3600 Expires: Fri, 30 Nov 2018 04:04:01 GMT Content-Length: 14438 Connection: close Content-Type: text/html
报文主体、实体主体区别:
报文:是http通信中基本单位;
报文主体用于传输请求或响应的实体主体,请求头部、空行、请求数据/各首部字段、空行、报文主体3部分组成;
实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成;
实体主体:报文主体;
为了高效传输,采用压缩传输的内容编码和分割发送分块传输编码:
内容编码:内容编码是应用在实体内容上的编码格式,并保持实体信息的完整性,由客户端接收并负责解码;
常见格式:gzip、compress、deflate、identity(不进行编码);
分块传输编码:将实体内容分块传输;
范围请求:从上次中断下载点处开始下载称为范围请求,使用首部字段 Range 来指定资源的 byte 范围,如下:
Range: bytes=-3000, 5000-7000
http协议版本:
http 1.0 短暂链接
http 1.1 持久链接,减少了TCP连接时3次握手和4次挥手的开销;
管线化技术:可同时发送多个请求;如下图
HTTP缺点:
通信使用明文,内容会被窃听;
不验证通信方身份,可能会伪装;
无法证明报文的文正,可能会被篡改;
1.通信使用明文,内容被窃听,加密处理防止窃听;
通信加密-->使用ssl和tls加密http,http+ssl=https,在安全的通信线路上进行传输请求和响应;
内容加密-->在报文主体中加密,client和server端都需要有加解密机制;
2.不验证通信方身份,可能会伪装,
客户端伪装
web服务器伪装
使用ssl证书机制;
3.无法证明报文的存在,可能会被篡改;
接受到的内容可能被篡改;
如何防止被篡改,使用数字证书即md5和sha算法校验方法;
HTTP+加密+认证+完整保护=HTTPS,即HTTP通信接口使用ssl或tls协议;
加密技术:
1.对称密钥加密
加解密使用相同的密钥,会被窃听,只要有密钥就可以加解密了;
2.非对称密钥加密
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有
密钥,也不必担心密钥被***者窃听而盗走。
HTTPS使用混合加密机制;
HTTPS通信步骤:
1.客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等);
2.服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的;
3.之后服务器发送 Certificate 报文。报文中包含公开密钥证书;
4.最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
5.SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密;
6.接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密;
7. 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准;
8.服务器同样发送 Change Cipher Spec 报文;
9.服务器同样发送 Finished 报文;
10.服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求;
11. 应用层协议通信,即发送 HTTP 响应;
12. 最后由客户端断开连接。断开连接时,发送 close_notify 报文。这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信;
HTTPS缺点,处理速度会慢2-100倍;处理慢分为2种:
1.通信慢;
2.大量消耗cpu和内存资源,负载高;
解决方法:
1.SSL加速器;
2.非敏感信息使用http通信;
认证:只为某部分人可访问服务器;
核对登录人的方法:密码、动态令牌(一次性密码)、数字证书(仅限本人/终端使用)、生物认证(人脸指纹等)、IC卡;
HTTP使用的认证方法:
BASIC认证(基本认证),非常用;
DIGEST认证(摘要认证),非常用;
SSL客户端认证,需支付费用;
FormBase 认证(基于表单认证):常用,使用cookie来管理session。
基于表单认证本身是通过服务器端的 Web 应用,将客户端发送过来的用户 ID 和密码与之前登录过的信息做匹配来进行认证的。但鉴于 HTTP 是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即无法实现状态管理,因此即使当该用户下一次继续访问,也无法区分他与其他的用户。于是我们会使用 Cookie 来管理Session,以弥补 HTTP 协议中不存在的状态管理功能。
HTTP瓶颈:
微信、QQ、微博等SNS平台,当有海量信息公布,服务器要通知每个需送达的客户端,http无法妥善的处理这些信息;
web服务器使用http,会遇到以下瓶颈:
1.一条连接上只可发送一个请求。
2.请求只能从客户端开始。客户端不可以接收除响应以外的指令。
3.请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
4.发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
5.可任意选择数据压缩格式。非强制压缩发送。
解决方法:
Ajax:异步JavaScript和XML技术,是一种有效利用 JavaScript 和DOM(Document Object Model,文档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此而减少,借由这种手段,就能从已加载完毕的 Web 页面上发起请求,只更新局部页面。
缺点:利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产生。
comet:一旦服务器更新后,comet不会让请求等待,而是直接给客户端返回响应,这种延迟的应答,模拟实现服务器向客户端推送,但为了实现推送功能,Comet 会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。但为了保留响应,一次连接的持续时间也变长了。期间,为了维持连接会消
耗更多的资源。
WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准,主要是为了解决 Ajax 和 Comet 里XMLHttpRequest 附带的缺陷所引起的问题。
一旦浏览器和服务器建立websocket协议,以后的所有通信多依靠这个专用协议进行;
WebSocket协议的主要特点:
推送功能,支持由服务器向客户端推送数据功能;
减少通信量,一旦建立WebSocket链接,就一直保持连接;
握手请求(一次)
握手响应
web技术
HTML超文本传输协议,标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言,这种特殊字符串称为HTML标签;
设计应用CSS,层叠样式表,如何展现html内的各种元素;
CSS 的理念就是让文档的结构和设计分离,达到解耦的目的;
动态HTML:使用客户端的脚本语言使静态的HTML内容变成动态的技术的总称;
动态 HTML 技术是通过调用客户端脚本语言 JavaScript,实现对 HTML 的 Web 页面的动态改造,利用DOM(Document Object Model,文档对象模型)可指定欲发生动态变化的 HTML 元素;
DOM:用以操作HTML和XML文档的API(应用编程接口),使用DOM可以将HTML内的元素当做对象操作,如取出元素内的字符串、改变那个 CSS 的属性等,使页面的设计发生改变;
web初期:由客户端发起请求后,服务器返回实现准备好的内容,随着web普及后,引入了动态创建HTML内容;
CGI通用网关接口:web服务器在接收到客户端的请求后转发给程序的一套机制,在CGI的作用下,程序会根据请求内容动态作出相应的动作,如创建HTML内容;
CGI程序:PHP、C、perl等;CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能,每次接到请求,程序都要跟着启动一次。因此一旦访问量过大,Web 服务器要承担相当大的负载;
servlet是java语言实现的接口,是一种能在服务器上动态创建内容的程序,Servlet 常驻内存因此在每次请求时,可启动相对进程级别更为轻量的 Servlet,程序的执行效率从而变得更高;
数据发布的格式与语言:
XML可扩展标记语言,是一种可按应用目标进行扩展的通用标记语言。
发布更新信息的 RSS/Atom
Javascript的JSON