当前位置: 首页 > news >正文

【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就是个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;&#xff0c;其主要功能是通过HTTP协议与客户端进行通信&#xff0c;来接收&#xff0c;存储&#xff0c;处理来自客户端的HTTP请求&…...

大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

SpringBoot源码解析(六):打印Banner

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

【计算机网络】实验6:IPV4地址的构造超网及IP数据报

实验 6&#xff1a;IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网&#xff08;无分类编制&#xff09;的了解。 加深对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学习&#xff0c;实现前后端交互&#xff0c;最开始我采用的使用网络寻找intellij IDEA Ultimate破解方法&#xff0c;然后最终成功&#xff0c;然后按照相关教程配置java ee项目&#xff0c;然后中间又去配置了Tomcat服务器&#xff0c;然后又去学习了一…...

Python+OpenCV系列:Python和OpenCV的结合和发展

PythonOpenCV系列&#xff1a;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的餐饮管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式

1、介绍 在软件开发领域&#xff0c;尤其是企业级应用开发中&#xff0c;灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目&#xff0c;如何高效地与后端数据库进行交互&#xff0c;以及如何提供多样化的服务访问方式&#xff0c;是开发者需要深入考虑的问题。…...

Linux——命名管道及日志

linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么&#xff1f; 理解&#xff1a; 2、编写代码 makefile 管道封装成类&#xff0c;想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么&#xff1f; 2、日志有什么&#x…...

Flink 常见面试题

1、Flink 的四大特征&#xff08;基石&#xff09; checkpoin基于Chandy-Lamport算法实现了分布式一致性快照提供了一致性的语义 state丰富的StateAPI time实现了Watermark机制&#xff0c;乱序数据处理&#xff0c;迟到数据容忍 window开箱即用的滚动&#xff0c;滑动会话窗口…...

rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable

解决方法&#xff1a; 1、先测量pcf8563电源电压&#xff0c;是否满足要求。 2、pcf8563首次操作。第一次读取pcf8563的时间&#xff0c;未初始化&#xff0c;非法&#xff0c;芯片门槛电压检测配置不合理。使用hwclock命令写入一次&#xff0c;即可解决。 hwclock -f /dev/…...

(简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型

摘要&#xff1a; 本文将指导您如何部署一个本地AI大语言模型聊天系统&#xff0c;使用Chatbox AI客户端应用和grok-beta大模型&#xff0c;以实现高效、智能的聊天体验。 引言&#xff1a; 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...

MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接

在开发MAUI应用程序时&#xff0c;蓝牙协议的应用是一个重要的环节&#xff0c;尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得&#xff0c;希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准&#x…...

最新版Node.js下载安装及环境配置教程

目录 初识&#xff1a;Node.js 一、下载&#xff1a;Node.js 二、安装&#xff1a;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&#xff01;地平线DiffusionDrive&#xff1a;生成式方案或将重塑端到端格局&#xff1f; 近年来&#xff0c;由于感知模型的性能持续进步&#xff0c;端到端自动驾驶受到了来…...

单链表基础操作

文章目录 abstract定义结点结构初始化链表遍历链表求表长查找结点根据序号查找结点根据值查找结点 插入结点首尾位置插入一般位置插入(通用插入)找到尾元素|尾指针相关操作 删除结点 abstract 单链表是一种简单的动态数据结构&#xff0c;它由一系列结点组成&#xff0c;每个结…...

Asp.net MVC在VSCore中的页面的增删改查(以Blog项目为例),用命令代码

在VSCore中的页面的增删改查(以Blog项目为例) 1.创建项目&#xff08;无解决方案&#xff09;复杂项目才需要 dotnet new mvc -o Blog2.控制器 BlogsController.cs 控制器&#xff08;Controller&#xff09;名字和视图&#xff08;View&#xff09;中的文件名要一模一样 u…...

【Leecode】Leecode刷题之路第66天之加一

题目出处 66-加一-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 66-加一-官方解法 方法1&#xff1a;找出最长的后缀9 思路&#xff1a; 代码示例&#xff1a;&#xff08;Java&#…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...