​HTTP协议

HTTP#

HTTP 协议大全

应用层超文本传输协议

  • 客户端发送请求给服务端
  • 服务端返回响应给客户端

Http协议是无状态的,因此需要Cookie和Session来实现状态保持、状态记录

  • Cookie:客户端记录
  • Session:服务端记录

资源#

html超文本文档、图片、视频音频流媒体

使用统一资源定位符URL定位资源

http://www.bilibili.com/comments?id=1

URL的组成#

http://www.bilibili.com:80/comments?id=1

  • 协议protocol:http 或 https
  • 主机host:www.bilibili.com
  • 路径path:comments
  • 端口port:80
  • 查询参数query:id=1

客户端#

向服务端发起HTTP请求

GET     /comments?id=1      HTTP/1.1
----------------------------------
Accept: text/html, application.xhtml+xml, application/xml...

Accept-Encoding: gzip, deflate
-----------------------------------
request body 请求体(如果有)
  • 请求方式 (RESTFul风格)
    • GET
    • POST
    • PUT
    • DELETE
  • 路径与查询参数
  • HTTP版本
  • 请求头:一些额外的设置,指定想要获得的响应类型
    • 设置接收响应资源的类型等
  • 请求体:请求时携带的一些参数

服务端#

对客户端发起的HTTP请求返回HTTP响应

 

HTTP/1.1        200OK
------------------------------------
Date: Sat, 02 May 2020 08:21:09 GMT
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=14400
------------------------------------
[{"id":"1", "name":"name1"}, {"id":"2", "name":"name2"}]

 

  • HTTP版本
  • 响应状态码
    • 100~199:一般信息 100 Continue
    • 200~299: 成功响应 200 OK
    • 300~399:重定向 301 Moved Permanently
    • 400~499:客户端错误 404 Not Found
    • 500~599:服务端错误 500 Internal Server Error
  • 响应头:额外的响应信息
    • 响应时间
    • 响应内容的编码
    • 如何控制缓存
    • 如何处理cookie等
  • 响应体
    • JSON数据

HTTPS#

 

 

 

 

HTTPS 是绝对安全的吗#

  • 不是
  • 网络上有使用自签名证书的网站,自签名证书容易被伪造
  • CA 机构不可能完完全全保护好自己的相关资料

HTTP 1.0 、1.1、2#

首先,我们来了解一下什么是HTTP协议?

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义web浏览器与web服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的格式,HTTP协议用于定义客户端与web服务器之间通讯的格式。 HTTP/0.9:

HTTP/0.9#

  • 是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送 GET 这一种请求,且不支持请求头。由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即 纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。
  • HTTP/0.9具有典型的 无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP/0.9的传输首先要建立一个由客户端到web服务器的TCP连接,由客户端发起一个请求,然后由web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何状态码。

HTTP/1.0#

HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛使用。相对于HTTP/0.9增加了下面几个特性:

  • 请求与响应支持 头部
  • 响应对象以一个 响应状态码 开始。
  • 响应对象不只限于超文本。
  • 开始支持客户端通过 POST 方法向web服务器提交数据,支持 GETHEADPOST 方法。
  • 支持长连接(但默认还是使用短连接)、缓存机制以及身份认证。

HTTP/1.1#

HTTP协议的第三个版本是HTTP/1.1,是目前使用最广泛的协议版本。HTTP/1.1是目前主流的HTTP协议版本,相对于HTTP/1.0新增了如下内容:

  • 默认为长连接
    • HTTP/1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP/1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP/1.0每次请求都要创建连接的缺点。
  • 提供了范围请求功能(宽带优化)
    • 在HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP/1.1则在请求头引入了range头域,它允许值请求资源的某个部分,即返回码是2.6(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。这是支持文件断点续传的基础。
  • 提供了虚拟主机的功能(HOST域)
    • 在HTTP/1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,每一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP/1.1请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  • 缓存处理字段
    • HTTP/1.1在1.0的基础上加入了一些cache的新特性,引入了实体标签,一般被称为e-tags,新增更为强大的Cache-Control头。
  • 错误通知的管理
    • 在HTTP/1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP/2.0#

HTTP协议的第四个版本,相对于HTTP/1.1新增了以下内容:

二进制分帧,HTTP/2.0的所有  都采用 二进制编码

  • :客户端与服务器通过交换帧来通信,帧是基于这个新协议通信的最小单位。
  • 消息:指逻辑上的HTTP消息,比如请求、响应等,由一或多个帧组成。
  • 流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1,2…N)。

多路复用 多路复用允许同时通过单一的HTTP/2.0连接发起多重的请求-响应消息。有了新的分帧机制后,HTTP/2.0不再依赖多个TCP连接去处理更多并发的请求。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端根据每个帧首部的流标识符把它们重新组合起来。HTTP/2.0连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。

头部压缩 HTTP/1.1的首部带有大量信息,而且每次都要重复发送。HTTP/2.0要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。

请求优先级 浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个连接。

服务端推送 服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值