【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…

Javaopp面向对象部分核心知识梳理

目录 前言&#xff1a; 一.面向对象和面向过程 面向过程 面向对象 面向过程与面向对象 二.类和对象 类 概念 成员变量&#xff08;静态成员变量 和 非静态成员变量&#xff09; 成员方法&#xff08;静态成员方法 和 非静态成员方法&#xff09; 代码块&#xff08;实…

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…

常见的几种HTTP状态码

HTTP状态码用于告知客户端与服务器之间发生的情况&#xff0c;以下是一些常见的HTTP状态码及其含义&#xff1a; 1xx 信息性状态码&#xff08;Informational&#xff09;&#xff1a; 100 Continue&#xff1a;收到请求的初始部分&#xff0c;客户端应继续请求。101 Switching…

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;你需要做几个操作…

Backend - Docker 离线卸载

目录 一、卸载 docker 1. 停止 docker 2. 删除相关文件 3. 重新加载配置文件 4. 移除 docker 二、卸载 docker-compose 三、查看 Docker-compose 和 Docker、docker.service 是否卸载干净 1. 首先确定自己安装的目录 2. 进入这三个目录下查看文件夹 3. 删除docker-se…

Python 正斜杠 (斜杠 /) 和反斜杠 (倒斜杠 \)

Python 正斜杠 [斜杠 /] 和反斜杠 [倒斜杠 \] 1. Windows2. LinuxReferences 1. Windows 倒斜杠有两个&#xff0c;因为每个倒斜杠需要由另一个倒斜杠字符来转义。 Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\fore…

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

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

C#中使用list封装多个同类型对象以及组合拓展实体的应用

文章目录 一、list使用方法二、C#组合拓展实体 一、list使用方法 在C#中&#xff0c;使用List<T>集合是封装多个同类型对象的常用方式。List<T>是泛型集合&#xff0c;T是集合中元素的类型。下面是一个简单的例子&#xff0c;演示如何创建一个List<T>&#…

鸿蒙 gnss 开关使能流程

先WiFi&#xff0c;后 定位&#xff0c;再从蓝牙到NFC&#xff0c;这个就是我大致熟悉开源鸿蒙代码的一个顺序流程&#xff0c;WiFi 的年前差不多基本流程熟悉了&#xff0c;当然还有很多细节和内容没有写到&#xff0c;后续都会慢慢的丰富起来&#xff0c;这一篇将开启GNSS的篇…

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

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

mq大量消息堆积有哪些解决方案

当消息队列中出现大量消息堆积时&#xff0c;可能会导致系统性能下降、消息延迟增加以及服务不可用等问题。针对这种情况&#xff0c;可以采取以下几种解决方案&#xff1a; 增加消费者数量&#xff1a;增加消费者数量可以提高消息消费的速度&#xff0c;缩短消息队列中消息的处…

在 Windows 上安装 Redis 过程全记录(使用WSL在Windows中搭建虚拟环境)

在Windows上使用Redis进行开发 Windows 上不正式支持 Redis。但是&#xff0c;您可以按照以下说明在 Windows 上安装 Redis 进行开发&#xff0c;本教程采用WSL方式安装Linux虚拟环境&#xff08;并非唯一方式&#xff0c;也可通过其他方式安装Linux虚拟环境&#xff0c;本教程…