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

【计算机网络】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(下)

本文承接上文的代码进行改造&#xff0c;上文链接&#xff1a;HTTP上 文章目录 1. 实现网站跳转实现 自己的网站跳转 2. 请求方法(get) && 响应方法(post)GET方法POST方法GET与POST的应用场景 3. HTTP状态码在自己设计的代码中发现4043开头的状态码(重定向状态码)永久…...

自学Python03-学会Python中的while循环语句

我们来学习一下怎么使用列表和字典吧&#xff01; 1.列表 首先&#xff0c;我们来学习一下列表。列表是一个有序的集合&#xff0c;它可以包含任何类型的数据&#xff0c;比如数字、字符串或其他列表。我们可以用方括号 [] 来创建一个列表&#xff0c;用逗号分隔各个元素。 …...

PatchMatchNet 学习笔记 译文 深度学习三维重建

9 PatchMatchNet CVPR-2021 patchmatchnet源码下载 PatchMatchNet 代码注释版 下载链接(注释非常详细,较源码结构有调整,使用起来更方便) PatchMatchNet-CVPR-2021(源码、原文+注释+译文+批注) 9.0 主要特点 金字塔,基于传统的PatchMatch算法,精度高,速度快 Pa…...

为什么要使用设计模式,以及使用设计模式的好处

在软件开发中&#xff0c;衡量软件质量只要包含如下指标&#xff1a; 正确性可维护性可读性可扩展性简洁性可测试性健壮性灵活性可复用性 然而&#xff0c;对于一些刚入行的新程序员来说&#xff0c;往往会注意不到上面这些问题&#xff0c;从而产生了一些让人头皮发麻的烂代…...

【Springcloud】Sentinel熔断和降级

【Springcloud】Sentinel熔断和降级 【一】基本介绍【1】什么是熔断和降级【2】为什么使用熔断和降级【3】Sentinel熔断和降级【4】核心概念 【二】下载方式【1】Windows平台安装包下载【2】打开控制台 【三】使用案例【1】添加依赖【2】添加Sentinel配置【3】添加TestUserCont…...

javascript实战开发:json数据求指定元素的和算法

项目需求 在js中&#xff0c;格式如&#xff1a; [{"name": "一(0)班-电量,一(9)班-电流,一(9)班-功率","odata": {"prev_0_day_val_diff": "10.189941,-3.0,79.0",} },{"name": "一(10)班-电量,一(10)班-…...

娱乐时间 —— 用python将图片转为excel十字绘

最近看蛮多朋友在玩&#xff0c;要么只能画比较简单的&#xff0c;要么非常花时间。想了下本质上就是把excel对应的单元格涂色&#xff0c;如果能知道哪些格子要上什么颜色&#xff0c;用编程来实现图片转为excel十字绘应该是很方便的。 图片的每一个像素点都可以数值化&#x…...

OJ练习第160题——LRU 缓存

LRU 缓存 力扣链接&#xff1a;146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; 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&#xff0c;在“Template”上添加一个脚本在Start()中执行下拉框打开时的操作&#xff0c;在OnDestroy()中执行下拉框收起时的操作即可。 效果代码如下用于控制Arrow旋转可以根据自己的想法进行修改&#xff…...

Java开发面试--nacos专区

1、 Nacos是什么&#xff1f; 请简要介绍Nacos是什么以及它的主要功能和用途。 答&#xff1a; 简介&#xff1a; Nacos是一个开源的、高性能、动态服务发现、配置和服务管理平台&#xff0c;通常用于微服务架构中。Nacos的名称来源于"Naming"&#xff08;服务发现…...

GB28181学习(三)——心跳保活

心跳保活 要求&#xff1a; 1. 当原设备发现工作异常时&#xff0c;应立即向本SIP监控域的SIP服务器发送状态信息&#xff1b; 2. 无异常时&#xff0c;定时向本SIP监控域的SIP服务器发送状态信息&#xff1b; 3. 状态信息报送采用**MESSGAE**方法&#xff1b; 4. SIP设备宜在…...

