http协议补充

7.7实现http请求

class httprequest
{
public:void Deserialize(std::string content){while (true){auto pos = content.find(sep);if (pos == std::string::npos){break;}std::string temp = content.substr(0, pos);if (temp.empty()){break;}req_header_.push_back(temp);content.erase(0, pos + sep.size());}auto pos = content.find(sep);text_ = content.substr(pos + sep.size());}void parse(){std::stringstream sstr(req_header_[0]);sstr >> method_ >> url_ >> httpversion_; // 默认以空格分割path_ = wwwroot;if (url_ == "/" || url_ == "/index.html"){path_ += "/";path_ += homepage;}else{path_ += url_;}}void debugprint(){std::cout << "---------------------" << std::endl;for (auto &e : req_header_){std::cout << e << std::endl;}std::cout << text_ << std::endl;std::cout << "method: " << method_ << std::endl;std::cout << "url: " << url_ << std::endl;std::cout << "http_version: " << httpversion_ << std::endl;std::cout << "path: " << path_ << std::endl;std::cout << "---------------------" << std::endl;}public:std::vector<std::string> req_header_;std::string text_;std::string method_;std::string url_;std::string httpversion_;std::string path_;
};

7.8http细节

http的方法

GET 获取资源
//提交的参数使用拼接到url结尾的方式提交;参数数量受限且不安全;
POST 传输实体主体
//提交的参数是放在了请求正文部分;
CONNECT 用隧道协议建立代理

​ 数据都是通过表单提交的;

http状态码

在这里插入图片描述

​ 常见的如200 OK,404 Not Found;

​ 对于浏览器标准是有点的,但是支持的并不是很好;

​ 对于重定向包括临时重定向和永久重定向,浏览器发送请求,服务器不是直接提供服务,而是返回一个响应;响应报头是3XX,location里是一个新的地址;浏览器收到后会重新向新地址发起一个请求;

​ 临时重定向就是还是每次都要先访问服务器,然后服务器重定向,使用场景如:登录界面成功后跳转;

response_line = "HTTP/1.0 302 Found\r\n";
std::string response_header = "Content-Length: ";
response_header += std::to_string(text.size());
response_header += "\r\n";
response_header += "Location: https://www.qq.com\r\n";
response_header += "\r\n";

http常见的报头

Content-Type: 数据类型(text/html等),方便显示图片等资源;
Connection:表示是否在通信时选用长连接
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

​ 一个页面是包含非常多的元素的,每个元素就是一个资源;

​ 对于一个请求响应一个资源,然后关闭连接是短连接,http/1.0支持的就是短连接;而只建立一个连接,发送多个请求和响应是长连接,http/1.1支持的就是长连接;

​ http协议默认是无状态的;http有对登录用户的会话保持功能;

​ 响应报头中有Set - Cookie字段,设置了属性值,发送给浏览器保存起来,这种保存了属性值的文件叫做cookie文件;浏览器每一次向该服务发起请求时,都会携带cookie文件中的内容;保存cookie文件一般有有文件级的方式iye有内存级的方式;对于内存级设计,浏览器启动后就变成了一个进程,在进程当中是可以new空间的,可以将cookie的内容保存在进程的内存当中,不往磁盘上写;如果是文件级设计会直接将cookie信息保存到文件当中;这个文件被保存的浏览器特定的安装路径下; cookie文件会自动删除;

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

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

相关文章

轮播卡片切换实现

背景 如上图&#xff0c;实现一个轮播卡片能力&#xff0c;支持手动滑动&#xff0c;手动拖动&#xff0c;已经点击两端切换按钮。 实现 <template><div class"top-menu"><!-- Swiper --><div v-if"headerMenuList.length > 9" c…

并查集----格子游戏

并查集中最重要的是要搞懂&#xff1a; 不明白的可以拿纸自己先演示一番&#xff0c;find函数不仅能找到他们的祖先数&#xff0c;而且同时也能更新路径的子结点都等于祖先&#xff0c;然后以后寻找时会更加的方便&#xff01;

蓝桥杯单片机速成4-温度传感器DS18B20

目录 一、电路图 二、底层驱动代码 三、温度读取实现 四、实际使用 一、电路图 二、底层驱动代码 时序是单总线 我们需要修改的地方是单总线内部延时函数&#xff0c;改成 void Delay_OneWire(unsigned int t) { t*12; while(t--); } #ifndef __ONEWIRE_H #defi…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

动态规划刷题(算法竞赛、蓝桥杯)--合唱队形(线性DP)

1、题目链接&#xff1a;[NOIP2004 提高组] 合唱队形 - 洛谷 #include <bits/stdc.h> using namespace std; int n,ans; int a[105],f[105][2];//f[i][2]中2表示正反两个方向int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}//正方向求最长上升子序列 a[…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

HTTP,Servlet

HTTP 概念&#xff1a;HyperTextTransferProtocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 HTTP协议特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型的&#xff1a;一次请求对应一次响应 …

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…

基于Java的车辆出入校预约管理系统设计与实现(论文+源码)_kaic

摘 要 二十一世纪以来我国科技水平得到很大提升&#xff0c;人们对于生活的美好向往更加强烈&#xff0c;而目前的车辆出入校预约管理由于存在管理不规范等缺点&#xff0c;严重影响了校园的安全&#xff0c;因此&#xff0c;需要设计一个车辆出入校预约管理系统对人们出入校园…

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等

帝国CMS十合一源码/字典/成语/古诗词/二十四节气/英语单词/百家姓/范文文库/词语等 功能包含: 成语大全 二十四节气 英语单词 古诗词 近反义词 词语造句 汉语字典 英文缩写 百家姓 范文文库 文件目录:1个数据库 1个系统源码 1个伪静态规则 安装方式:把1.2G的…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

T1 神奇苹果桶 (25分) - 小米前端笔试编程题解

考试平台&#xff1a; 赛码 题目类型&#xff1a; 20道选择 2道编程题 考试时间&#xff1a; 2024-03-23 &#xff08;两小时&#xff09; 题目描述 小希在森林冒险的时候发现一个神奇的木桶&#xff0c;某些时会凭空出现一些苹果&#xff0c;小希很解地大家分享了这一个神奇…

CCIE-01-VLAN-Trunk

目录 实验条件网络拓朴逻辑拓扑物理拓扑实验目的 开始配置配置SW1配置SW2检验证配置结果 实验条件 网络拓朴 逻辑拓扑 物理拓扑 实验目的 SW1和SW2之间的E2/0-3配置为trunk&#xff0c;使用802.1q协议&#xff0c;不需要配置捆绑根据逻辑图和物理图标识&#xff0c;使得R1~R7…

蓝桥杯(更新中)

递归与递推 递归 1.指数型枚举 解析&#xff1a;从 1 ∼ n 这 n 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 思路&#xff1a;枚举每一位对应的数字选与不选&#xff0c;例如&#xff1a;第一位对应的数字为1&#xff0c;有一种方案是选1&#xff0c;另…

Gitea的简单介绍

1、Gitea&#xff08;Gitea - 轻量级全功能 DevSecOps 平台&#xff09; Gitea 是一个基于 Go 语言编写的轻量级、开源、自托管的 Git 服务软件&#xff0c;它的设计目标是易于安装、快速运行并且提供出色的用户体验。Gitea 提供了一个类似于 GitHub 或 GitLab 的 web 界面&…

ZKFair 步入Dargon Slayer 新阶段,未来还有哪些财富效应?

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

Python 全栈体系【四阶】(十八)

第五章 深度学习 一、基本理论 4. 神经网络的改进 4.1 神经网络的局限 全连接神经网络的局限&#xff08;一&#xff09; 未考虑数据的“形状”&#xff0c;会破坏数据空间结构。例如&#xff0c;输入数据是图像时&#xff0c;图像通常是高长通道方向上的 3 维形状。但是&a…

皓学IT:WEB07_ JSP

一、Jsp基础语法 1.1. JSP模板元素 JSP页面中的HTML内容称之为JSP模版元素。 JSP模版元素定义了网页的基本骨架&#xff0c;即定义了页面的结构和外观。 1.2. JSP脚本片段 JSP脚本片断用于在JSP页面中编写多行Java代码&#xff08;在<%%>不能定义方法&#xff09;。…

VisionOS应用开发需要哪些工具

标题: VisionOS应用开发需要哪些工具 标签: [VisionOS, 空间计算] 分类: [VisionOS, 开发工具] 说下开发visionOS空间应用需要哪些准备&#xff0c;这里我找了下&#xff0c;列出来给大家。 xcode 15.22d: SwiftUI3d: RealityKit/Unity 3D实体空间: ARKitIntel Mac上可以运行X…