HTTP协议

1. 什么是HTTP协议

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器客户端浏览器之间传输超文本数据(文字、图片、视频、音频)应用层协议

同时也是一个双向协议,通过请求与响应的方式,基于浏览器-服务器架构模型进行工作。

2. HTTP协议通信过程

常见总结为以下七个步骤。

1. 建立TCP连接
Web浏览器首先要通过网络与Web服务器之间通过TCP建立连接,TCP与IP协议共同构建Internet
HTTP协议是比TCP处于更高层的应用层协议,只有当低层协议建立练接之后才能进行更高层次的连接。TCP连接的端口号一般是80
2. Web浏览器向Web服务器发送请求行
建立TCP连接之后,Web浏览器会向Web服务器发送请求命令
3. Web浏览器向服务器发送请求头
浏览器发送请求信息之后,还要以头信息的形式发送相关信息,并以空行代表发送结束
4. Web服务器应答
Web服务器接收请求后返回应答,第一部分是协议的版本号和应答状态码 例:“HTTP/1.1 200OK”
5. Web服务器发送应答头
服务器也会随着应答发送一些相关信息,并以空行代表发送结束
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息之后,就以Content-Type格式发送用户所请求的信息
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送请求数据后,就要关闭TCP连接了
若在报文中加入:connection:Keep-alive 则保持长连接状态,可以继续通过相同的连接发送请求

3. 关于URL

HTTP协议使用 URLUniform Resource Locator,统一资源定位符)来定位资源。

格式:http://host[":"port][abs_path]

示例:http://192.168.0.116:8080/index.html

  • http表示要通过HTTP协议来定位网络资源;
  • host表示合法的InternetWeb服务器或者IP地址;
  • port指定一个端口号,为空则使用缺省端口80
  • abs_path指定请求资源的URI

什么是URI

URLURIUniform Resource Identifier,统一资源标识符)的子集,URLURI 的基础上增加了定位能力。URN(Uniform Resource Name,统一资源名称)只是用来定义一个资源的名称不能够定位。

HTTP协议_第1张图片

4. HTTP报文 

请求报文结构

第一行是请求行,包含:请求方式URL协议版本

响应报文结构

第一行是状态行,包含:协议版本状态码以及描述

最常见的状态码及描述是: 200OK ,表示请求成功。

  • 接下来的多行都是http消息头,其中包含若干个http首部字段。
  • 一个空行用来分隔
  • 最后是请求的消息体

HTTP协议_第2张图片

HTTP协议_第3张图片

5. HTTP 请求方式 

HTTP请求报文 第一行为请求行,其中包含了请求方式字段,常见的请求方式GETPOSTHEADPUTDELETEOPTIONS

  • GET : 获取资源
  • POST :提交数据增加资源
  • HEAD :获取响应报头
  • PUT :修改资源
  • DELETE :删除资源
  • OPTIONS :查询支持的方法

常见问题:GET 和 POST 的区别:

  • GET用于获取数据,POST用于提交数据;
  • GETPOST的请求报文格式不同
    • POST方法请求报文第一行是这样的 POST /URL HTTP/1.1 \r\n
    • GET方法请求报文第一行是这样的 GET /URL HTTP/1.1 \r\n
  • GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Boby提交数据;
  • GET是幂等且可缓存,POST非幂等且不可缓存;

6. 常见HTTP首部字段

Host字段:浏览器发送http请求时,用来指定服务器的域名。

Content-Length字段:服务器在响应数据时,表明本次响应数据的长度。

Content-Type 字段:服务器响应时,告诉浏览器,本次响应数据的内容类型。

Accept 字段:用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。

7. HTTP 状态码

HTTP协议_第4张图片

1XX 信息

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。

2XX 成功

  • 200 OK」最常见的成功状态码,表示一切正常。
  • 204 No Content」常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body 数据。

 3XX 重定向

  • 301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

4XX 客户端错误

  • 400 Bad Request」表示客户端请求的报文有错误。
  • 404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
  • 405 Not Allowed」表示服务器不支持客户端采用的请求方式。

5XX 服务器错误

  • 500 Internal Server Error」服务器发生了内部错误。
  • 502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
  • 503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器。

8. 连接方式

    HTTP 1.0 默认使用短连接,每次使用HTTP协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。

为了解决这个问题,HTTP/1.1 改用长连接的通信方式,也叫持久性连接。只需要建立一次 TCP 连接就能进行多次 HTTP通信,这种方减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

HTTP协议_第5张图片

9.HTTP协议存在的问题

HTTP由于使用明文传输,所以存在以下安全问题:

  • 使用明文进行通信,内容可能会被窃听,比如被抓包;
  • 不验证通信方的身份,通信方的身份有可能遭遇伪装,比如钓鱼网站;
  • 无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。

 为了解决这些问题出现了HTTPS协议:
        HTTPS 的全称是超文本传输安全协议Hypertext Transfer Protocol Secure ,是以安全为目标的 HTTP 通信协议。HTTPS不是一个新的协议,通过使用 SSL使用非对称加密算法(RSA)完成一个随机秘钥的交换,在随后的数据传输当中,使用该随机秘钥进行数据内容的对称式加密(AES)。具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)等功能特点。

你可能感兴趣的:(http,网络,网络协议)