黑马JVM总结(三)

&#xff08;1&#xff09;栈内存溢出 方法的递归调用&#xff0c;没有设置正确的结束条件&#xff0c;栈会有用完的一天&#xff0c;导致栈内存溢出 可以修改栈的大小&#xff1a; 再次运行&#xff1a;减少了次数 案例二&#xff1a; 两个类的循环应用问题&#xff0c;导致Js…...

【数据结构】二叉树基础入门

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

MFC自定义消息的实现方法----(线程向主对话框发送消息)、MFC不能用UpdateData的解决方法

在MFC中&#xff0c;我们一边在使用多线程时&#xff0c;经常会遇到在需要调用到新建的控件&#xff0c;此时建议不要在新建的线程中直接调用主对话框的控件&#xff0c;我们可以通过自定义消息&#xff0c;在新建线程中发送并触发主线程进行相关的界面控件操作。 以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&#xff1a;轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 &#xff08;2&#xff09;将轴名字更新为实际名字 可以后面实例化后再更改&#xff0c;汇川可以在更新名字时同步更新…...

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&#xff0c;先给表单绑定一个v-model值 <el-input type"number" v-model"form.idCard" placeholder"请输入证件号码" /> 2&#xff0c;使用watch监听输入的值 watch(form, (newName, oldName) > {var numid newName.idCard.split(…...

蓝桥杯官网练习题(翻硬币)

题目描述 小明正在玩一个"翻硬币"的游戏。 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;。 比如&#xff0c;可能情形是&#xff1a;**oo***oooo; 如果同时翻转左边的两个硬币…...

企业架构LNMP学习笔记34

LVS-DR模式&#xff1a; 老师分析&#xff1a; 1、首先用户用CIP请求VIP 2、根据上图可以看到&#xff0c;不管是Director Server还是Real Server上都需要配置VIP&#xff0c;那么当用户请求到达我们的集群网络的前端路由器的时候&#xff0c;请求数据包的源地址为CIP目标地址…...

Python学习之六 循环结构

在很多情况下,我们往往需要循环输入多次,比如,密码最多只能输错3次等。这时候,我们需要使用循环结构。本小节,将学习循环。 一、while循环 while循环的一般形式如下: while 判断条件: 循环语句块 当判断条件为真,便执行循环语句块。比如说,我们需要写一个判断账号…...

flutter 网络地址URL转file

