HTTP协议简篇

目录

HTTP

URL

 HTTP请求状态行

 HTTP请求头

HTTP请求正文

HTTP响应

 HTTP响应报文

HTTP和HTTPS 

HTTP1.0 和 HTTP1.1 以及 HTTP2.0的特性及区别


HTTP

HTTP是什么

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

HTTP是基于TCP/IP通信协议来传递数据

HTTP 协议⼯作于客户端 - 服务端架构为上。浏览器作为 HTTP 客户端通过 URL
HTTP 服务端即 WEB 服务器发送所有请求。 Web 服务器根据接收到的请求后,向客
户端发送响应信息。
HTTP五大特点:
  1. 支持客户/服务器模式
  2. 简单快速:请求常用方法GET,POST,HEAD。程序规模小,通信速度快
  3. 灵活:允许任何类型数据传输。正在传输的类型由Content-Type加以标记
  4. 无连接:限制每次只处理一个请求,服务器处理完客户的请求,收到客户应答后,断开连接。后来可以通过Connection:Keep-Alive实现长连接
  5. 无状态:对于处理事务没有记忆能力,这样可能导致每次重新连接数据量增大

URL

HTTP 使⽤统⼀资源标识符( Uniform Resource Identifiers, URI )来传输数据和建⽴连接,
URL(UniformResourceLocator)统一资源定位符
格式如下:
https://www.xxx.com:8080/news/1.html?a=1&b=2#name
包含以下部分:
  • 协议部分:https:,后面采用//分隔符
  • 域名部分:www.xxx.com,也可以是ip地址
  • 端口部分:不是必须部分,:8080
  • 虚拟目录部分:如上面的 /news/
  • 锚部分:从“#”开始到最后,都是锚部分。
  • 参数部分 :从 开始到 “#” 为⽌之间的部分为参数部分,⼜称搜索部分、查询部分。参数之间用&分隔符

 URL和URI区别

  • URI,是uniform resource identifier,统⼀资源标识符,⽤来唯⼀的标识 ⼀个资源。
  • URLuniform resource locator,统⼀资源定位器,它是⼀种具体的URI, 即URL可以⽤来标识⼀个资源,⽽且还指明了如何locate这个资源。
  • URNuniform resource name,统⼀资源命名,是通过名字来标识资源,⽐ 如 mailto:java-net@java.mjj.com

 HTTP请求状态行

GET /example.html HTTP/1.1 (CRLF)

 请求行由请求Method,URL字段,和HTTP Version三部分组成总的来说请求行就是定义了本次请求的请求方式,请求的地址,以及所遵循的HTTP协议版本。

HTTP 协议的⽅法有:
  • GET : 请求获取Request-URI所标识的资源
  • POST : 在Request-URI所标识的资源后增加新的数据
  • HEAD : 请求获取由Request-URI所标识的资源的响应消息报头
  • PUT : 请求服务器存储或修改⼀个资源,并⽤Request-URI作为其标识
  • DELETE : 请求服务器删除Request-URI所标识的资源
  • TRACE : 请求服务器回送收到的请求信息,主要⽤于测试或诊断
  • CONNECT : 保留将来使⽤
  • OPTIONS : 请求查询服务器的性能,或者查询与资源相关的选项和需求

 HTTP请求头

消息报头由⼀系列的键值对组成,允许客户端向服务器端发送⼀些附加信息或者
客户端⾃身的信息,详情自行搜索。

HTTP请求正文

只有在发送 POST 请求时才会有请求正⽂, GET ⽅法并没有请求正⽂。

HTTP响应

HTTP 响应也由三部分组成,包括状态⾏,消息报头,响应正⽂。
HTTP/1.1 200 OK (CRLF)

HTTP响应状态码

  • 1xx 指示信息 - 表示请求已接收,继续处理
  • 2xx 成功 - 表示请求已被成功接收、理解、接受
  • 3xx 重定向 - 要完成请求必须进⾏更进⼀步的操作
  • 4xx 客户端错误 - 请求有语法错误或请求⽆法实现
  • 5xx 服务器端错误 - 服务器未能实现合法的请求

