HTTP学习笔记

HTTP简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,顾名思义一开始它是为了解决超文本传输问题,之后运用到各种场景。HTTP正式作为标准被公布是在1996年,版本被命名为HTTP/1.0,并记载于RFC1945,1997年公布的HTTP/1.1是目前主流的HTTP协议版本,当初的标准是RFC2068,之后发布了修订版RFC2616。

TCP/IP协议簇

通常使用的网络是在TCP/IP协议簇的基础上运作的,HTTP属于它内部的一个子集。所以让我们先从整体角度入手,了解下网络基础。
TCP/IP协议簇具有分层的特点,分为以下4层:

层次作用对应协议
应用层提供向用户提供应用服务时通信的活动HTTP、DNS、FTP等
传输层提供处于网络连接中的两台计算机之间的数据传输TCP、UDP
网络层用来处理在网络上流动的数据包IP
数据链路层用来处理连接网络的硬件部分

下图能够让人更直观地理解HTTP与TCP/IP协议簇的其他协议的关系。HTTP与其他协议的关系

HTTP协议

HTTP协议用于服务端和客户端的通信,客户端发送请求,服务端进行响应,客户端使用方法下达命令和服务端进行交互。

HTTP方法

  • GET
    请求访问已被URI识别的资源
  • POST
    传输实体主体
  • PUT
    传输文件
  • HEAD
    获取首部,确认URI的有效性及资源更新的日期时间等。
  • DELETE
    删除文件
  • OPTIONS
    查询针对请求URI指定的资源支持的方法。(如果是对服务器本身发起请求,可用一个*代替URI)
  • TRACE
    让Web服务器端将之前的请求通信环回给客户端的方法。一般搭配Max-Forwards首部进行使用。
  • CONNECTION
    要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

协议特点

  • 持久连接
    初始的HTTP协议中TCP是短连接,HTTP/1.1和一部分的HTTP/1.0提出了持久连接(HTTP Persistent Connections,也称为HTTP keep-alive或HTTP connectionreuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。这样做减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,另外Web页面的显示速度也相应提高了。
  • 使用Cookie的状态管理
    HTTP是一种不保存状态、即无状态协议。这是为了更快地处理大量事务,确保协议的可伸缩性。所以为了实现期待的保存状态功能,引入了Cookie技术:通过在请求和响应报文中写入Cookie信息来控制客户端状态。

HTTP报文

报文结构

用于HTTP协议交互的信息被称为HTTP报文,分为请求报文(客户端发给服务端)、响应报文(服务端发给客户端),大致上由报文首部和报文主体组成。
报文组成
请求报文:请求报文
其中请求行=用于请求的方法+请求URI+HTTP版本
响应报文:
响应报文
其中状态行=表明响应结果的状态码+原因短语+HTTP版本

报文首部

格式为首部字段名:字段值,可有多个字段值,用逗号隔开。

  • 通用首部字段
    即请求报文和响应报文都会使用的首部。
  • 请求首部字段
  • 响应首部字段
  • 实体首部字段
  • 其他首部字段

HTTP状态码

HTTP状态码
常见状态码:

  • 100 Continue
    表示目前为止一切正常, 客户端应该继续请求, 如果已完成请求则忽略.
  • 101 Switching Protocols
    表示服务器应客户端升级协议的请求(Upgrade请求头)正在进行协议切换。
  • 200 OK
    从客户端发来的请求被服务端正确处理。
  • 204 No Content
    代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
  • 206 Partial Content
    表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求
  • 301 Moved Permanently
    永久性重定向。表示请求的资源已被分配了新的URI,如果已经把资源对应的URI保存为书签了,这时应该按Location首部字段提示的URI重新保存。
  • 302 Found
    临时性重定向。表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
  • 303 See Other
    表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303状态码明确表示客户端应当采用GET方法获取资源,这点与301、302状态码有区别。
  • 304 Not Modified
    表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified。我的理解是服务器端资源未改变,重定向至使用客户端未过期的缓存。
  • 307 Temporary Redirect
    临时重定向。类似 302,区别在于能够确保请求方法和消息主体不会发生改变。
  • 308 Permanent Redirect
    永久重定向。类似 301,区别在于能够确保请求方法和消息主体不会发生改变。
  • 400 Bad Request
    表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
  • 401 Unauthorized
    表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。Authorization 请求消息头含有服务器用于验证用户代理身份的凭证,通常会在服务器返回401 Unauthorized 状态码以及WWW-Authenticate 消息头之后在后续请求中发送此消息头。
  • 403 Forbidden
    表明对请求资源的访问被服务器拒绝了。可以在实体主体内描述拒绝原因。
  • 404 Not Found
    表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
  • 405 Method Not Allowed
    表明服务器禁止了使用当前 HTTP 方法的请求。需要注意的是,GET 与 HEAD 两个方法不得被禁止。
  • 410 Gone
    说明请求的内容在服务器上不存在了,同时是永久性的丢失。如果不清楚是否为永久或临时的丢失,应该使用404。
  • 500 Internal Server Error
    表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
  • 503 Service Unavailable
    表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端。

HTTPS

HTTP协议也存在着一些问题,如通信使用明文、无法验证通信方身份以及无法证明报文完整性等。针对这些问题,HTTPS应运而生。可理解为HTTP+加密+认证+完整性保护=HTTPS。
HTTPS并不是什么新协议,只是HTTP通信接口部分用SSL(SecureSocket Layer)和TLS(Transport Layer Security)协议代替而已。
HTTP&HTTPS

基于HTTP的功能追加协议

HTTP协议也存在着一定的缺陷,如:
●一条连接上只可发送一个请求。
●请求只能从客户端开始。客户端不可以接收除响应以外的指令。
●请求/响应首部未经压缩就发送。首部信息越多延迟越大。
●发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
●可任意选择数据压缩格式。非强制压缩发送。
Ajax的解决办法是利用JavaScript和DOM(Document Object Model,文档对象模型)的操作,以达到局部Web页面替换加载的异步通信手段。这样做只是减少了响应的通信量。
Comet是采取服务器端有内容更新后直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。虽然可以减少大量请求,但一次连接的持续时间也变长了。

SPDY

SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY规定通信中使用SSL。
使用SPDY后,HTTP协议额外获得以下功能。
多路复用流
赋予请求优先级
压缩HTTP首部
推送功能

WebSocket

WebSocket,即Web浏览器与Web服务器之间全双工通信标准。由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
WebSocket具有推送功能以及减少通信量等主要特点。为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次“握手”(Handshaking)的步骤。请求时用到Upgrade首部字段,响应用到101状态码。

WebDAV

WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。它作为扩展HTTP/1.1的协议定义在RFC4918。这个协议也新增了一些相关方法与状态码。

HTTP/1.1和HTTP/2.0

HTTP/2.0在基于HTTP/1.1的基础上升级了多路复用、服务器推送、数据压缩等功能。

注:本文图源《图解HTTP》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值