【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http

2.5 关于referer

        Referer 描述了当前页面是从哪个页面跳转来的,如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示:

        HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改.
        HTTPS 针对 HTTP 数据进行了加密 (header 和 body 都加密了).第三方想要获取或者篡改,就没那么容易了(HTTPS 详细介绍),通过这个手段,就可以有效遏制运营商劫持这样的情况 

2.6 Cookie 

        Cookie 可以认为是浏览器在本地存储数据的一种机制,如下所示:

        浏览器的数据来自于服务器,浏览器后续的操作也是要提交给服务器的.服务器这边管理着一个网站的各种核心数据,但是程序运行过程中,也会有一些数据,需要在浏览器这边存储的,并且在后续请求的时候数据可能需要再发给服务器,(类似于上次登陆时间.上次访问时间,用户的身份信息,累计的访问次数..,临时性的数据,存储在浏览器比较合适的。)

        实际上更容易想到的是,把这样的数据直接存储到本地文件中,但是实际上不可行的,浏览器为了考虑到安全性,禁止网页直接访问你的电脑的文件系统;网页代码中也就无法直接生成一个硬盘的文件来储数据了;

        为了保证安全性,又能进行存储数据,于是就引入了 Cookie(也是按照硬盘文件的方式保存的,但是浏览器把操作文件给封装了,网页只能往 Cookie 中存储键值对;

        Cookie 往往是从服务器返回的数据(也可以是页面自己生成的);
        Cookie 存储到浏览器所在主机的硬盘上, 并且是按照域名为维度来存储的.(每个域名下可以存自己的 Cookie,彼此之间不影响)
        Cookie 是按照键值对的形式来组织的,这里的键值对也都是程序猿自定义的 (和 query string 差不多),后续再请求这个服务器的时候,就会把 Cookie 中的内容自动代入到请求中,发给服务器,服务器通过 Cookie 的内容做一些逻辑上的处理

        浏览器中正在使用的cookie如下图所示:

        

        键值对之间,使用;分割. 键和值使用 = 分割.上图所述的这些内容就是浏览器本地存储的cookie,都会再后续请求服务器的时候,把这些内容给代入到请求中,传给服务器

3. 关于http响应

        响应状态码表示了这次请求对应的响应,是啥样的状态(成功,失败,等其他的情况,以及对应的原因是啥),总体所有的响应如下所示:

404 Not Found:

        请求中访问的资源,在服务器上不存在;404 这个状态码表示的是资源不存在,同时在 body 中也是可以返回一个指定的错误页面,很多网站会把这个错误页面做的很丰富多彩;

403 Forbidde:

        表示访问的资源没有权限;

5xx :

        表示服务器出错了 看到这个说明服务器挂了

特殊的状态码,418:

        lam a teapot!(杯具),418 状态码是 HTTP RFC 文档中专门规定的一个状态码表白这个事情是非常不靠谱的,这个状态码并没有实际的意义,只是“"开个玩笑”,称为“彩蛋”

        以上所述,是 HTTP 协议报文结构的基本情况.对于键值对来说--> HTTP 中存在很多种键值对:

1) 、query string

2)、 heade
3) 、cookie
4) 、body

类似于:form表单和json格式:
form key1 =value1&key2=value2
json { key1: value1, key2: value2}

4. 客户端构造请求

        如何让客户端构造一个 HTTP 请求?

        浏览器:
1、直接在浏览器的地址栏 输入 url, 此时构造了一个 GET 请求
2、 htm| 中,一些特殊的 html 标签, 可能会触发 GET 请求.比如像 img, a, link, script ..等

3、通过 form 表单来触发 GET / POST 请求

        form 本质也是一个 HTML 标签,写一个简单的 html 代码,来编写逻辑;

        HTML、 CSS、 JS 也是编程语言,他们和C 和 Java 有一个明显的差别,这几个语言是运行在浏览器上的,不像 C 需要安装 VS,也不像 Java 需要安装JDK,只要有浏览器就能运行。

在下面的内容中,我们使用VSCode来编写前端代码;

        VSCode 中不需要创建项目,只需要打开一个目录即可,在你想要编辑的目录中,右键打开即可;

        1)、下面来简单介绍一下html的相关标签

        2)、直接输入!<tab>,就会自动生成基本的 htm| 代码模板 )

        3)、form 表单如何编写.

        简单举例输入框的设置:

        提交按钮的设置:

        完整的请求构造如下所示:

        请求抓包如下所示:

        将其改为post请求之后抓包如下所示:

        对于 GET 来说, 这几个键值对, 是在 url 中;对于 POST 来说,这几个键值对,就在 body 中了;

