【计算机网络】HTTP(下)

news2024/9/28 13:23:54

本文承接上文的代码进行改造,上文链接:HTTP上

文章目录

  • 1. 实现网站跳转
    • 实现 自己的网站跳转
  • 2. 请求方法(get) && 响应方法(post)
    • GET方法
    • POST方法
    • GET与POST的应用场景
  • 3. HTTP状态码
    • 在自己设计的代码中发现404
    • 3开头的状态码(重定向状态码)
      • 永久重定向 和 临时重定向 的区别
      • 临时重定向的实操
      • 永久重定向的实操
  • 4. 关于Http的会话保持功能
    • cookie的使用
    • session id 的提出

1. 实现网站跳转

在浏览器上 输入 w3school 进行搜索

url 表示 链接
Link text 表示 文字/按钮
就可以跳转到指定的网站


在index.html 中,添加一行表示 百度链接,通过点击 Visit W3School 文字进入


运行可执行程序后,可点击Visit W3School 文字


在index.html中 粘贴为 百度的链接,所以点击直接跳转到百度网站

实现 自己的网站跳转

此时将百度的网址改为 自己实现的 file1与 file2文件


此时输入 主机IP + 端口号 ,可以看见 图片下方 有 file1 和file2 两个 链接


此时输入 主机IP + 端口号 ,可以看见 图片下方 有 file1 和file2 两个 链接
分别点击 file1 和file2都可进入不同的网站

2. 请求方法(get) && 响应方法(post)

其中最常用的是 GET和 POST方法
一般是由浏览器 客户端发起的 ,会构建一个 http request,携带的方法可能是GET/POST
促使浏览器 使用不同的方法 进行资源提交和请求
就提出了 HTML 表单的 概念

GET方法

点击查看:HTML表单

语法为form标签,以/form结束
形成输入框,允许用户把自己的个人信息进行直接提取,提交给服务器

action表示 将表单提交给 /a/b/c.exe 对应方法 为 GET


通过GET方法,输入你的名字和密码,最终点击submit 提交


在输入名字 和密码后,点击提交,此时跳转页面的网址为http://101.43.252.143:8989/a/b/c.exe?myname=dname&mypasswd=123456


同时Linux上显示


浏览器在点击提交后,会自动构建HTTP请求
以?作为分隔符,左侧为要访问的资源,右侧为想要给资源的参数,参数为KV类型

GET也能进行提交参数,通过URL的方式提交参数

POST方法

将方法改为POST,其他不变


POST请求,提交数据时,通过正文部分提交参数的


GET与POST的应用场景

GET方法提交参数 不私密(不是安全的)
会把参数回显到 浏览器的URL上

POST方法提交参数比较私密一些
不会把参数回显到URL上
所以所有的登录 注册等行为,都要使用POST方法提参 (不是安全的)

url: http请求行的字符串,一般都会有大小的约束
正文 理论上可以非常大
建议 大数据使用POST,小数据 使用GET

3. HTTP状态码

为了告诉浏览器,返回的结果正确还是错误

在之前的代码中,直接告诉浏览器,它的状态码是200,即正确的


在HTTP服务器中,状态码分为五类,分别为1开头、2开头、3开头。4开头、5开头

1开头称为 信息性状态码
如:当前做了一个提交动作,但该动作比较耗费时间,为了尽快给客户端一点响应,返回一个1开头的状态码
表示当前请求已经被受理了,正在尽快处理

2开头称为 成功状态码
常用的如 200,表示这次请求是成功的,意味着给你的响应 可以正常去解释

3开头称为重定向状态码
如:301、302、307
重定向分为 永久性重定向 与 临时性重定向


4开头称为客户端错误状态码
如:404 403

如:在京东中 点击查看:京东官网

寻找 www.jd/a/b/c.html ,由于京东中并不存在这个页面,所以会报错
所以404报错,属于客户端报错,表示客户端属于非法请求
若客户端属于非法请求,服务器要告诉客户端,该请求是不合理的


