http协议属于TCP/IP协议族中的一员,TCP/IP是互联网中各类协议的总称,分层管理,共有4层。

http协议_第1张图片

应用层: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地址),发送到客户端依次解包。

http协议_第2张图片

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部分组成;

实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成;

实体主体:报文主体;

http协议_第3张图片

为了高效传输,采用压缩传输的内容编码和分割发送分块传输编码:

内容编码:内容编码是应用在实体内容上的编码格式,并保持实体信息的完整性,由客户端接收并负责解码;

常见格式:gzip、compress、deflate、identity(不进行编码);

分块传输编码:将实体内容分块传输;

范围请求:从上次中断下载点处开始下载称为范围请求,使用首部字段 Range 来指定资源的 byte 范围,如下:

Range: bytes=-3000, 5000-7000


http协议版本:

    http 1.0 短暂链接

    http 1.1 持久链接,减少了TCP连接时3次握手和4次挥手的开销;

http协议_第4张图片

    管线化技术:可同时发送多个请求;如下图

http协议_第5张图片

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