1、计算机中什么是协议
在计算机中要与其他设备进行通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种统一的规则。而我们就把这种规则称为协议(protocol)。
2、什么是HTTP
HTTP(HyperText Transfer Protocol ,超文本传输协议严禁的译名应该是超文本转移协议)是用于客户端和服务器之间通讯的协议,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。
HTTP 协议用于客户端和服务器端之间的通信
HTTP 通过请求和响应的交换达成通信
HTTP 是不保存状态的协议
HTTP 通过URI定位资源
3、URI和URL
URI:统一资源标识符,URI 就是由某个协议方案表示的资源的定位标识符。
URL:统一资源定位符,URL正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址,如http://www.baidu.com。
URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联网上所处的位置)。可见 URL是 URI 的子集。
使用URI表示的示例:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
4、TCP/IP协议族
通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。
TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。
应用层:决定了向用户提供应用服务时通讯的活动。在该层的协议如FTP、DNS、HTTP等。
传输层:传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。如TCP、UDP等。
网络层:用于处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
数据链路层:又称链路层,用来处理链接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
TCP/IP通信传输流
5、与HTTP关系密切的协议:IP、TCP、DNS
IP协议:负责将数据包传输到指定计算机
TCP协议:提供可靠的字节流服务
DNS协议:负责域名解析,将域名解析为目标ip地址
6、HTTP的主要版本
- HTTP/1.0:
HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协议标准至今仍被广泛使用在服务器端。 - HTTP/1.1:
1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本。 - HTTP/2.0:
负责互联网技术标准的 IETF(Internet Engineering Task Force,互联网工程任务组)创立 httpbis(Hypertext Transfer ProtocolBis,http://datatracker.ietf.org/wg/httpbis/)工作组,其目标是推进下一代 HTTP——HTTP/2.0 在 2014 年 11 月实现标准化。HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。
7、HTTP支持的方法
HTTP/1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP/1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
GET:获取资源
POST:传输实体主体
HEAD:获取报文头部
OPTIONS:询问支持的方法
PUT:从客户端向服务器传送的数据取代指定的文档的内容或传输文件
PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新 。
DELETE:删除资源
TRACE:追踪路径
CONNECT:要求用隧道协议链接代理
8、HTTP状态码
- 状态码的类别:
1XX:Informational(信息性状态码),表示接收的请求正在处理
2XX:Success(成功状态码),表示请求处理成功
3XX:Redirection(重定向状态码),表示请求被重定向
4XX:Client Error(客户端错误状态码),表示客户端有误 如输入地址不存在等
5XX:Server Error(服务端错误状态码),表示服务端异常 - 主要状态码详解:
100 Continue:继续。客户端应继续其请求
101 Switching Protocols:切换协议。服务器根据客户端的请求切换协议。
200 OK:请求成功。一般用于GET与POST请求
201 Created:已创建。成功请求并创建了新的资源
202 Accepted:已接受。已经接受请求,但未处理完成
204 No Content:无内容。服务器成功处理,但无可用资源返回。
206 Partial Content:部分内容。服务器成功处理了部分GET请求。
301 Moved Permanently:永久重定向,后续请求都会自动匹配新的URI。
302 Found:临时重定向。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other:查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified:未找到符合附带条件的资源,其实和重定向没有关系。
307 Temporary Redirect:临时重定向。与302类似。使用GET请求重定向。
400 Bad Request:客户端请求的语法错误,服务器无法理解
401 Unauthorized:请求要求用户的身份认证。
402 Payment Required:保留,将来使用。
403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
404 Not Found:最常见的状态码之一,资源或路径不存在。
405 Method Not Allowed:客户端请求中的方法被禁止。
406 Not Acceptable:服务器无法根据客户端请求的内容特性完成请求。
408 Request Time-out:服务器等待客户端发送的请求时间过长,超时。
500 Internal Server Error:服务器内部错误,无法完成请求。
501 Not Implemented:服务器不支持请求的功能,无法完成请求。
502 Bad Gateway:充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 Service Unavailable:由于超载或系统维护,服务器暂时的无法处理客户端的请求。
504 Gateway Time-out:充当网关或代理的服务器,未及时从远端服务器获取请求。
505 HTTP Version not supported:服务器不支持请求的HTTP协议的版本,无法完成处理。
9、Cookie和Session
由于HTTP是无状态的,因此引入了Cookie技术来解决此问题。
Cookie 技术是通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。
随着前后端分离技术的兴起,Cookie和Session逐渐被JWT技术所取代
10、HTTP的首部(也称Headers)
-
通用首部字段:
Cache-Control:控制缓存的行为
Connection:逐跳首部、连接的管理
Date:创建报文的日期时间
Pragma:报文指令
Trailer:报文末端的首部一览
Transfer-Encoding:指定报文主体的传输编码方式
Upgrade:升级为其他协议
Via:代理服务器的相关信息
Warning:错误通知 -
请求首部字段:
Accept:用户代理可处理的媒体类型
Accept-Charset:优先的字符集
Accept-Encoding:优先的内容编码
Accept-Language:优先的语言(自然语言)
Authorization:Web认证信息
Expect:期待服务器的特定行为
From:用户的电子邮箱地址
Host:请求资源所在服务器
If-Match:比较实体标记(ETag)
If-Modified-Since:比较资源的更新时间
If-None-Match:比较实体标记(与 If-Match 相反)
If-Range:资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards:最大传输逐跳数
Proxy-Authorization:代理服务器要求客户端的认证信息
Range:实体的字节范围请求
Referer:对请求中 URI 的原始获取方
TE:传输编码的优先级
User-Agent HTTP:客户端程序的信息 -
响应首部字段
Accept-Ranges:是否接受字节范围请求
Age:推算资源创建经过时间
ETag:资源的匹配信息
Location:令客户端重定向至指定URI
Proxy-Authenticate:代理服务器对客户端的认证信息
Retry-After:对再次发起请求的时机要求
Server:HTTP服务器的安装信息
Vary:代理服务器缓存的管理信息
WWW-Authenticate:服务器对客户端的认证信息 -
实体首部字段:
Allow:资源可支持的HTTP方法
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的大小(单位:字节)
Content-Location:替代对应资源的URI
Content-MD5:实体主体的报文摘要
Content-Range:实体主体的位置范围
Content-Type:实体主体的媒体类型
Expires:实体主体过期的日期时间
Last-Modified:资源的最后修改日期时间 -
为Cookie服务的首部字段
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段 -
实例:
11、HTTPS的出现
- HTTP的缺点:
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密 HTTP 的通信内容。
与SSL组合之后的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议) 或 HTTP over SSL。它的出现就是为了解决HTTP安全性问题的。
HTTP 加上加密处理和认证以及完整性保护后即是HTTPS
HTTP+ 加密 + 认证 + 完整性保护 = HTTPS
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。
通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSL和TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的 HTTP。
虽然HTTPS解决了HTTP的安全性问题,但是HTTPS 也存在一些问题,那就是当使用 SSL时,它的处理速度会变慢。通常来讲HTTPS比HTTP要慢2到100倍。
因此,在需要对通讯进行加密时我们使用HTTPS协议,在对数据不敏感通讯时使用HTTP为佳。
12、HTTP 与 HTTPS 的区别是什么
安全性质不同:HTTP 是不安全的,而 HTTPS 是安全的。
URL 开头不同:HTTP 以 http:// 开头,HTTPS 以 https:// 开头。
标准端口不同:HTTP 标准端口是 80 ,HTTPS 的标准端口是 443。
加密要求不同:HTTP 无需加密,而 HTTPS 对传输的数据进行加密。
证书要求不同:HTTP 无需证书,而 HTTPS 需要 SSL 证书。
工作效率不同:HTTPS要比HTTP慢,通常来讲HTTPS比HTTP要慢2到100倍。
13、基于HTTP追加的协议
-
消除 HTTP 瓶颈的 SPDY 协议
SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL。
SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、Cookie 以及 HTTP 报文等。
使用 SPDY 后,HTTP 协议额外获得以下功能。
1、多路复用流
2、赋予请求优先级
3、压缩HTTP首部
4、推送功能
5、服务器提示功能 -
使用浏览器进行全双工通信的 WebSocket
WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。其中,WebSocket 协议由 IETF 定为标准,WebSocket API 由 W3C 定为标准。仍在开发中的 WebSocket 技术主要是为了解决 Ajax 和 Comet 里 XMLHttpRequest 附带的缺陷所引起的问题。
旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML或图片等任意格式的数据。
由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦确立WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
WebSocket的主要特点是实时通讯、推送功能、减少通信量 -
期盼已久的 HTTP 2.0
HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。
HTTP/2.0 没有采用文本格式,采用的是二进制格式。
HTTP/2.0 采用的是完全多路复用机制,而非有序并阻塞的。
HTTP/2.0 将报头进行压缩,降低了成本。
HTTP/2.0 服务器主动将响应“推送”到客户端的缓存里面。 -
Web 服务器管理文件的 WebDAV
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。它作为扩展 HTTP/1.1 的协议定义在 RFC4918。