HTTP/HTTPS协议

HTTP协议

超文本传输协议,规定一次请求一次响应后断开连接,体现了协议的无状态,短链接特性

常见的请求头:

user-agent:获取访问网站的浏览器

content:获取请求的数据格式

超文本传输协议:(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP 请求/响应的步骤

  1. 客户端连接到Web服务器

    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接

  2. 发送HTTP请求

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

  3. 服务器接受请求并返回HTTP响应

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

  4. 释放连接TCP连接

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

  5. 客户端浏览器解析HTML内容

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

HTTP请求方法

  1. GET

    向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,

  2. HEAD

    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

  3. POST

    向指定资源提交数据,请求服务器进行处理。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

  4. PUT

    向指定资源位置上传其最新内容。

  5. DELETE

    请求服务器删除Request-URI所标识的资源。

  6. TRACE

    回显服务器收到的请求,主要用于测试或诊断。

  7. OPTIONS

    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

  8. CONNECT

    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

  9. 注意点

    1. 方法名称是区分大小写的
    2. 当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed)
    3. 当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)
    4. HTTP服务器至少应该实现GET和HEAD方法

GET和POST

  1. GET提交的数据会放在url后,以?分割,多个参数以&相连,提交的数据有大小限制
  2. POST提交的数据会放在HTTP包的请求体中,提交的数据没有限制

状态码

  • 1xx:信息状态码,接受的请求正在处理
  • 2xx:成功状态码,请求正常处理完毕
  • 3xx:重定向状态码,需要后续操作完成该请求
  • 4xx:客户端错误状态码,请求含有词法错误或者无法被执行
  • 5xx:服务器错误状态码,服务器在处理某个正确请求时发生错误

URL

基本元素

  1. 传输协议
  2. 层级URL标记符(//,固定不变)
  3. 服务器(域名或ip地址)
  4. 端口号(HTTP的默认值80可以省略)
  5. 路径(以/区分路径中的目录名称)
  6. 查询(GET模式的窗体参数,以?为起点,以&隔开参数,以=分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
  7. 片段(以#为起点)

HTTP请求格式

在这里插入图片描述

HTTP响应格式

在这里插入图片描述

缓存机制

缓存的目 的是减少相应延迟 和 减少网络带宽消耗, 比如 css、 js、图片这类静态资源应该进行缓存。
实际项目 一般使用反向代理服务器(如 nginx、 apache 等) 进行缓存。缓存的相关规则会放在header中。

类型

http缓存类型有两种,分别是强缓存和协商缓存,两种缓存分别通过Http报文头部不同的字段进行控制。

强缓存

在http缓存中总共有三个参与角色:浏览器、缓存数据库、服务器,强缓存就是当向服务器请求数据时,如果缓存数据库有这个数据且未过期,就直接使用这个缓存中的数据,不再向服务器发送请求。
在这里插入图片描述
当缓存数据库中没有这个数据的缓存或者缓存已过期时,则向服务器发送请求获得数据和缓存规则

在这里插入图片描述
强缓存的过期时间由以下两个规则字段控制

Expire:

这个字段指定一个时间,超出这个时间则该缓存会被认定是超时的,但是它本身是一个HTTP1.0标准下的字段,所以如果请求中还有一个置了 max-age 或者 s-max-age”指令的Cache-Control响应头,那么 Expires 就会被忽略。

Cache-Control:

通用消息头用于在http 请求和响应中通过指定指令来实现缓存机制。其常用的几个取值有:

  • rivate:客户端可以缓存
  • public:客户端和代理服务器都可以缓存
  • max-age:缓存有效时间,缓存的内容将在x秒后失效
  • s-max-age:同max-age,仅适用于共享缓存,并且私有缓存中忽略。
  • no-cache:需要使用协商缓存来验证缓存数据
  • no-store:所有内容都不会缓存,强缓存和协商缓存都不会触发
  • must-revalidate:缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。

协商缓存

如果强缓存已过期,或含有must-revalidate标识,就会使用协商缓存的方式去处理缓存文件。

协商缓存会从缓存数据库中取出缓存标识,然后向浏览器发送请求验证缓存数据是否已更新,如果未更新依然使用缓存数据库中的数据,如果已更新则返回更新后的数据
在这里插入图片描述
在这里插入图片描述
当服务器接收到一个资源请求服务器返回资源的同时,还会发送一个last-modified的http响应头, last-modified响应头的内容值是该资源在服务器上最后修改的时间,另一个etag则为所请求的数据在服务器中的唯一标识。

在这里插入图片描述
当第二发送资源请求(缓存已过期), 浏览器在缓存数据库找到了这个资源,但是不能确定服务器是否变更过资源,此时浏览器发送请求的时候,请求头内会附带if-none-match的请求头,这个头部的内容对应上一次etag返回的值,除了这个请求头外还会附带一个if-modified-since的请求头, 这个头部的内容就是上一次last-modified返回的值, 服务器获得这个两个值后会以优先级if-none-match > if-modifind-since的顺序进行判断:

  • 如果的etag和if-none-match相等,即所请求的资源没有变化,此时浏览器即可以使用缓存数据库中的数据,此时http的请求状态码为304,请求的资源未变化。

  • 如果请求字段中没有if-none-match,就使用if-modified-since来判断。如果if-modified-since的值和所请求的资源时间一致,即所请求的资源相同,浏览器即可以使用缓存数据库中的数据。http状态码304。

  • 如果验证文件已修改,则返回修改后的数据,http状态码200。

HTTPS协议

HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击。

由于 HTTP 协议通信的不安全性,所以人们为了防止信息在传输过程中遭到泄漏或者篡改,就想出来对传输通道进行加密的方式 https。https 是一种加密的超文本传输协议,它与 HTTP 在协议差异在于对数据传输的过程中,https 对数据做了完全加密。

原理

在这里插入图片描述
1.服务器将自己的公钥签名算法、域名等信息发送给CA机构生成SSL证书这个证书包含:证书的发布机构CA、证书的有效期、公钥、证书所有者、签名等信息。

2.客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验:

  • 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
  • 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
  • 验证通过浏览器会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
  • 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做验证
  • 验证通过,则证明服务器发来的证书合法
  • 浏览器读取证书中的公钥,用于后续加密了

通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,HTTPS加密过程也就此形成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值