【HTTP】HTTP协议
一个Web Server就是个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机),其主要功能是通过HTTP协议与客户端进行通信,来接收,存储,处理来自客户端的HTTP请求,并对其做出HTTP响应,返回给客户端其请求的内容或返回一个error信息。
通常用户使用Web浏览器与相应的服务器进行通信, 在浏览器中输入“域名”或“ip地址:端口号”,浏览器则先将你的域名解析成相应的ip地址或者直接根据你的ip地址向对应的Web服务器发送一个HTTP请求,这个过程首先要通过TCP协议的三次握手建立与目标Web服务器的连接,然后HTTP协议生成针对目标Web服务器的HTTP请求报文,通过TCP,IP等协议发送到目标服务器上。
HTTP协议(应用层协议)
简介
超文本传输协议,是一个简单的请求,响应协议,它通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应,请求和响应消息的头以ASCII形式给出,而消息内容则具有一个类似MMF的格式,HTTP是万维网的数据通信的基础。
工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端,HTTP协议采用了请求/响应模型,客户端向服务器发送一个请求报文,请求报文包含请求的方法,URL,协议版本,请求头部和请求数据,服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或错误代码,服务器信息,响应头部和响应数据。
以下是HTTP请求/响应的不步骤:
1.客户端连接到Web服务器
2.发送HTTP请求
3.服务器接收请求并返回HTTP响应
4.释放连接TCP连接
5.客户端浏览器解析HTML内容
例如L在浏览器地址输入URL,按下回车会经历以下步骤:
1.浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址;
2.解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;
3.浏览器发出读取文件,(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;
4.服务器对浏览器请求作出响应,并把对应HTTP文本发生给浏览器;
5.释放TCP连接;
6.浏览器将该HTTP文本显示内容。
客户端的选择有:浏览器,curl命令,Postman。
HTTP是一种无状态的协议。
请求报文格式
响应报文格式
请求报文中,第一行是起始行,下面的是首部字段,然后是两个空行,换行是\r\n,连续的两个\r\n代表首部字段结束了。
HTTP请求方法
HTTP/1.1协议中共定义了八种方法来以不同的方式来操作指定的资源:
1.GET:向指定的资源发出“显示”请求,使用GET方法应该只用在读取数据,而不应该被用于产生”副作用“的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。
2.HEAD:与GET方法一样,都是向服务器发出指定资源额请求,只不过服务器将不传回资源的文本部分,它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中”关于该资源的信息“
3.POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件),数据被包含在请求报文中,这个请求可能会创建新的资源或修改现有资源,或二者皆有。
4.PUT:向指定资源上传最新内容。
5.DELETE:请求服务器删除Request-URL所标识的作用。
6.TRAC:回显服务器收到的请求,主要用于测试或诊断。
7.OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。
8.CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器,通常用于SSL加密服务器的连接。
一般情况下GET,POST方法是最常用的。这里并不完全,要了解更多方法,查看RFC文档或者MDN文档。
boundary用来分割不同键值对。
前面使用的是&作为分隔符,用一长串的数字来分割,如果出现和数据相同,则提示重新请求。
浏览器上怎么发POST请求????
先做一个网页出来,和网页里面的内容进行交互。
1.x-www-form-urlencoded key1=value1&key2=value2 短数据,类似登陆注册
2.form-data 指定一个boundary来分割, 可以用来上传文件
uri的路径和path部分
url的路径总是以/开头的,以?结尾,没写的话,默认是/。
怎么样解析path和query?
path由服务端自己决定,比如www.baidu.com/s?就是百度的搜索服务。一般用来对应资源(1.文件,2.某个函数或者服务)。
HTPP版本
起始行的第三个字段是http的版本,它有/0.9 /1.0 /1.1 /2.0 /3.0
我们要关注的是1.1版本,这是使用最多的版本,它支持持久连接,简而言之就是长连接。心跳,根据最后一次请求数据的时间,来依次断连。http是一次请求一次响应,适合短连接。两端的数据都不变,即客户端的ip和port,服务器的ip和port都不变。
状态码和状态字符串
200 OK 表示成功
301 Moved Permanently 表示永久重定向
302 Found 临时重定向
400 Bad Request 有错误,不告诉客户端错在哪
403 Forbidden 服务器有能力处理该请求,但是拒绝授权访问
404 Not Found 客户端有误,服务器端无法找到所请求的资源
500 Internal Server Error 万能响应代码
502 Bad Gateway 网关错误
#include "linuxHeader.h"
#include <memory>
#include <string>
class HttpServer
{
public:HttpServer(const char *ip, const char *port): _ip(ip), _port(port){}void start(){_socketfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(_ip);addr.sin_port = htons(atoi(_port));int reuse = 1;setsockopt(_socketfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int));bind(_socketfd, (struct sockaddr *)&addr, sizeof(addr));listen(_socketfd, 10);}void RecvAndShow(){// 连接客户端int netFd = accept(_socketfd, NULL, NULL);// 使用RAII管理缓冲区std::unique_ptr<char[]> buf(new char[4096]);bzero(buf.get(), 4096);// 读取请求的内容,直接显示在stderr中recv(netFd, buf.get(), 4096, 0);fprintf(stderr, "%s\n", buf.get());// http协议头std::string firstLine = "HTTP/1.1 302 Moved Temporarily\r\n";send(netFd, firstLine.c_str(), firstLine.size(), 0);std::string headers = "Content-Type:text/plain\r\n""Location:https:/www.taobao.com\r\n""Content-Length:5\r\n";send(netFd, headers.c_str(), headers.size(), 0);std::string emptyLine = "\r\n";send(netFd, emptyLine.c_str(), emptyLine.size(), 0);// http协议数据std::string body = "hello";send(netFd, body.c_str(), body.size(), 0);close(netFd);fprintf(stderr, "connection closed\n");}private:const char *_ip;const char *_port;int _socketfd;
};
RESTful设计风格
REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。任何事物,只要有被引用到的必要,它就是一个资源。资源可以是实体(例如手机号码),也可以只是一个抽象概念(例如价值) 。下面是一些资源的例子:
-
某用户的手机号码
-
某用户的个人信息
-
最多用户订购的GPRS套餐
-
两个产品之间的依赖关系
-
某用户可以办理的优惠套餐
-
某手机号码的潜在价值
要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。
URI既可以看成是资源的地址,也可以看成是资源的名称。如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。URI的设计应该遵循可寻址性原则,具有自描述性,需要在形式上给人以直觉上的关联。
如果用户的接口设计符合REST风格,就称作是RESTful的接口设计,REST风格的特点如下:
使用HTTP方法表示行为: GET PUT POST DELETE分别表述查改增删;
所有的对象都抽象成资源,每一个资源都使用URL的路径来标识;
所有传递的参数都放在请求和响应的报文体中;
使用json或者是xml编码数据;
客户端不再得到完整的html,数据的展示效果由客户端完成
怎么样设计一个restful的接口????
1.方法里面放行为:增删查改,2.资源在url的path,3.将参数放在请求体里面,用JSON/XML组织,4.得到的响应体只有关键信息。把视图和关键状态分离。
好处:幂等性
HTTPS的实现原理
http明文传递,风险:信息泄漏,是不安全的。
使用密文传递,传递到服务器之后进行解密。
http+ssl 将传递到网络上的数据进行加密。
对称加密
客户端由原始文档,密钥(只有一份)合成生成一份密文,通过网络传递到服务器,通过密钥和密文解密得到原始文档。同一个密钥可以做加密操作也可以做解密操作,AES/DES。
优点:效率比较高
非对称加密
有一对互补的钥匙,一个公钥,一个私钥,客户端生成了一对公钥和私钥,还有一个原始文档,它把原始文档通过私钥进行加密,得到一份密文,然后把密文和公钥通过网络发给服务器,服务器可以使用公钥和密文进行解密得到密文。
用处:身份验证,客户端有一对公钥和私钥,把公钥给服务器,登录的时候提供私钥,两个是互补的,不需要密码就可以登录。
一般是RSA系列算法。
优点:更加安全
怎么实现HTTPS?
两个阶段:
握手阶段,使用非对称加密将对称加密的密钥传输过去。
传输阶段,使用对称加密进行传输数据。
相关文章:
【HTTP】HTTP协议
一个Web Server就是个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机),其主要功能是通过HTTP协议与客户端进行通信,来接收,存储,处理来自客户端的HTTP请求&…...
大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
SpringBoot源码解析(六):打印Banner
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
【计算机网络】实验6:IPV4地址的构造超网及IP数据报
实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…...
easy excel 生成excel 文件
导包 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version> </dependency> 内容 List<类> limspjreport 值; String fileName sdf.format(new Date()) "-…...
Ajax:回忆与节点
一点回忆 面对我的Ajax学习,实现前后端交互,最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法,然后最终成功,然后按照相关教程配置java ee项目,然后中间又去配置了Tomcat服务器,然后又去学习了一…...
Python+OpenCV系列:Python和OpenCV的结合和发展
PythonOpenCV系列:Python和OpenCV的结合和发展 **引言****Python语言的发展****1.1 Python的诞生与发展****1.2 Python的核心特性与优势****1.3 Python的应用领域** **OpenCV的发展****2.1 OpenCV的起源与发展****2.2 OpenCV的功能特性****2.3 OpenCV的应用场景** *…...
Ubuntu20.04 由源码编译安装opencv3.2 OpenCV
Ubuntu20.04 由源码编译安装opencv3.2.0 获取 opencv 及opencv_contrib源代码 创建目录以存放opencv及opencv_contrib源代码 mkdir ~/opencv3.2.0 cd ~/opencv3.2.0获取opencv源代码并切换到对应tag git clone https://github.com/opencv/opencv.git cd opencv git checkou…...
A058-基于Spring Boot的餐饮管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式
1、介绍 在软件开发领域,尤其是企业级应用开发中,灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目,如何高效地与后端数据库进行交互,以及如何提供多样化的服务访问方式,是开发者需要深入考虑的问题。…...
Linux——命名管道及日志
linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么? 理解: 2、编写代码 makefile 管道封装成类,想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么? 2、日志有什么&#x…...
Flink 常见面试题
1、Flink 的四大特征(基石) checkpoin基于Chandy-Lamport算法实现了分布式一致性快照提供了一致性的语义 state丰富的StateAPI time实现了Watermark机制,乱序数据处理,迟到数据容忍 window开箱即用的滚动,滑动会话窗口…...
rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable
解决方法: 1、先测量pcf8563电源电压,是否满足要求。 2、pcf8563首次操作。第一次读取pcf8563的时间,未初始化,非法,芯片门槛电压检测配置不合理。使用hwclock命令写入一次,即可解决。 hwclock -f /dev/…...
(简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型
摘要: 本文将指导您如何部署一个本地AI大语言模型聊天系统,使用Chatbox AI客户端应用和grok-beta大模型,以实现高效、智能的聊天体验。 引言: 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...
MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接
在开发MAUI应用程序时,蓝牙协议的应用是一个重要的环节,尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得,希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准&#x…...
最新版Node.js下载安装及环境配置教程
目录 初识:Node.js 一、下载:Node.js 二、安装:Node.js 1.下载【node.js】压缩包安装文件 2.解压下载的安装包 3.打开解压的【node-v22.11.0-x64】文件夹 4.双击启动安装程序 5.点击【Next】 6.勾选【I accept the terms in the Lic…...
51c自动驾驶~合集39
我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA!地平线DiffusionDrive:生成式方案或将重塑端到端格局? 近年来,由于感知模型的性能持续进步,端到端自动驾驶受到了来…...
单链表基础操作
文章目录 abstract定义结点结构初始化链表遍历链表求表长查找结点根据序号查找结点根据值查找结点 插入结点首尾位置插入一般位置插入(通用插入)找到尾元素|尾指针相关操作 删除结点 abstract 单链表是一种简单的动态数据结构,它由一系列结点组成,每个结…...
Asp.net MVC在VSCore中的页面的增删改查(以Blog项目为例),用命令代码
在VSCore中的页面的增删改查(以Blog项目为例) 1.创建项目(无解决方案)复杂项目才需要 dotnet new mvc -o Blog2.控制器 BlogsController.cs 控制器(Controller)名字和视图(View)中的文件名要一模一样 u…...
【Leecode】Leecode刷题之路第66天之加一
题目出处 66-加一-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 66-加一-官方解法 方法1:找出最长的后缀9 思路: 代码示例:(Java&#…...
使用 VLC 在本地搭建流媒体服务器 (详细版)
提示:详细流程 避坑指南 Hi~!欢迎来到碧波空间,平时喜欢用博客记录学习的点滴,欢迎大家前来指正,欢迎欢迎~~ ✨✨ 主页:碧波 📚 📚 专栏:音视频 目录 借助VLC media pl…...
Ubuntu 常用解压与压缩命令
.zip文件 unzip FileName.zip # 解压 zip DirName.zip DirName # 将DirName本身压缩 zip -r DirName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一起压缩 zip DirName.zip DirName 行为: 只压缩 DirName 目录本身ÿ…...
【深度学习】四大图像分类网络之AlexNet
AlexNet是由Alex Krizhevsky、Ilya Sutskever(均为Hinton的学生)和Geoffrey Hinton(被誉为”人工智能教父“,首先将反向传播用于多层神经网络)在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络。AlexNet在…...
Day1——GitHub项目共同开发
MarkDowm解释 Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML代码。Markdown的目的是让文档的编写和阅读变得更加容易,同时也不失HTML的强大功能。以下是Markdown的一些基本概念和用法&a…...
基于PHP的香水销售系统的设计与实现
摘 要 时代科技高速发展的背后,也带动了经济的增加,人们对生活质量的要求也不断提高。香水作为一款在人际交往过程中,给对方留下良好地第一印象的产品,在生活中也可以独自享受其为生活带来的点缀。目前香水市场体量庞大ÿ…...
A-star算法
算法简介 A*(A-star)算法是一种用于图形搜索和路径规划的启发式搜索算法,它结合了最佳优先搜索(Best-First Search)和Dijkstra算法的思想,能够有效地寻找从起点到目标点的最短路径。A*算法广泛应用于导航、…...
前端用原生js下载File对象文件,多用于上传附件时,提交之前进行点击预览,或打开本地已经选择待上传的附件列表
用于如上图场景,已经点击选择了将要上传的文件,在附件列表里面用户希望点击下载文件,以核实自己是否选中了需要上传的文件,此刻就需要 用到下面的方法: // 下载File对象文件 downloadByFileObject(file, { fileName }…...
服务器记录所有用户docker操作,监控删除容器/镜像的人
文章目录 使用场景安装auditd添加docker审计规则设置监控日志大小与定期清除查询 Docker 操作日志查看所有用户,所有操作日志查看特定用户的 Docker 操作查看所有用户删除容器/镜像日志过滤特定时间范围内日志 使用场景 多人使用的服务器,使用的docker …...
关于使用天地图、leaflet、ENVI、Vue工具实现 前端地图上覆盖上处理的农业地块图层任务
1.项目框架搭建 项目地址:Webgis: 一个关于webgis、天地图、Leaflet、Vue、数据库的学习框架。 ①git到本地,vscode打开。 ② 配置后端 搜索下载MySQL插件(前提:电脑中装有MySQL才可应用)。 连接数据库。 配置基本…...
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代社会…...
私人路由器做网站/百度指数网站
非极大值抑制(Non-max suppression) 非极大值抑制,简称为NMS算法,英文为Non-Maximum Suppression。其思想是搜素局部最大值,抑制极大值。非极大值抑制,在计算机视觉任务中得到了广泛的应用,例如…...
邯郸论坛网站建设/网站推广郑州
零基础学黑客,搜索公众号:白帽子左一作者:admmin 因为BurpSuite需要在Java环境下运行,所以安装BurpSuite之前需要配置好Java环境。 我这里就直接给大家打包好java15版本的了, 已经是java15的可以不用安装 , 不是java15版本或者j…...
网站独立ip如何做301重定向/互动营销的方式有哪些
1.boolean true & false 2.null 空值类型 3.undefined 未定义类型 4.number 数值类型 5.string 字符串类型 6.symbol 转载于:https://www.cnblogs.com/-Miya/p/10742438.html...
网站建设流程是这样的 里面有很/免费的api接口网站
解决方法如下: 1. 单击“窗口”菜单下面的“首选项”: 2. 选择“Java ”选项下的“编译器”选项: 3.在“编译器一致性级别”右边的下拉菜单里选择“6.0”: 4.单击“确定”按钮后在…...
营销型网站与展示型网站/西安自助建站
Winform中多国语言窗体设计.docWinform中多国语言窗体的设计以及.NET中资源文件的使用 最近在做一些多国语言的软件,就学习了一下.NET中的多国语言相应知识,受益不少,下面我就简单介绍一下winform中关于多国语言的实现方法。分为七个部分来讲…...
wordpress文章图片点击放大预览/营销推广公司案例
2019独角兽企业重金招聘Python工程师标准>>> ##前言 我使用xfs比较二一点,我是在ceph的rbd上直接格式化的xfs,所以ceph上的数据一般不会丢失,不过我的xfs是在docker内部进行的挂载,使用也是docker容器内使用࿰…...