【计算机网络】HTTP(下)
本文承接上文的代码进行改造,上文链接: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(下)
本文承接上文的代码进行改造,上文链接:HTTP上 文章目录 1. 实现网站跳转实现 自己的网站跳转 2. 请求方法(get) && 响应方法(post)GET方法POST方法GET与POST的应用场景 3. HTTP状态码在自己设计的代码中发现4043开头的状态码(重定向状态码)永久…...
自学Python03-学会Python中的while循环语句
我们来学习一下怎么使用列表和字典吧! 1.列表 首先,我们来学习一下列表。列表是一个有序的集合,它可以包含任何类型的数据,比如数字、字符串或其他列表。我们可以用方括号 [] 来创建一个列表,用逗号分隔各个元素。 …...
PatchMatchNet 学习笔记 译文 深度学习三维重建
9 PatchMatchNet CVPR-2021 patchmatchnet源码下载 PatchMatchNet 代码注释版 下载链接(注释非常详细,较源码结构有调整,使用起来更方便) PatchMatchNet-CVPR-2021(源码、原文+注释+译文+批注) 9.0 主要特点 金字塔,基于传统的PatchMatch算法,精度高,速度快 Pa…...
为什么要使用设计模式,以及使用设计模式的好处
在软件开发中,衡量软件质量只要包含如下指标: 正确性可维护性可读性可扩展性简洁性可测试性健壮性灵活性可复用性 然而,对于一些刚入行的新程序员来说,往往会注意不到上面这些问题,从而产生了一些让人头皮发麻的烂代…...
【Springcloud】Sentinel熔断和降级
【Springcloud】Sentinel熔断和降级 【一】基本介绍【1】什么是熔断和降级【2】为什么使用熔断和降级【3】Sentinel熔断和降级【4】核心概念 【二】下载方式【1】Windows平台安装包下载【2】打开控制台 【三】使用案例【1】添加依赖【2】添加Sentinel配置【3】添加TestUserCont…...
javascript实战开发:json数据求指定元素的和算法
项目需求 在js中,格式如: [{"name": "一(0)班-电量,一(9)班-电流,一(9)班-功率","odata": {"prev_0_day_val_diff": "10.189941,-3.0,79.0",} },{"name": "一(10)班-电量,一(10)班-…...
娱乐时间 —— 用python将图片转为excel十字绘
最近看蛮多朋友在玩,要么只能画比较简单的,要么非常花时间。想了下本质上就是把excel对应的单元格涂色,如果能知道哪些格子要上什么颜色,用编程来实现图片转为excel十字绘应该是很方便的。 图片的每一个像素点都可以数值化&#x…...
OJ练习第160题——LRU 缓存
LRU 缓存 力扣链接:146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓…...
使用 Hugging Face Transformer 创建 BERT 嵌入
介绍 最初是为了将文本从一种语言更改为另一种语言而创建的。BERT 极大地影响了我们学习和使用人类语言的方式。它改进了原始 Transformer 模型中理解文本的部分。创建 BERT 嵌入尤其擅长抓取具有复杂含义的句子。它通过检查整个句子并理解单词如何连接来做到这一点。Hugging F…...
unity 控制Dropdown的Arrow箭头变化
Dropdown打开下拉菜单会以“Template”为模板创建一个Dropdown List,在“Template”上添加一个脚本在Start()中执行下拉框打开时的操作,在OnDestroy()中执行下拉框收起时的操作即可。 效果代码如下用于控制Arrow旋转可以根据自己的想法进行修改ÿ…...
Java开发面试--nacos专区
1、 Nacos是什么? 请简要介绍Nacos是什么以及它的主要功能和用途。 答: 简介: Nacos是一个开源的、高性能、动态服务发现、配置和服务管理平台,通常用于微服务架构中。Nacos的名称来源于"Naming"(服务发现…...
GB28181学习(三)——心跳保活
心跳保活 要求: 1. 当原设备发现工作异常时,应立即向本SIP监控域的SIP服务器发送状态信息; 2. 无异常时,定时向本SIP监控域的SIP服务器发送状态信息; 3. 状态信息报送采用**MESSGAE**方法; 4. SIP设备宜在…...
黑马JVM总结(三)
(1)栈内存溢出 方法的递归调用,没有设置正确的结束条件,栈会有用完的一天,导致栈内存溢出 可以修改栈的大小: 再次运行:减少了次数 案例二: 两个类的循环应用问题,导致Js…...
【数据结构】二叉树基础入门
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
MFC自定义消息的实现方法----(线程向主对话框发送消息)、MFC不能用UpdateData的解决方法
在MFC中,我们一边在使用多线程时,经常会遇到在需要调用到新建的控件,此时建议不要在新建的线程中直接调用主对话框的控件,我们可以通过自定义消息,在新建线程中发送并触发主线程进行相关的界面控件操作。 以Dialog对话…...
Linux单列模式实现线程池
目录 一、单列模式 1.1 单列模式概念以及实现条件 1.2 饿汉模式 1.1.1 饿汉模式代码实现 1.1.2 饿汉模式特征和优缺点 1.3 懒汉模式 1.3.1 懒汉模式代码实现 1.3.2 懒汉模式特征以及优缺点 二、线程池 2.1 线程池概念 2.2 实现简单线程池逻辑 2.3 模拟实现懒汉模式线程…...
汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址
汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 (2)将轴名字更新为实际名字 可以后面实例化后再更改,汇川可以在更新名字时同步更新…...
javaee springMVC Map ModelMap ModelAndView el和jstl的使用
pom依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …...
vue监听表单输入的身份证号自动填充性别和生日
1,先给表单绑定一个v-model值 <el-input type"number" v-model"form.idCard" placeholder"请输入证件号码" /> 2,使用watch监听输入的值 watch(form, (newName, oldName) > {var numid newName.idCard.split(…...
蓝桥杯官网练习题(翻硬币)
题目描述 小明正在玩一个"翻硬币"的游戏。 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。 比如,可能情形是:**oo***oooo; 如果同时翻转左边的两个硬币…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