4.、ajax 的方式
        form 有一些缺陷,只支持 GET 和 POST,不支持其他方法,同时form 会触发页面跳转,(有的时候不想跳转)

        ajax可以通过 js 提供的 api 来构造 http 请求;针对拿到的响应,同样可以使用js 灵活处理,想要怎么处理都行,或者想跳转不跳转也都行.如此给前端代码,带来了更多的可操作空间.故此现在的网站,主体都是通过 ajax 的方式来进行交互的;

        浏览器原生提供了 ajax 的 api, 原生的 api 特别难用.所以一些第三方库封装了 ajax,就准备使用封装的版本来进行操作,我们本次所使用的是 jquery 这个库就是封装的 ajax;

        使用ajax构造http请求的步骤如下所示:

        1、引入 jquery 库.(第三方库,是需要额外下载引入的)

        前端引入第三方库非常容易的.只要代码中写一个库的地址即可.

        2、编写代码

        

        $是一个变量名(全局变量,在jquery 中定义的),通过这个变量来调用一些方法来使用jquery 中的 api;

        js 中 {}表示对象,{}里面是使用键值对的方式来描述 "属性名" 和"属性值”的.

        上图这里 的success 这个函数,不是立即执行的.而是服务器返回 200 这样的响应的时候,才会执行到 success,至于服务器啥时候返回 200 是不太确定的,可能是 10ms 之后,也可能是 1s之后,也可能永远也不返回.至于啥时候返回 200 了,啥时候执行 success.主要是因为success 执行时机不是程序员自己能控制的,而是在合适的时候自动被调用的;

        像这样的函数,就是"回调函数”;

        这个写法就是定义变量,不需要写类型 ,不管啥类型, 都是 let,变量具体类型是根据= 后面初始化的值的类型来确定的,此处'1'是一个字符串,所以 value1 变量类型也就是字符串了;

        这个操作就可以把js 对象转成json 格式的字符串了;

        至于更简单的构造 http 请求的方式,可以直接通过第三方工具,即图形化界面构造.

5、postman构造http请求

        postman布局如下所示:

           基本页面布局即操作:

 ps:本次的学习就到这里了,如果大家感兴趣的话就请一键三连哦!!!

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

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

相关文章

#gStore-weekly | gStore最新版1.2之新增内置高级函数详解(一)

gStore1.2版本新增了七个高级函数&#xff0c;我们第2期将继续介绍的高级函数为&#xff1a;整体/局部集聚系数&#xff08;clusterCoeff&#xff09;、鲁汶算法&#xff08;louvain&#xff09;、K跳计数&#xff08;kHopCount&#xff09;/K跳邻居&#xff08;kHopNeighbor&a…

React之拖动组件的设计(一)

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

Linux CAfile 文件下的/ca-bundle.crt怎么生成的

在配置Linux Nginx SSL证书后&#xff0c;通过服务器访问域名时发现&#xff0c;服务器返回的CA证书是&#xff1a;/etc/pki/tls/certs/ca-bundle.crt 正式我在使用Spring Native安装了Docker自动生成的&#xff0c;而且开启了Docker的自启动&#xff0c;如果你和我一样&#x…

10MARL深度强化学习 Value Decomposition in Common-Reward Games

文章目录 前言1、价值分解的研究现状2、Individual-Global-Max Property3、Linear and Monotonic Value Decomposition3.1线性值分解3.2 单调值分解 前言 中心化价值函数能够缓解一些多智能体强化学习当中的问题&#xff0c;如非平稳性、局部可观测、信用分配与均衡选择等问题…

从零开始学习Netty - 学习笔记 - NIO基础 - 文件编程:FileChannel,Path,Files

3.文件编程 3.1.FileChannel FileChannel只能工作在非阻塞模式下面&#xff0c;不能和selector一起使用 获取 不能直接打开FIleChannel&#xff0c;必须通过FileInputSream&#xff0c;或者FileOutputSetream &#xff0c;或者RandomAccessFile来获取FileChannel 通过FileIn…

互联网高科技公司领导AI工业化,MatrixGo加速人工智能落地

作者&#xff1a;吴宁川 AI&#xff08;人工智能&#xff09;工业化与AI工程化正在引领人工智能的大趋势。AI工程化主要从企业CIO角度&#xff0c;着眼于在企业生产环境中规模化落地AI应用的工程化举措&#xff1b;而AI工业化则从AI供应商的角度&#xff0c;着眼于以规模化方式…

Rust ?运算符 Rust读写txt文件

一、Rust &#xff1f;运算符 &#xff1f;运算符&#xff1a;传播错误的一种快捷方式。 如果Result是Ok&#xff1a;Ok中的值就是表达式的结果&#xff0c;然后继续执行程序。 如果Result是Err&#xff1a;Err就是整个函数的返回值&#xff0c;就像使用了return &#xff…