在自己设计的代码中发现404

在自己设计的代码中,若访问的资源在网站中没有找到,则如何进行404
所以在wwwroot目录中, 创建一个文件 err_404.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404 Not Found</title>
</head>
<body>
<h1>404 Not Found</h1>
<p>Sorry, the page you are looking for could not be found.</p>
</body>
</html>

在网上寻找到一个404 html网页源代码


在Main.cc的HandlerHttp回调函数中

若 ReadFile函数(功能为读取整个文件的内容)返回值 为 true,则表示读取文件成功


若ReadFile函数返回值为false,则表示读取文件失败,需添加404页面


创建一个 字符串 page_404,表示404页面的路径
文件打开失败,则将 404对应的路径 导入到 body(有效载荷) 中

在GetContentType函数(功能为判断某一种资源的后缀),直接判断为.html


当在可执行程序中输入 端口号8888时,就意味着浏览器只能输入 主机IP+端口号
当浏览器 输入 主机IP+端口号 后,又输入其他东西,则会导致 404 报错


5开头称为 服务器错误状态码

在服务器中创建进程或线程时,若创建进程或线程 处理失败了,则属于服务器错误
或者 在执行操作时,这个文件是存在的,但是打开/读取文件失败了,也属于服务器错误

一般来说,即便是服务器错误,也不会显示5开头的状态码,而会显示 1到4开头的状态码

3开头的状态码(重定向状态码)

主要看 301 302 307 三种 状态码
301表示 永久重定向
302与307 表示 临时重定向


永久重定向 和 临时重定向 的区别

服务器因为某些原因,如:将厂商从阿里云 变成 腾讯云
但是用户并不知道,用户可能还是向 老服务器进行请求
此时当前的主机并不会给客户端提供服务,而是告诉客户端 需要访问新的地址
所以客户端就会发起 第二次请求,去访问 新服务器
这种行为就叫做 重定向


如:在你们学校的东门,有一家XXX麻辣烫, 你和你的朋友在宿舍中,
在你们学校的东门,门口有一条路,这条路正在修路,但依旧可以走过去,所以你和你的朋友前往麻辣烫店吃了一次


又过了几个月,你俩又想吃麻辣烫
但此时麻辣烫门口贴了一张纸,因为门口修路,导致本店就餐环境不太好,所以本店迁移到西门
因为你俩非常想麻辣烫,所以就去了西门

这种行为就被称为 重定向


因为 XXX麻辣烫 是临时搬迁,所以并不了解什么时候搬回到东门,导致每次吃麻辣烫都要去东门看看,如果没在,再去西门吃麻辣烫
这种行为 称为 临时重定向
(每次都会去老地址,再由老地址跳转到新地址)
临时重定向不更改 浏览器的任何地址信息


后来麻辣烫店的老板发现西门的生意 比东门好,因为西门离学校宿舍最近,所以老板想把所有的老客户都拉拢到西门新店中
所以又重新在东门麻辣烫店粘贴一张告示
因为门口修路 本店就餐环境不好,以后想吃麻辣烫可以直接去西门,该店面就不经营了

此时你和你的朋友 依旧照常来到东门吃麻辣烫,但是发现告示后,还要去到西门
过了一段时间,你和你的朋友就直接去西门吃麻辣烫了
(重定向一次后,下次就会去新的地方了)

这种行为称为 永久重定向
永久重定向 会更改浏览器的本地书签


可以发现无论是 临时重定向(302) 还是 永久重定向(301),都会在东门麻辣烫店处留下一个新地址,
由客户端返回 301 302 307 这样的状态码 再加上 Location , Location后面可以跟上一个新店地址

Location:搭配3xx状态码 使用,告诉客户端接下来要去哪里访问

临时重定向的实操

在Main.cc的HandlerHttp回调函数中
只要用户发送请求,直接做重定向

定义一个字符串response,把302(临时重定向)添加到其中
并重定向到 https://www.qq.com/


输入主机IP+端口号,就会直接跳转到qq官网中


永久重定向的实操

