应用层——HTTP协议(自己实现一个http协议)——客户端(浏览器)的请求做反序列化和请求分析,然后创建http向响应结构

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层

我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层

之前的网络计算机是我们自定义的协议:传输的数据最终是什么样的结构!是如何进行序列化反序列化的,
而对于我们的应用层我们已经有了非常完善的协议:

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用.
HTTP(超文本传输协议) 就是其中之一.

当我们在浏览器(相当于客户端)使用URL(网址)去访问我们的服务器的时候就可以以http协议的方式对服务器发送请求,服务器也可以以这样的格式给我们发送响应:

URL:在浏览器用它就快速的向服务器发送一个请求(相当于一个客户端)
在这里插入图片描述
http请求:
在这里插入图片描述
http相应
在服务器收到http请求后:反序列化,然后再对请求做处理,得出结果,然后把结果也按照http协议的结构储存,序列化,发送回给客户端(给客户端响应):
在这里插入图片描述

自写一个能够收发http请求的服务器(进程),并且自定义一个自己的http协议(结构体字段):

服务器的代码编写:
1.创建监听套接字,绑定相应的网络信息(ip和port)。

在这里插入图片描述
启动服务器:监听套接字监听请求,监听到请求后,创建了新的套接字来供于这次请求的对家,并创建新线程来完成对请求的处理:
在这里插入图片描述
ThreadRun:对线程的处理:接收字符串型的请求,并对他做反序列化(用我们自定义的http协议来反序列化):

在这里插入图片描述
htttp请求不仅可以向服务器请求html的文本,还可以向服务器请求图片,视频等资源,所以他叫超文本协议,
所以http响应的kv字段中还有一个TYpe所传文本类型的字段

在这里插入图片描述

请求方法:
http常用的两种方法:GET /POST
主要作用:客户端(浏览器)不仅可以向我们的服务器获取资源,而且还可以传参
这两种方式的区别就是传参的方式不同。
这两中方式的传参是通过html文档中的form表单来完成的,当我能请求的html文档中有form表单是,我们的客户端就可以传参
GET:
所传参数会被拼接到URL中,向服务器发送请求传参
在这里插入图片描述
在这里插入图片描述

POST:
所传参数会被保存到请求的有效载荷中,只有参数所要传到的那个路径会被拼接到URL中:
在这里插入图片描述
在这里插入图片描述

get vs post
在这里插入图片描述
两种方法其实都不安全,即使post的参数会被放到请求的文本中保存,但是通过抓包仍然可以完全的看到。
在这里插入图片描述

HTTP响应结构

通过对http请求的分析,创建出http响应结构,然后再序列化后发送回客户端。

在这里插入图片描述
1、构建响应结构

在这里插入图片描述
构建header内容
然后把请求的内容放到有效载荷中

响应的一些特性:

301:重定向

我们把状态码设置为301的话,然后在header字段中添加:
std::string location=“Location:http://www.qq.com\r\n”;
当我们服务器返回这样的响应的时候,就不会去访问有效载荷中的网页,而是马上去访问location中的链接网页
在这里插入图片描述
原理图:
在这里插入图片描述
http响应的一些状态码,及其含义:
在这里插入图片描述

http协议的特性:

cookie文件和session结构
1、无连接:是不要去链接的而是双方都定好此协议(我们所写的套接字的监听和链接是底层的,不是http协议)
2、无状态:每次请求都是独立???
但是为什么我们有的网站登录之后下一次就不在去请求登录了呢?
因为:如果我们获取到登录页面之后,然后把登录信息填好后再次请求发送给服务器之后,服务器的登录成功响应会header字段为我们添加Set-Coookie字段返回给客户端(浏览器),浏览器有一个cookie文件,可以保存响应回的这个字段,当浏览器再次去访问这个服务器的时候,http请求中的header字段就会携带cookie这样的请求字段,服务器就会根据这个字段自动认证
在这里插入图片描述
在这里插入图片描述
但是这样的直接保存到浏览器的cookie中的用户信息是私密铭感信息,所以我们的服务器要把登录页面发送来的用户信息做封装,最后生成一个独有的编号返回给登录成功的这个客户端使用,这样虽然避免了用户直接信息暴露到浏览器的cookie中,防止了别人直接登录,但是别人任然可以通过编号来直接请求访问服务器,因此服务器就需要做一些登录地理位置之类的验证,但是这样的问题还是不能得到完全的解决的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gnu/Linux 系统编程 - 如何获取帮助及一个演示

Gnu/Linux 系统编程 - 如何获取帮助及一个演示 今天开始写 Gnu/Linux 环境下的系统编程,主要的用的语言是 C,主要是为了学习 C 语言,边学边写,这样的学习速度是比较快的。 今天就先介绍下如何在手头上没有任何资料的情况下&…

windows11搭建 stable-diffusion-webui

2024年5月22日23:46:57 建议电脑配置 电脑配置: Intel Core™ Ultra 5 125H 1.20 GHz 32.0 GB (31.6 GB 可用) 系统:windows11 注意:最好挂上外网,或者设置好访问github的dns,不然很可能失败 1,安装 An…

高级文件操作

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python内置的os模块除了可以对目录进行操作,还可以对文件进行一些高级操作,具体函数如表4所示。 表4 os模块提供的与文件相…

