HTTP(超文本传输协议)
- 网络基础
- TCP/IP协议簇:把互联网相关联的协议集合起来总称为TCP/IP,如:IP、TCP、DNS、UDP、FTP 、ICMP、HTTP等。
- TCP/IP分层管理:按层次分为四层:应用层、传输层、网络层和数据链路层,具体作用如下:
分层 | 作用 | 协议 |
---|---|---|
应用层 | 向用户提供应用服务时提供的活动 | FTP,DNS、HTTP |
传输层 | 提供处于网络连接中两台计算机之间的数据传输 | TCP、UDP |
网络层 | 处理网络上流动的数据包 | IP |
链路层 | 用来处理连接网络的硬件部分 | — |
- TCP/IP的通信传输流:客户端数据从应用层向下走,服务器端从链路层向上走。客户端会在每层之间传输数据是,经过一层会打上相应的首部信息,反之在服务器端会每一层去掉相应的首部,这种包装方法叫做封装。
- 协议详解:
协议 | 描述 |
---|---|
IP协议 | 把各种数据包传送给对方,要确保传送到正确的地方,需要满足两个重要条件:IP地址和MAC地址 |
TCP协议 | 提供可靠的字节流服务,将大块数据分割成报文段的数据包进行管理,同时采用了三次握手策略保证正确传输 |
DNS协议 | 提供域名到IP地址之间的地址解析服务 |
- 协议之间的相互关系
(带添加) - URI和URL
URI:统一资源标识符,由某个协议方案表示的资源的定位标识符,协议方案是指访问资源所使用的协议类型名称。
URL:统一资源定位符,表示资源的地点(互联网上所处的位置),是URI的子集。
- HTTP协议
- 作用:两台计算机之间使用HTTP协议进行通信时,必定一端是客户端,另一端是服务器端。
- HTTP请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
- 响应报文有协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体内容构成。
- HTTP是一种不保存状态的协议,即无状态协议 。
- 指定请求URI的方式:
//URI完整的请求URI
GET http://hackr.jp/index.html HTTP1.1
//在首部字段Host中写明网络域名或IP地址
GET /index.html HTTP1.1
Host: hackr.jp
- HTTP常用方法
方法 | 描述 |
---|---|
GET | 请求访问已被URI识别的资源 |
POST | 传输实体的主题,并非获取响应的主体内容 |
PUT | 用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置 |
HEAD | HEAD方法与GET方法一样,只是不返回报文主体内容,用于确认URI有效性和资源更新的日期时间 |
DELETE | 用来删除指定资源 |
OPTIONS | 用来查询针对请求URI指定的资源支持方法 |
CONNECT | 要求与代理服务器通信时建立隧道,使用隧道协议进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输,其格式如下:CONNECT 代理服务器名:端口号 HTTP版本 |
- 持久连接
- 目的:减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器的负载,提高了页面的显示速度。
- 特点:只要一段没有明确提出断开连接,则保持TCP连接状态。
- 管线化:同时并行发送多个请求,不要一个一个等待响应
- Cookie状态管理
- 目的:由于HTTP是无状态协议,不会对之前发生过的请求和相应的状态进行管理。Cookie技术则通过在请求和响应报文中写入Cookie技术来控制客户端的状态
- 原理:Cooki会根据从服务器端发送的响应报文内一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当下次客户端再次往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie之后,会去检查究竟一个客户端发来的连接请求,对比服务器上的经路,最后得到之前的状态信息。
- HTTP报文
- 定义:用于HTTP协议交互的信息,请求端的HTTP报文叫请求报文,相应端的叫响应报文。
- HTTP报文构成:报文首部,空行(CR + LF)、报文主题【非必须】
- 报文的首部内容包含以下四种信息:
内容 | 描述 |
---|---|
请求行 | 包含用于请求方法、请求URI和HTTP版本 |
状态行 | 包含表明响应结果的状态码,原因短语和HTTP版本 |
首部字段 | 包含表示请求和响应的各种条件和属性的各类首部 |
其他 | RFC里未定义的首部(Cookie等) |
- 报文首部字段包含内容有请求首部字段、响应首部字段、通用首部字段、实体首部字段和其他。
- 多部分对象集合:multipart/form-data,在Web表单文件上传时使用;multipart/bytesranges,状态码206,响应报文包含了国歌范围时使用。
- 获取部分内容的范围请求:
Range: bytes=5001-10000
- 内容协商:客户端与服务器端就响应的资源内容进行交涉后提供给客户端最为合适的内容。
- 内容协商分类:服务器驱动协商、客户端驱动协商、透明协商
- 编码传输
- 报文:HTTP通信中基本单位,由8位字节流组成。
- 实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
- HTTP报文的主题用于传输请求或响应的实体主体。通常情况下报文主体就等于实体主题,但是进行编码操作后会产生一定的变化导致产生了差异。
- 内容编码:应用在实体内容上的编码格式,并保持实体信息原样压缩。编码后的实体由客户端接收并负责解码。
- 常见的内容编码:gzip、compress、deflate、identity
- 分块传输编码:在传输大量数据是,通过把数据分割成多块的功能。每块大小为16进制,最后一块实体主体会用“0(CR+LF)”来标记。
- 状态码
状态码 | 类别 | 原因短语 | 典型 |
---|---|---|---|
1XX | 信息性状态码 | 接收的请求正在处理 | – |
2XX | 成功状态码 | 请求正常处理完毕 | 200:请求被正常处理; 204:请求已成功,但没有资源返回; 206: 客户端进行了范围请求,返回部分资源 |
3XX | 重定向状态码 | 需要进行附加操作完成请求 | 301:永久性重定向 302/307:临时性重定向 303: 临时性重定向,并且要求使用GET方法获取资源 304:客户端发送附带的条件请求,单未符合条件请求 |
4XX | 客户端错误状态码 | 服务器无法处理请求 | 400:请求报文中存在语法错误 401:发送的请求需要有通过HTTP认证 403:对请求资源的服务器拒绝了 404:无法找到该资源 |
5XX | 服务端错误状态码 | 服务器处理请求出错 | 500:服务端在执行请求时发生了错误 503:服务器暂时处于超负载或正在进行停机维护 |
- Web服务器
- 代理:有转发给哦能的应用程序,接收客户端发送的请求后转发给服务器,代理并不会改变请求URI会直接给源服务器(前方持有资源的目标服务器)。每次通过代理服务转发请求或者相应是,会追加写入Via首部信息。利用代理技术,可以使用缓存技术减少网络带宽的流量等。代理一般分为两种:缓存代理和透明代理
- 网关:转发其他服务器通信数据的服务器,接收从客户端发送来的 请求是,会想源服务器一般处理请求。网关能使通信线路上的服务器提供非HTTP服务。利用网关可以提高通信的安全性,如电商结算系统,查询数据库等操作。
- 隧道:在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。它可按要求建立一条与其他服务器通信线路,并使用SSL等加密手段进行通信。隧道目的是确保客户端与服务器端进行安全通信。隧道本身是不会去解析HTTP请求,并且会在通信双方断开连接时结束。
- 缓存:代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可以多次避免从源服务器转发资源。缓存是有有效期限的,当判定缓存失效后,代理服务器或浏览器会再次请求资源。