定义一个字符串response,把301(永久重定向)添加到其中
并重定向到 https://www.baidu.com/


输入主机IP+端口号,就会直接跳转到百度官网中

之后就算是把该代码注释掉, 运行可执行程序 , 输入主机IP+8888,依旧还是百度官网

4. 关于Http的会话保持功能

http 本身是无状态的
如:访问了file1,过了一段时间,还想访问file1,http并不知道前段时间访问过file1,还会进行请求

在打开B站,并将用户登录后,发现 再次打开B站,用户已经处于登录状态了
所以就需要 cookie 与 session
Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能


在登录时,服务器会向本地浏览器通过一些Http的选项,向本地写入一些cookie信息
所以当重新进入B站时,用户已经登录了


若将B站对应的cookie删除,则再次进入B站,就需要重新登录了

cookie的使用

服务器中有很多资源
当请求某种资源时,若服务器发现没有登录,就会要求客户端进行登录
在输入完账号密码后,服务器就会对账号密码进行认证
若认证通过了,就会返回认证成功的消息


服务器通过 Set-Cookie 把私人信息(用户名 密码等) 携带到 Http响应中
当浏览器收到携带 cookie的信息时,将response中响应的cookie信息在本地进行保存
浏览器对于本地 有两种保存方案:内存级、文件级

之后只要访问同样的网站时,请求中就会携带cookie信息(浏览器自动做的)
自动进行身份认证,就不需要用户输入 账号密码了


当你点了 一些由黑客发出的不该点的链接,就会导致 黑客把 所有的cookie信息盗取过来
若黑客 也去访问你曾经访问的网站, 该网站上的登录用户依旧是你

session id 的提出

上一个方案是有明显的缺点的,黑客可以获取到对应的账号密码等信息
所以使用当前方案


当前服务器中存在很多资源
当请求某种资源时,若服务器发现没有登录,就会要求客户端进行登录

当登录时 需要使用 POST方法 ,输入账号密码
在输入完账号密码后,服务器就会对账号密码进行认证
若认证通过后,新方案就会在服务器形成一个session对象 (用当前用户的基本信息 填充)
以及 seesion id (以10/16进制形成的序列 保证是唯一的)
把session id 通过http 响应 传给 客户端


之后访问时,Http 请求 都会携带 session id,就可以通过session id 去确认是否存在,若存在则可以访问这个资源

就算是黑客再次盗取你的信息,也只会盗取session id ,虽然还是会存在使用你的身份去访问资源
但是不用担心 用户的账号密码泄露了

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

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

相关文章

“交叉轮”轮融资后,哪吒汽车能否脚踏“风火轮”续写逆袭故事?

2023年的新能源汽车江湖&#xff0c;烟波浩渺的水面下暗潮汹涌。 从特斯拉年初打响降价第一枪&#xff0c;降价潮至今未见尾声。9月刚至&#xff0c;小鹏汽车、零跑汽车又推出了调价政策。 这一背景下&#xff0c;车企内卷加剧是必然。年初&#xff0c;哪吒汽车联合创始人、C…

2019 ICPC香港站 G. Game Design

Problem - G - Codeforces 问题描述&#xff1a;怪物只能在树叶子节点出生&#xff0c;向上走&#xff0c;可以花费一个值在一个节点建防御塔&#xff0c;防御塔会阻碍怪物向上走。最小花费可以让根节点无法被怪物走到的一个造塔方法算是一个方案。现给定方案数&#xff0c;让…

MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 论文阅读

论文信息 题目&#xff1a;MaskVO: Self-Supervised Visual Odometry with a Learnable Dynamic Mask 作者&#xff1a;Weihao Xuan, Ruijie Ren, Siyuan Wu, Changhao Chen 时间&#xff1a;2022 来源&#xff1a; IEEE/SICE International Symposium on System Integration …

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建&#xff08;推荐&#xff09; 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…

【Go基础】编译、变量、常量、基本数据类型、字符串