vue3 项目目录使用文件夹和index.vue,与直接用直接用名字.vue的区别

在 Vue 3 项目中,使用文件夹加 index.vue 文件与直接使用组件名字命名的 .vue 文件都是常见的组织方式。两者各有优缺点,适用于不同的场景和需求。以下是对这两种方式的详细比较: 使用文件夹和 index.vue 文件 结构示例 src/ ├── compo…

【AI基础】第三步:纯天然保姆喂饭级-安装并运行chatglm2-6b

chatglm2构建时使用了RUST,所以在安装chatglm2之前,先安装RUST。 此系列文章列表: 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python-CSDN博客 【AI基础】第一步:安装python开发环境-conda篇_mini…

知识图谱的应用---智慧司法

文章目录 智慧司法典型应用 智慧司法 智慧司法是综合运用人工智能、大数据、互联网、物联网、云计算等信息技术手段,遵循司法公开、公平、公正的原则,与司法领域业务知识经验深度融合,使司法机关在审判、检查、侦查、监管职能各方面得到全面的…

Android14 WMS-Power键短按流程

目录 1. PhoneWindowManager#interceptKeyBeforeQueueing 2. PhoneWindowManager#handleKeyGesture 3. PhoneWindowManager#handleCameraGesture 4. SingleKeyGestureDetector#interceptKey 5. SingleKeyGestureDetector#interceptKeyUp 6. SingleKeyGestureDetector#Ke…

【数据结构】图论入门

引入 数据的逻辑结构: 集合:数据元素间除“同属于一个集合”外,无其他关系线性结构:一个对多个,例如:线性表、栈、队列树形结构:一个对多个,例如:树图形结构&#xff1…

「前端+鸿蒙」鸿蒙应用开发-搭建开发环境创建项目

快速体验鸿蒙应用开发,首先需要搭建开发环境和创建项目。 搭建开发环境 下载DevEco Studio: 访问华为开发者联盟官方网站下载DevEco Studio。DevEco Studio下载链接 安装DevEco Studio: 运行下载的安装程序,按照安装向导指引完成…

SpringBoot中的WebMvcConfigurationSupport和WebMvcConfigurer

在SpringBoot中可以通过以下两种方式来完成自定义WebMvc的配置: (1)继承WebMvcConfigurationSupport类 (2)实现WebMvcConfigurer接口 通过这两种方式完成的WebMvc配置存在差异,本文将对此作简单说明与区…

【Vue】单页应用程序介绍

通常基于Vue去开发一整个网站,开发出来的这整个网站应用,我们都会叫做单页应用程序 概念 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现 我们可以将页面共用的部分封装成组件,底下要切换的也…

【copy_dwg_files.bat】

参考这段代码,实现copy_dwg_files的功能 好的,以下是参考你提供的代码来实现 copy_dwg_files.bat 的功能。这段代码将在当前目录及其所有子目录中查找 施工图 文件夹,并将该文件夹下的所有 .dwg 文件复制到同一目录下的 Calculate 文件夹中。如果 Calculate 文件夹不存在,…

工具-金舟投屏软件: 手机如何投屏到电脑上 / Wi-Fi / USB

金舟安卓/iOS苹果投屏-正版软件下载中心 方法一、金舟投屏软件-wifi 1.1、准备工作 确保苹果手机和Windows电脑都连接到同一个Wi-Fi网络。 在Windows电脑上安装并打开金舟投屏软件。 1.2、操作步骤 在金舟投屏软件上选择“苹果手机投屏”功能。 在苹果手机上下滑屏幕&am…

New Work-flow of Circuit Bootstrapping

参考文献: [CGGI17] Chillotti I, Gama N, Georgieva M, et al. Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE. ASIACRYPT 2017 (1): 377-408.[CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion be…

dots_image 增强图像中的圆点特征

dots_image 增强图像中的圆点特征 1. dot_image 有什么用途?2. 点状字符的特征增强3. Halcon代码 1. dot_image 有什么用途? Enhance circular dots in an image. 这个算子可以增强图像中的圆点特征,例如下面的例子。 2. 点状字符的特征增强…

忆恒创源国产系列新品 —— PBlaze7 7A40 取得 PCI-SIG 兼容性认证

在此前报道中,我们曾预告了忆恒创源国产系列 PCIe 5.0 SSD 新品 —— PBlaze7 7A40,今天,这款 SSD 已经顺利通过 PCI-SIG 的严格测试并出现在 Integrators List 集成商列表当中,标志着距离 PBlaze7 7A40 的正式发布又近了一步。 正…

记录汇川:红绿灯与HMI-ST

项目要求: 子程序: 子程序: 实际动作如下: 红绿灯与HMI-ST

网工内推 | 华为生态合作伙伴企业,IP以上认证优先,最高20k+

01 金华威(华为生态合作伙伴) 🔷招聘岗位:网络工程师 🔷职责描述: 1、负责华为数通产品线用户需求规划、选型、设计、报价及方案制定工作; 2、负责华为数通产品线项目投标文件的编写及应答&a…

STM32项目分享:智能门禁锁系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

基于某评论的TF-IDF下的LDA主题模型分析

完整代码: import numpy as np import re import pandas as pd import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import LatentDirichletAllocationdf1 pd.read_csv(小红书评论.csv) # 读取同目录下csv文件…