基础技能之HTTP协议

Posted 白桦林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础技能之HTTP协议相关的知识,希望对你有一定的参考价值。

前言

现在问一个程序员HTTP是什么,大多的人都会答出来超文本传输协议(HyperText Transfer Protocol)。那么HTTP是什么呢?从HTTP的名字出发:“超文本传输协议”,它可以拆成三个部分,分别是:“超文本”、“传输”和“协议”。
协议:

HTTP是确立一种计算机之间通信规范,包括相关的各种控制和错误处理方式。

传输协议:

HTTP是一种专用于计算机两点之间传输数据的约定和规范。

超文本传输协议:

HTTP是一种专用于计算机两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP相关协议

HTTP是构建互联网的重要基础技术,是依赖许多其他技术来实现的,但同时许多技术也都依赖于它。

TCP/IP协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP和IP则在中间:TCP属于“传输层”,IP属于“网际层”。IP协议(Internet Protocol),主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。TCP协议(Transmission Control Protocol),位于IP协议之上,基于IP协议提供可靠的、字节流形式的通信。HTTP利用TCP/IP协议栈逐层打包再拆包,实现了数据传输,因此HTTP协议被称为“HTTP over TCP/IP”。

图1:OSI网络分层模型和TCP/IP协议栈

URI(统一资源标识符:Uniform Resource Identifier)是用来标记互联网上资源的一个名字,由“协议名+主机名+路径”构成。其中包括URL(统一资源定位符:Uniform Resource Locator)和URN(统一资源名称:Uniform Resource Name)。

基础技能之HTTP协议

图2:URI包括URL和URN

例如:https://chrome.google.com/webstore
  1. 协议名:即访问该资源应当使用的协议,在这里是“http”;

  2. 路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/webstore”。

HTTPS(HTTP over SSL/TLS)相当于“HTTP+SSL/TLS+TCP/IP”,HTTPS相较于HTTP只是 把下层的协议由TCP/IP换成了SSL/TLS,而 SSL/TLS是信息安全领域中的权威标准,采用了多种先进的加密技术保证通信安全 ,因此它能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道。
代理 (Proxy)代是HTTP传输过程中的“中转站”,是 客户端和服务器通信链路中的一个中间环节 ,可以实现缓存加速、负载均衡、安全防护和数据处理等功能。如果 想要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP” ,可以使用 nginx做反向代理尝试,当然专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真实IP

HTTP消息结构

HTTP是通过发送请求和给出响应实现通信的过程。即客户端向服务器发送请求时会携带请求的消息,服务器根据客户端发送过来的请求消息做出响应,发送消息给客户端。
HTTP报文结构:起始行+头部+空行+实体, 日常使用中,常把起始行+头部字段 = “请求头”或“响应头”,消息正文 = ”实体“HTTP协议的请求报文和响应报文的结构基本相同:
  1. 起始行(start line):描述请求或响应的基本信息;

  2. 头部字段集合(header):使用key-value形式更详细地说明报文;

  3. 空行(CRLF):在header之后必须要有一个空行,十六进制的“0D0A”;

  4. 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

基础技能之HTTP协议

图3:HTTP报文结构


Request Headers和Response Headers分别是本次HTTP的请求和响应。结构基本一样,唯一的区别是起始行,请求它的起始行(请求行)说明了请求方法(图4为GET),资源标示符指明了请求访问的资源对象(图4为/x/web-interface/index/icon),HTTP版本号(图4为HTTP/1.1),表示客户端使用的HTTP版本协议,响应的起始行(状态行)表明了HTTP版本号(图4为HTTP/1.1),状态码(图4为200),原因(图4为OK,表示一切正常)。请求行或状态行加上头部字段集合就构成了HTTP报文里完整的请求头或响应头头部字段是key-value的形式。据类型表示实体数据的内容是什么,Accept为客户端接受哪些Mine类型,Content-Type为服务器的,“,”顺序列出多个可能的选项,还可以用“;q=”参数来精确指定权重;数据编码表示实体数据的压缩方式,Accept-EncodingContent-Encoding支持的编码类型;语言类型表示实体数据的自然语言,Accept-LanguageContent-Language为可接受的语言;User-Agent为一个标识客户端的字符串。

图4:一次完整的HTTP请求响应

HTTP状态码

状态码在响应报文里表示了服务器对请求的处理结果。
  • 1××:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;

  • 2××:成功,报文已经收到并被正确处理,常用的有200、204、206;

  • 3××:重定向,资源位置发生变动,需要客户端重新发送请求,常用的有301、302、304;

  • 4××:客户端错误,请求报文有误,服务器无法处理,常用的有400、403、404;

  • 5××:服务器错误,服务器在处理请求时内部发生了错误,常用的有500、501、502、503。

HTTP/1.1中的请求方法

HEAD和GET类似,也是从服务器获取资源,但是不会返回请求的实体数据,只有响应头(元信息),是GET的简易版,如果不需要资源的话,可以避免传输body数据的浪费。 PUT和POST作用类似,有微妙不同,通常POST标识新建,PUT标识修改。
  • GET:获取资源,可以理解为读取或者下载数据;

  • HEAD:获取资源的元信息;

  • POST:向资源提交数据,相当于写入或上传数据;

  • PUT:更新资源数据,类似POST;

  • DELETE:删除资源;危险性大,很少用;

CONNECT要求服务器为客户端和另一台远程服务器建立一条特殊的链接,这时Web服务器充当代理的角色。OPTIONS要求服务器列出可对资源实行的操作方法,在响应头Allow字段里返回。TRACE用于对HTTP链路的测试或诊断,可以显示出请求 - 响应的传输路径。存在漏洞,会泄露网站的信息 ,所以通常也是禁止使用。
  • CONNECT:建立特殊的连接隧道;

  • OPTIONS:列出可对资源实行的方法;

  • TRACE:追踪请求-响应的传输路径。

安全与幂等
安全:在HTTP协议里,所谓的安全,是指请求方法不会对服务器上的资源造成实质的修改,所以只有GET和HEAD是安全的,因为是只读操作。
幂等:多次执行相同的操作,结果也都是相同的。所以GET和HEAD 即是安全的也是幂等的,DELETE可以多次删除同一个资源,效果都是“资源不存在”,所以也是幂等。POST是新增或提交数据,多次提交会创建多个资源,所以不是幂等的。PUT是替换或更新数据,多次更新一个资源,资源还是第一次更新的状态 ,所以是幂等的。 幂等:GET、HEAD、DELETE、PUT; 非幂等:POST。

cookie

Cookie是服务器委托浏览器存储的一些数据 ,让服务器有了“记忆能力”。一般是通过在响应报文中设定Cookie值, 为了保护Cookie会设置有效期、作用域等属性,常用的有Max-Age、Expires、Domain、 HttpOnly等。 Cookie最基本的用途是身份识别,实现有状态的会话事务。

总结

HTTP能聊的还有还多,如缓存控制,对称和非对称加密,优化及兼容历史协议等等。这些都基于它的工作流程 客户端 连接到web 服务器并 发送HTTP请求, 服务器 接收 请求并返回 HTTP响应 ,释放 连接TCP连接 客户端浏览器解析html内容。
基础技能之HTTP协议,

以上是关于基础技能之HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

Web基础之http协议

web开发基础之HTTP协议

接口测试之基础篇--http协议

001 web基础之HTTP协议

网络基础协议之http协议

前端基础之Http协议