面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 编译 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build &#xff0c;需要再后面加上项目的路径&#xff08;项目路径从GOPATH/src后开始写起&#xff0c;编译之后的可执行文件就保存再…

chrome_elf.dll丢失怎么办?修复chrome_elf.dll文件的方法

Chrome是目前最受欢迎的网络浏览器之一&#xff0c;然而有时用户可能会遇到Chrome_elf.dll丢失的问题。该DLL文件是Chrome浏览器的一个重要组成部分&#xff0c;负责启动和管理程序的各种功能。当Chrome_elf.dll丢失时&#xff0c;用户可能无法正常启动Chrome或执行某些功能。本…

log4qt库的使用

log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮…

(2023,Diffusion)稳定扩散模型是不稳定的

Stable Diffusion is Unstable 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 进交流群获取资料&#xff09; 0. 摘要 最近&#xff0c;文本到图像模型一直蓬勃发展。 尽管它们具有强大的生成能力&#xff0c;但我们的研究发现这一生成过程缺乏稳健性。 具体…

【C++】平衡二叉搜索树的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

【数据结构】设计环形队列

环形队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里&#xff0c;一旦一个队列…

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…

【产品应用】一体化伺服电机在全自动咖啡研磨机中的应用

在现代社会中&#xff0c;咖啡已经成为人们生活中不可或缺的一部分。为了满足咖啡爱好者对于口感和品质的追求&#xff0c;全自动咖啡研磨机应运而生。 而其中的一体化伺服电机作为关键组件&#xff0c;发挥着重要的作用。本文将探讨一体化伺服电机在全自动咖啡研磨机中的应用&…

Magisk隐藏外挂解决方案

自2008年1.0测试版发布以来&#xff0c;安卓系统已经发展了近16年&#xff0c;凭借着优秀的开源生态&#xff0c;安卓系统飞速成长&#xff0c;已经成了当下手机系统中的龙头。据研究机构 Canalys 报告称&#xff0c;今年第一季度安卓设备的整体市场份额占比达到 78 %。 开源生…

走进中国水果罐头领军品牌真心罐头—快消食品企业的全链路数字化

近日&#xff0c;【数字中国-高效增长】名城优企游学系列之走进真心罐头活动成功举办&#xff01; 真心罐头食品有限公司&#xff08;以下简称为“真心罐头”&#xff09;初创于1990年&#xff0c;位于素有“北方明珠”、“黄桃之乡”美誉的海滨城市——辽宁省大连市&#xff0…

软件测试面试题(Python全栈自动化测试面试题)

1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#xff0c;不…

Java不定参数使用及一些注意情况

一、背景 在项目中使用到了StringUtils.isAllBlack(String …css)方法。可以很方便地传递不定数量的参数进行空判。 但开发过程中遇到了一些问题&#xff0c;所以特地记录一下。 二、不定参数传参 不定参数的传参本质上是一个泛型的数组。参数数量大于等于两个的时候&#x…

薅羊毛零撸小游戏是这样赚米的!

薅羊毛小游戏作为一种特殊类型的游戏&#xff0c;吸引了一大批用户的关注。本文将探讨薅羊毛小游戏的盈利模式、用户体验以及对游戏产业的影响&#xff0c;旨在为读者提供专业而有深度的思考和启示。 一、薅羊毛小游戏的盈利模式&#xff1a; 1.广告变现&#xff1a;薅羊毛小游…

R-CNN

目标检测、语义分割 由于我们将区域建议与CNN相结合&#xff0c;我们将我们的方法称为R-CNN:带有CNN特征的区域。 目标检测系统由三个模块组成。第一种方法生成分类独立的区域提案。这些提议定义了可供我们的检测器使用的候选检测集合。第二个模块是一个大型卷积神经网络&…

【C++基础】类与对象(中):默认成员函数、构造函数、析构函数、拷贝构造、赋值重载函数……

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; C基础语法。六大默认构造函数简介、构造函数、析构函数、拷贝构造函数、赋值重载函数、const成员函数、取地址重载等。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&…