方法1 import dart:io; import package:http/http.dart as http; import package:path/path.dart; import package:path_provider/path_provider.dart;Future<File> _fileFromImageUrl() async {final response await http.get(Uri.parse(https://example.com/xyz.jpg)…...

【JavaEE基础学习打卡07】JDBC之应用分层设计浅尝!

目录 前言一、简单说说应用分层二、实体层1.O/R映射2.O/R映射实践三、数据访问层1.DAO层2.DAO层实战总结前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白…...

Helm Kubernetes Offline Deploy Rancher v2.7.5 Demo (helm 离线部署 rancher 实践)

文章目录 1. 简介2. 预备条件3. 选择 SSL 配置4. 离线安装的 Helm Chart 选项5. 下载介质6. 生成证书7. 镜像入库8. 安装 rancher9. 配置 nodeport10. 配置 ingress11. 界面访问11.1 首页预览11.2 查看集群信息11.3 查看项目空间11.4 查看节点信息 1. 简介 Rancher 是一个开源…...

网络编程day6——基于C/S架构封装的线程池

一、线程竞争基本概念 竞争与同步 同一个进程中的线程共享进程中的绝大多数资源&#xff0c;当它们随意竞争时可能会导致资源被破坏、脏数据、不完整问题 通过一些手段让线程在竞争资源时相互协调、避免出现以上问题&#xff0c;这就称为线程同步 原子操作&#xff1a; 操作过程…...

ARM/X86工业级数据采集 (DAQ) 与控制产品解决方案

I/O设备&#xff0c;包括信号调理模块、嵌入式PCI/PCIE卡、便携式USB模块、DAQ嵌入式计算机、模块化DAQ系统&#xff0c;以及DAQNavi/SDK软件开发包和DAQNavi/MCM设备状态监测软件。 工业I/O产品适用于各种工业自动化应用&#xff0c;从机器自动化控制、测试测量到设备状态监测…...

【Java】Jxls--轻松生成 Excel

1、介绍 Jxls 是一个小型 Java 库&#xff0c;可以轻松生成 Excel 报告。Jxls 在 Excel 模板中使用特殊标记来定义输出格式和数据布局。 Java 有一些用于创建 Excel 文件的库&#xff0c;例如Apache POI。这些库都很好&#xff0c;但都是一些较底层的库&#xff0c;因为它们要…...

MySQL主从复制读写分离

读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库 读写分离的好处 因为数据库的“写…...

Kafka3.0.0版本——消费者(手动提交offset)

目录 一、消费者&#xff08;手动提交 offset&#xff09;的概述1.1、手动提交offset的两种方式1.2、手动提交offset两种方式的区别1.3、手动提交offset的图解 二、消费者&#xff08;手动提交 offset&#xff09;的代码示例2.1、手动提交 offset&#xff08;采用同步提交的方式…...

宁德网站建设/今天有哪些新闻

0 前言 本文参考 《控制系统仿真与计算机辅助设计 第2版》薛定宇 机械工业出版社《MATLAB for Control Engineers》Katsuhiko Ogata现代控制理论线性系统入门(一)状态方程描述下的动态系统《现代控制理论基础》— 2 什么是状态与状态空间 本文已假设读者具有自动控制原理的…...

江苏嘉隆工程建设有限公司网站/商城全网推广运营公司

开始学javascript&#xff0c;写作业。 <script type"text/javascript"> function toChinese(money){var chNum[零,壹,贰,叁,肆,伍,陆,柒,捌,玖];var maxnum999999999999.99;var chstr , //返回的大写字符串moneyintparseInt(money),//整数位moneydec money.t…...

网站页头是什么/中国市场营销网网站

点击上方蓝字,记得关注我们&#xff01;win10原装的主题&#xff0c;老套的桌面布局&#xff0c;已经让许多人心生疲倦再看看美化后的桌面▼▼爱了爱了&#xff0c;废话不多说&#xff0c;上教程▼▼工具下载下载链接&#xff1a;https://pan.baidu.com/s/19jPqMtFD-bavRhc-OSw…...

新手怎样在手机上做电商/seo服务方案

&#xff08;《partner4java 讲述jBPM4》仅为技术储备 -- 本人并没有jBPM4实战方面丰富的经验&#xff1b;学习本内容最好有Hibernate的基础&#xff09; 代码下载地址&#xff1a;文章中贴出的代码可能有所改动&#xff0c;以下载地址为准http://download.csdn.net/detail/pa…...

广水住房和城乡建设部网站/直播网站排名

在JS开发中经常会用到定时器&#xff0c;尤其是一些动画特效&#xff0c;小游戏等完全依靠定时器驱动。 要让动画跑得更流畅&#xff0c;我们常常使用较高的刷新率&#xff0c;例如60fps。由于每一帧的间隔非常短&#xff0c;很难看清楚每一帧具体的运行情况。 有时整体上看似乎…...

西宁做网站制作的公司哪家好/seo兼职工资一般多少

双十一网购狂欢节源于淘宝商城&#xff08;天猫&#xff09;2009年11月11日举办的促销活动。一年一度的全民狂欢节。淘宝天猫双11历年成交销售额数据 2009年&#xff1a;5000万元淘宝首届双十一是在这一年&#xff0c;当时还没有多少的人网购&#xff0c;所以在短短一天的时间内…...