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

相关推荐
樱木Plus3 小时前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
blasit2 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
YuMiao2 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
肆忆_3 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星3 天前
虚函数表:C++ 多态背后的那个男人
c++
不可能的是3 天前
前端 SSE 流式请求三种实现方案全解析
前端·http
Jony_5 天前
高可用移动网络连接
网络协议
端平入洛5 天前
delete又未完全delete
c++
chilix5 天前
Linux 跨网段路由转发配置
网络协议
端平入洛6 天前
auto有时不auto
c++