HTTP
它是什么?
Web文档的传输协议。
诞生
HTTP的诞生,是因研究组织的博士提出了一种,想让远隔两地的研究者们共享知识的设想。
然后诞生了三项技术:第一个是页面的文本HTML
;第二个是作为文档传递协议的HTTP
;第三个是指定文档所在地址的URL
。
TCP/IP协议族
它是什么?
它是互联网协议集合的总称。HTTP协议是它的一个子集。
TCP/IP的分层管理
也就是五层模型,这种设计的好处是,每个层次内部的设计就能够自由改动,只关心分派给自己的任务。
应用层
- HTTP协议
- FTP协议
- DNS协议
传输层
- TCP协议
- UDP协议
网络层
- IP协议
- ARP协议
链接层
- 以太网协议
IP协议
它的作用是什么?
IP协议的作用是把各种数据包传送给对方。
怎么确保能传送到对方那里呢?
需要依靠
IP地址
和MAC地址
ARP协议
它是什么?
用来解析地址的协议。
它的作用是什么?
根据通信方的IP地址,就可以反查出对应的MAC地址。
TCP协议
它的作用是什么?
提供可靠的字节流服务。
它具体做了什么?
为更容易传送,把大块数据分割,并能够确认数据最终是否送达对方。
三次握手
它的作用是什么?
确保数据能到达目标。
它的过程是怎样的?
- 1.发送端,首先发送一个带有
SYN标志
的数据包给对方。 - 2.接收端收到后,回传一个带有
SYN/ACK标志
的数据包,以表示传达确认信息。 - 3.发送端,最后再回传一个带有
ACK标志
的数据包,代表握手结束。
- 1.发送端,首先发送一个带有
DNS服务
它的作用是什么?
提供域名到IP地址之间的解析服务。
HTTP协议
它的作用是什么?
生成针对目标Web服务器的HTTP请求报文。
各种协议和HTTP协议的关系
客户端-应用层:客户端请求一个URL网址
,先到DNS服务
获得IP地址
,HTTP协议
的职责是生成针对目标Web服务器的HTTP请求报文。
客户端-传输层:接着TCP协议
为了方便通信,将HTTP请求报文分割成报文段,把每个报文段可靠地传给对方。
网络层:再下一层IP协议
搜索对方的地址,一边通过路由中转一边传送。
服务器-传送层:TCP协议
将从对方那里接收到的报文段,按序号以原来的顺序重组请求报文。
服务器-传输层:HTTP协议
对Web服务器请求的内容做处理。
URI和URL
它是什么?
统一资源标识符。
它有什么作用?
可以定位互联网上的资源位置。
HTTP的请求和相应
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。
响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
HTTP协议的状态
HTTP协议
自身不具备保存之前发送过的请求或响应的功能。也就是无状态。
为了实现期望的保持状态功能,于是引入了Cookie
技术。
Method
GET
用来请求访问已被URI识别的资源。
POST
用来传输实体的主体。
PUT
用来传输文件。但是自身没有验证机制,存在安全性问题。
HEAD
用来获得报文首部信息。
DELETE
用来删除文件。但是自身不带验证机制。
OPTIONS
用来查询针对请求URI指定的资源支持的方法。
HTTP持久连接
它是什么?
建立1次TCP连接后,可以进行多次请求和响应的交互。
它的好处是什么?
减少额外开销,减轻服务器的负载,节省时间,提升速度。
使用它有什么条件?
需要HTTP/1.1及以上,服务器端也要能够支持持久连接,客户端也要支持。
管线化
它是什么?
它是在持久连接的基础之上实现的一种技术。
它的作用是什么?
能够做到同时并行发送多个请求。
Cookie
它是什么?
一种技术。
它的用途是什么?
解决HTTP无状态的问题。
它是怎么做到的?
通过在请求和响应报文中写入Cookie信息,来控制客户端的状态。
总结
Cookie会根据从服务器端发送的响应报文内的一个叫Set-Cookie
的首部字段信息,通知客户端保存Cookie。
当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值,然后发送出去。
服务器端拿到客户端发送过来的Cookie后,会去对比服务器上的记录,辨别出这是哪一个客户端发送的请求,最后得到之前的状态信息。
HTTP信息
HTTP报文
它是什么?
它是HTTP协议交互的信息。客户端发送的叫请求报文,服务器端响应的叫响应报文。
它由什么组成?
HTTP报文是由
报文首部
和报文主体
组成,以空行分开。请求报文的组成部分有哪些?
有方法、URI、HTTP版本、HTTP首部字段等部分。
响应报文的组成部分有哪些?
有HTTP版本、状态码、HTTP首部字段。
HTTP首部字段
它是什么?
它是构成
HTTP
报文的要素之一。
HTTP请求报文
Accept
用来告知服务器,那份资源最好是给什么样的格式。按照优先级可以指定多种媒体类型。
Accept-Encoding
用来告知服务器,用户代理支持的内容编码及内容编码的优先级顺序。
Authorization
用来告知服务器,用户代理的认证信息(证书值)。通常,想要通过服务器认证的用户代理会在接收到返回的 401 状态码响应后,把首部字段 Authorization 加入请求中。
Connection
keep-alive 持久连接。
HTTP响应报文
Cache-Control
通过指定首部字段 Cache-Control
的指令,就能操作缓存的工作机制。
- no-cache 指令的目的是为了防止从缓存中返回过期的资源。
- public 指令明确表明其他用户也可利用缓存。
- private 指令表面响应只以特定的用户作为对象。
- no-store 指令暗示请求或响应中包含机密信息。
HTTP状态码
它是什么?
一个用来描述请求结果的标记。
它的用途是什么?
用来告知客户端从服务器端返回的请求结果。
状态码的类别
- 1XX Informational(信息性状态码) 接收的请求正在处理。
- 2XX Success(成功状态码) 请求正常处理完毕。
- 200 OK 表示发送的请求被正常处理。
- 204 No Content 表示请求处理成功,但是没有资源可返回。
- 206 Partial Content 表示对资源某一部分的请求。
- 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求。
- 301 Moved Permanently 永久性重定向,表示请求的资源已被分配了新的URI。
- 302 Found 临时性重定向,表示已移动的资源对应的URI将来还有可能发生改变。
- 303 See Other 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
- 304 Not Modified 表示发送附带条件的请求时,服务器端找到资源,但条件未满足要求的情况。
- 4XX Client Error(客户端错误状态码) 服务器无法处理请求。
- 400 Bad Request 表示客户端请求报文中存在语法错误。
- 401 Unauthorized 表示发送的请求需要有通过HTTP认证。
- 403 Forbidden 表明对请求资源的访问被服务器拒绝了,没有权限访问。
- 404 Not Found 表明服务器上无法找到请求的资源。
- 5XX Server Error(服务器错误状态码) 服务器处理请求出错。
- 500 Internal Server Error 表明服务器端在执行请求时发生了错误。
- 503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护。
虚拟主机
它是什么?
在物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。
它的用途是什么?
一台Web服务器可以搭建多个独立域名的Web网站。
如何区分两个域名?
指定URI。
代理服务器
它是什么?
扮演了位于客户端和服务器中间人的角色。
它做了什么?
接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
为什么要用它?
- 可以利用缓存技术减少网络带宽的流量。
- 可以组织内部针对特定网站的访问控制。
HTTPS
它是什么?
它是与
SSL
组合使用的HTTP
。(HTTPS = HTTP + 加密 + 认证 + 完整性保护)它解决什么问题?
保障HTTP传输的安全。
HTTP协议有哪些不安全的问题?
- 通信使用明文,内容可能会被窃听。
- 不验证通信方的身份,因此有可能遭遇伪装。
- 无法证明报文的完整性,所以有可能已遭篡改。
SSL是什么?
一种使用最为广泛的网络安全技术。
SSL可以做什么?
- 提供通信加密处理。
- 确认通信方的证书。
SSL有什么不足?
- 速度慢,HTTPS比HTTP要慢2到100倍。慢分为两种,一种是通信慢。另一种是会大量消耗CPU及内存资源,导致处理速度变慢。
SPDY
它有什么用?
用来解决HTTP的性能瓶颈。
HTTP有哪些性能瓶颈?
- 一条连接上只可发送一个请求。
- 请求只能从客户端开始。客户端不可以接收除响应以外的指令。
- 请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
- 每次互相发送相同的首部造成的浪费较多。
它是怎么解决的?
SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL。
使用SPDY后,可以获得哪些功能?
- 多路复用流。
- 赋予请求优先级。
- 压缩HTTP首部。
- 服务器主动推送功能。
- 服务器提示功能。
WebSocket
它是什么?
它是一套新的协议及API。
它有什么用?
实现Web浏览器与Web服务器之间全双工通信标准。
它的主要特点有哪些?
- 推送功能。
- 减少通信量。