HTTP协议介绍

1、什么是HTTP?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

2、HTTP发展史。

  • HTTP/0.9 - 单行协议
    HTTP于1990年问世,那时候HTTP非常简单:只支持GET方法;没有首部;只能获取纯文本。
  • HTTP/1.0 - 搭建协议的框架
    1996年,HTTP正式被作为标准公布,版本为HTTP/1.0。1.0版本增加了首部、状态码、权限、缓存、长连接(默认短连接)等规范,可以说搭建了协议的基本框架。
  • HTTP/1.1 - 进一步完善
    1997年,1.1版本接踵而至。1.1版本的重大改进在于默认长连接;强制客户端提供Host首部;管线化;Cache-Control、ETag等缓存的相关扩展。
  • HTTP/2.0 - 强势升级
    HTTP2.0性能提升的核心就在于二进制分帧层。HTTP2是二进制协议,他采用二进制格式传输数据而不是1.x的文本格式。

3、HTTP工作原理。

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

  1. 客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn

  2. 发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

  3. 服务器接受请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

  4. 释放连接TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

  5. 客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

4、HTTP常见请求方式

  1. OPTIONS
    返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
  2. HEAD
    向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
  3. GET
    向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
  4. POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
  5. PUT
    向指定资源位置上传其最新内容
  6. DELETE
    请求服务器删除Request-URL所标识的资源
  7. TRACE
    回显服务器收到的请求,主要用于测试或诊断
  8. CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

4.1、GET和POST的区别

GET POST
无消息体,只能携带少量数据 有消息体可以携带大量的数据
GET在浏览器回退时是无害的 POST在浏览器回退会再次提交请求
GET请求会被浏览器主动cache POST不会被浏览器主动cache除非手动设置
GET请求在URL中传送的参数是有长度限制的 POST请求在URL中传送的参数没有长度限制的
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息 POST相对更加安全

5、HTTP常见状态码

  • 1xx: 接受,继续处理
  • 200: 成功,并返回数据
  • 201: 已创建
  • 202: 已接受
  • 203: 成为,但未授权
  • 204: 成功,无内容
  • 205: 成功,重置内容
  • 206: 成功,部分内容
  • 301: 永久移动,重定向
  • 302: 临时移动,可使用原有URI
  • 304: 资源未修改,可使用缓存
  • 305: 需代理访问
  • 400: 请求语法错误
  • 401: 要求身份认证
  • 403: 拒绝请求
  • 404: 资源不存在
  • 500: 服务器错误

6、TCP三次握手与四次挥手

三次握手

建立连接前,客户端和服务端需要通过握手来确认对方:

  • 客户端发送 syn(同步序列编号) 请求,进入 syn_send 状态,等待确认
  • 服务端接收并确认 syn 包后发送 syn+ack 包,进入 syn_recv 状态
  • 客户端接收 syn+ack 包后,发送 ack 包,双方进入 established 状态

四次挥手

  • 客户端 – FIN --> 服务端, FIN—WAIT
  • 服务端 – ACK --> 客户端, CLOSE-WAIT
  • 服务端 – ACK,FIN --> 客户端, LAST-ACK
  • 客户端 – ACK --> 服务端,CLOSED

7、HTTPS和HTTP区别

  • HTTP 是明文传输,HTTPS 通过 SSL\TLS 进行了加密
  • HTTP 的端口号是 80,HTTPS 是 443
  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费
  • HTTPS 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

7.1、HTTP存在的问题

  1. 通信使用明文(不加密),内容可能被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以可能遭篡改

7.2、HTTPS

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。

HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和**协商,对称加密算法采用协商的**对数据加密,基于散列函数验证信息的完整性。
HTTP协议介绍

7.3、解决HTTP存在的问题

1、解决内容可能被窃听的问题

  1. 对称加密
    这种方式加密和解密同用一个**。加密和解密都会用到**。没有**就无法对密码解密,反过来说,任何人只要持有**就能解密了。
    以对称加密方式加密时必须将**也发给对方。可究竟怎样才能安全地转交?在互联网上转发**时,如果通信被监听那么**就可会落人攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的**。

  2. 非对称加密
    公开**加密使用一对非对称的**。一把叫做私有**,另一把叫做公开**。顾名思义,私有**不能让其他任何人知道,而公开**则可以随意发布,任何人都可以获得。
    使用公开**加密方式,发送密文的一方使用对方的公开**进行加密处理,对方收到被加密的信息后,再使用自己的私有**进行解密。利用这种方式,不需要发送用来解密的私有**,也不必担心**被攻击者窃听而盗走。
    非对称加密的特点是信息传输一对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密速度慢。

  3. 对称加密+非对称加密
    尽管非对称加密设计奇妙,但它加解密的效率比对称加密要慢多了。那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,将多种方法组合起来用于通信。在交换**环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的**”,然后对方用自己的私钥解密拿到“对称的**”,这样可以确保交换的**是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。

2、解决报文可能遭篡改问题

网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?----校验数字签名。

数字签名技术就是对“非对称**加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

3、解决通信方身份可能被伪装的问题

数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。我们来介绍一下数字证书认证机构的业务流程。首先,服务器的运营人员向数字证书认证机构提出公开**的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开**做数字签名,然后分配这个已签名的公开**,并将该公开**放入公钥证书后绑定在一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行非对称加密方式通信。公钥证书也可叫做数字证书或直接称为证书。

参考文献