常⻅状态代码、状态描述、说明:

  • 200 OK - 客户端请求成功
  • 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized - 请求未经授权,这个状态代码必须和 WWW-Authenticate 头域⼀起使⽤
  • 403 Forbidden - 服务器收到请求,但是拒绝提供服务
  • 404 Not Found - 请求资源不存在,eg:输⼊了错误的URL
  • 500 Internal Server Error - 服务器发⽣不可预期的错误
  • 503 Server Unavailable - 服务器当前不能处理客户端的请求,⼀段时间后,能恢复正常

 HTTP响应报文

 

HTTP和HTTPS 

HTTP的不足

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

HTTPS 采⽤ 共享密钥加密 (对称)和 公开密钥加密 (⾮对称)两者并⽤的 混合 加密机制。若密钥能够实现安全交换, 那么有可能会考虑仅使⽤公开密钥加密来通信。但是公开密钥加密与共享密钥加密相⽐, 其处理速度要慢。
所以应充分利⽤两者各⾃的优势 , 将多种⽅法组合起来⽤于通信。 在 交换 密钥 阶段使⽤ 公开密钥加密 ⽅式 , 之后的建⽴通信 交换报⽂ 阶段 则使⽤ 共享 密钥加密 ⽅式。
下图为 混合加密机制:

 HTTP握手过程的简单描述如下图

 

 HTTPS的不足:

加密解密过程复杂,导致访问过程速度慢

加密需要向认证机构付费

整个页面的请求都要使用HTTPS

HTTP1.0 和 HTTP1.1 以及 HTTP2.0的特性及区别

http1.0特性:

  1. 无状态:服务器不跟踪不记录请求过的状态
  2. 无连接:浏览器每次请求都需要再次建立TCP连接

对于无状态的特性可以借助cookie/session来做身份认证和状态记录

对于无连接导致的性能有两种

  • 无法复用连接:每次发送请求,都需要进行依次TCP连接(三挥四握),使得网络的利用率非常低
  • 对头阻塞:http1.0规定前一个请求响应到达,下一个请求才能发送。如果前一个阻塞,后面的请求也会阻塞。

http1.1特性:

为了解决http1.0的性能缺陷,http1.1出现了解决方案:

  • 长连接:新增Connection字段,可以设置keep-alive保持连接不断开
  • 管道化:可以发送多个请求,但是响应还是依次处理。响应的顺序还是按照请求的顺序返回。
  • 缓存处理:新增字段cache-control
  • 断点传输

http1.1默认长连接,数据传输完成保持tcp连接不断开

  • 管道化虽然可以一次性发送多个请求,但是依旧按顺序返回,无法解决对头阻塞 
  • 缓存处理在浏览器请求资源时,先看是否有缓存的资源,如果有缓存,直接取,不会再发请求,如果没有缓存,则发送请求
  • 断点传输则是在上传/下载资源时,如果资源过⼤,将其分割为多个部分,分别上传/下载,如 果遇到⽹络故障,可以从已经上传/下载好的地⽅继续请求,不⽤从头开始,提⾼效率。Header ⾥两个参数实现的,客户端发请求时对应的是 Range 服务器端响应时对应的Content-Range
http2.0特性
  1. 二进制分帧
  2. 多路复用:在共享TCP连接的基础上同时发送请求和响应
  3. 头部压缩
  4. 服务器推送:服务器可以额外向客户端推送资源,而无需客户端明确的需求
  • 二进制分帧将所有的传输信息分割成更小的消息和帧,对他们采用二进制格式的编码
  • 多路复用基于二进制分帧,在同一域名下多有访问都是同一个tcp连接中走,http消息被分解成独立的帧,乱序发送,服务端根据标识符和首部将消息重新组装

 

区别:
  1. http1.0 http1.1的主要区别,就是从⽆连接到⻓连接
  2. http2.0对⽐1.X版本主要区别就是多路复⽤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值