http“超级应用与理解”

本篇文章来介绍一下http协议和其应用

1.http协议是在OSI模型的哪一层

HTTP(超文本传输协议)是应用层协议,它是在 OSI 模型的最高层,即第七层------应用层。HTTP 通过互联网来传输数据和信息,主要用于 Web 浏览器和 Web 服务器之间的通信,以及客户端与服务器之间的文件传输、查询和请求响应等操作

2.http协议真正的请求流程

  • 客户端向服务器发起请求,请求中包含使用的TLS版本号、生成的一个随机数、以及客户端支持的加密方法。

  • 服务器端接收到请求后,确认双方使用的加密方法和TLS版本号、并给出服务器的证书、以及一个服务器生成的随机数。

  • 客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中解密拿到的服务器公钥,加密这个随机数,然后发给服务器。

  • 服务器使用自己的私钥,来解密客户端发送过来的随机数。这样服务器就拿到了第三个随机数。而且只有客户端和服务器端知道这第三个随机数,因为第三个随机数是通过加密传输的。

  • 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成会话秘钥,以后的对话过程都使用这个秘钥(即会话秘钥)来加密信息。

  • 以后客户端和服务器端都使用这个会话秘钥来加密。

http1和http2的区别(http1版本和http2版本):

1.新的二进制格式:HTTP2采用二进制格式而HTTP1使用文本格式。

2.多路复用:HTTP2是完全多复用的,而非有序并阻塞的,只需一个连接即可实现并行。HTTP1一个连接只能发送一个请求。

3.首部压缩:HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

4.服务器推送:HTTP2在客户端请求资源的时候,会把相关的资源一起发送给客户端,而不需要客户端再次发起请求获取资源。

http2.0介绍

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。

http代码实例:

cpp 复制代码
#include <iostream>  
#include <httplib.h>  
  
int main() {  
    // 创建一个httplib的客户端  
    httplib::Client cli("example.com");  
  
    // 准备请求的路径  
    const char* path = "/api/data";  
  
    // 发送GET请求  
    auto res = cli.Get(path);  
  
    // 检查响应状态码  
    if (res->status == 200) {  
        // 请求成功,打印响应内容  
        std::cout << "Response content:" << std::endl;  
        std::cout << res->body << std::endl;  
    } else {  
        // 请求失败,打印错误信息  
        std::cerr << "Error: " << res->status << " " << httplib::status_message(res->status) << std::endl;  
        if (!res->error.empty()) {  
            std::cerr << "Error message: " << res->error << std::endl;  
        }  
    }  
  
    return 0;  
}

总结: http 是互联网上常用的协议 随着版本的变化而变化 http1是文本格式 http2是二级制格式

连接可以实现并行 这是跟http1最大的区别

linux环境编译代码(bash)命令:

g++ -std=c++11 your_file.cpp -o your_program -lhttplib

your_program是工程名称

好了 本篇文章就介绍到这里 在这里 小编想给大家推荐一个性价比高的课程:

https://xxetb.xetslk.com/s/2PjJ3T

相关推荐
沐泽Mu1 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习
szuzhan.gy2 小时前
DS查找—二叉树平衡因子
数据结构·c++·算法
火云洞红孩儿2 小时前
基于AI IDE 打造快速化的游戏LUA脚本的生成系统
c++·人工智能·inscode·游戏引擎·lua·游戏开发·脚本系统
FeboReigns4 小时前
C++简明教程(4)(Hello World)
c语言·c++
FeboReigns4 小时前
C++简明教程(10)(初识类)
c语言·开发语言·c++
zh路西法4 小时前
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(二):从FSM开始的2D游戏角色操控底层源码编写
c++·游戏·unity·设计模式·状态模式
.Vcoistnt4 小时前
Codeforces Round 994 (Div. 2)(A-D)
数据结构·c++·算法·贪心算法·动态规划
小k_不小4 小时前
C++面试八股文:指针与引用的区别
c++·面试
沐泽Mu5 小时前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
ALISHENGYA5 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练三)
数据结构·c++·算法·图论