电脑wifi丢失修复

当你打开电脑突然发现wifi功能不见了&#xff0c;可以先查看一下网卡的状态 在控制面板中找到设备管理器&#xff0c;打开就能找到网络适配器&#xff0c; 我这里是修复过的&#xff0c;wifi丢失后这里可能会显示WALN是丢失的&#xff0c;其他项显示黄色感叹号。 如何修复呢…

Go语言中的TLS加密:深入crypto/tls库的实战指南

Go语言中的TLS加密&#xff1a;深入crypto/tls库的实战指南 引言crypto/tls库的核心组件TLS配置&#xff1a;tls.Config证书加载与管理TLS握手过程及其实现 构建安全的服务端创建TLS加密的HTTP服务器配置TLS属性常见的安全设置和最佳实践 开发TLS客户端应用编写使用TLS的客户端…

[游戏开发][虚幻5]新建项目注意事项

鼠标右键点击Client.uproject文件&#xff0c;可以看到三个比较关键的选项&#xff0c; 启动游戏&#xff0c;生成sln解决方案&#xff0c;切换引擎版本 断点调试 C代码重要步骤 如果你想断点调试C代码&#xff0c;则必须使用使用代码编译启动引擎&#xff0c;你需要做几个操作…

从零开始学习Netty - 学习笔记 - NIO基础 - 网络编程: Selector

4.网络编程 4.1.非阻塞 VS 阻塞 在网络编程中&#xff0c;**阻塞&#xff08;Blocking&#xff09;和非阻塞&#xff08;Non-blocking&#xff09;**是两种不同的编程模型&#xff0c;描述了程序在进行网络通信时的行为方式。 阻塞&#xff08;Blocking&#xff09;&#xff1…

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…

【算法与数据结构】1020、130、LeetCode飞地的数量 被围绕的区域

文章目录 一、1020、飞地的数量二、130、被围绕的区域三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、1020、飞地的数量 思路分析&#xff1a;博主认为题目很抽象&#xff0c;非常难理解。想了好久&#xff0c;要理解…

【蝶变跃升】壹起来|就业辅导系列活动——职业生涯规划和模拟面试

为使困难家庭更深层次了解自己就业现状&#xff0c;明确就业方向&#xff0c;同时提升在面试时的各类技巧。2024年2月17日&#xff0c;由平湖市民政局主办、平湖吾悦广场和上海聘也科技有限公司协办、平湖市壹起来公益发展中心承办的“蝶变跃升”就业辅导系列——职业生涯规划和…

2024新版Java高频面试题+Java八股文面试真题

Java面试题_2024新版Java高频面试题Java八股文面试真题 Java高频面试专题视频课程&#xff0c;瓤括了Java生态下的主流技术面试题&#xff0c;课程特色&#xff1a; 1、全面&#xff0c;jvm、并发编程、mysql、rabbitmq、spring、mybatis、redis、分布式、微服务、数据结构等等…

Flutter学习4 - Dart数据类型

1、基本数据类型 num、int、double &#xff08;1&#xff09;常用数据类型 num类型&#xff0c;是数字类型的父类型&#xff0c;有两个子类 int 和 double 通过在函数名前加下划线&#xff0c;可以将函数变成私有函数&#xff0c;私有函数只能在当前文件中调用 //常用数据…

docker之安装mongo创建运行环境

目录 一、docker pull 最新资源 二、启动mongo镜像 启动命令查看日志拉取低版本镜像成功启动 三、进入mongo容器 进入容器进入mongo环境查询当前所在库切换库至admin随意切换库 并 创建用户登录用户新增文档数据等 五、总结 版本兼容可备份操作 一、docker pull 最新资源…

顺序表详解(如何实现顺序表)

文章目录 前言 在进入顺序表前&#xff0c;我们先要明白&#xff0c;数据结构的基本概念。 一、数据结构的基本概念 1.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来。所谓数据就是&#xff1f;常见的数值1、2、3、4.....、姓名、性别、年龄&#xff0c;等。…

开发一款招聘小程序需要具备哪些功能?

随着时代的发展&#xff0c;找工作的方式也在不断变得简单&#xff0c;去劳务市场、人才市场的方式早就已经过时了&#xff0c;现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道&#xff0c;还能节省招聘的成本&#xff0c;方便求职者进…

C# 使用onnxruntime部署夜间雾霾图像的可见度增强

目录 介绍 模型信息 效果 项目 代码 下载 C# Onnx 使用onnxruntime部署夜间雾霾图像的可见度增强 介绍 github地址&#xff1a;GitHub - jinyeying/nighttime_dehaze: [ACMMM2023] "Enhancing Visibility in Nighttime Haze Images Using Guided APSF and Gradien…