【Javaee】网络原理-http协议(二)

news2024/11/25 18:43:58

前言

上一篇博客初步介绍了抓包工具的安装及使用,介绍了http请求报文与响应报文的格式。​​​​​​【Javaee】网络原理—http协议(一)-CSDN博客

本篇将详细介绍http的方法和http报文中请求头内部键值对的含义与作用,以及常见状态码所代表的意义。


一.HTTP方法

HTTP 中的方法,就是 HTTP 请求报文中的首行的第一个部分,描述这个HTTP请求的“动作”要干啥。

HTTP方法并不需要全部都背下来,只需重点掌握POSTGET,以及了解PUTDELETE方法即可

1.GET方法

GET方法是最常用的HTTP方法,常用于获取服务器上的某种资源。

GET方法的触发方式有多种,例如

1.在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求

2.HTML中的link,img,script等标签,也会触发GET请求

1)浏览器缓存

当我们搜索url打开网页时进行抓包,能够抓取到该网页的数据包(以搜狗搜索为例)

当我们按住Ctrl+F5刷新页面,会发现Fiddler会蹦出更多的搜狗数据包

通过观察类型,我们发现多出来很多JS和CSS的数据包,为什么按住Ctrl+F5与只按F5抓取的包相差这么大?

这是因为一些CSS文件,JavaScript文件,图片,字体文件等内容一般都是固定的,改变的频率非常低。

第一次访问主页时,这些固定资源就保存在我们电脑中,后续再访问该网页,就没必要重复获取上述内容了。

上述机制,就叫做浏览器缓存,可以节省服务器带宽,加快页面的显示速度。

当按住F5时,会忽略缓存,重新从服务器读取信息,我们看到的内容就更多了。

2)GET请求特点

  • 首行的第⼀部分为GET
  • URL的querystring可以为空,也可以不为空.
  • header部分有若⼲个键值对结构.
  • body部分为空.

2.POST方法

1)应用场景

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤户输⼊的数据给服务器(例如登陆页面),还有以下一些场景

1)通过 HTML 中的 form 标签可以构造 POST 请求

2)使用 JavaScript 的 ajax 可以构造 POST 请求

案例:gitte登入

此为登入gitte时的请求包。

POST https://gitee.com/login HTTP/1.1
Host: gitee.com
Connection: keep-alive
Content-Length: 477
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Origin: https://gitee.com
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://gitee.com/login?redirect_to_url=%2F
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: user_locale=zh-CN; oschina_new_user=false; sensorsdata2015jssdkchannel=%7B%22prop%22%3A%7B%22_sa_channel_landing_url%22%3A%22%22%7D%7D; Serve_State=true; remote_way=ssh; visit-gitee--2024-09-19=1; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2213540275%22%2C%22first_id%22%3A%2219271cba43e911-0006b98e5cd9293a-4c657b58-1327104-19271cba43fea6%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22sem%22%2C%22%24latest_utm_campaign%22%3A%22enterprise%22%2C%22%24latest_utm_content%22%3A%22competition%22%2C%22%24latest_utm_term%22%3A%22git%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThiMGY5YjM5YTgxNTJjLTAyYzY0NGIwMjUxNTQ3ZS03ODUwNTc3MC0xMzI3MTA0LTE4YjBmOWIzOWE5ZTI0IiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMTM1NDAyNzUifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2213540275%22%7D%2C%22%24device_id%22%3A%2218b0f9b39a8152c-02c644b0251547e-78505770-1327104-18b0f9b39a9e24%22%7D; visit-gitee--2024-10-17=1; sl-session=dgd6CCI7ImdX5HHIWkkpFg==; BEC=1f1759df3ccd099821dcf0da6feb0357; visit-gitee--2024-10-28=1; tz=Asia%2FShanghai; Hm_lvt_24f17767262929947cc3631f99bfd274=1729816449,1729819590,1730210211,1730287145; HMACCOUNT=AC5127A3770AB307; remove_bulletin=gitee-maintain-1729837832; csrf_token=rLI4R%2BAcSJR1tqlVEM5RMwgQykycg5mxULDvo%2BGsCF45tgAif%2F4mo%2FRq5OiFk94EbJfUvrJ5M4L8bac%2FPPu9Yw%3D%3D; user_return_to_0=%2F; Hm_lpvt_24f17767262929947cc3631f99bfd274=1730289897; gitee-session-n=NWpSZ3RQUFBXdnYzcmxCZXRHdTRkZkdPZVB3VkdaYTBsM2lJQzc1cGdaV3VvNERIMVo2dzRSbnpZVFhoREQvbm1YQVR0ZVZVTEJvMXBTQURrYjQwd2ROWHd4MFcxeTd3cDBOY1VHN2FMdzExYTVRVldpWkc1SUV6RFhqcm9PbEhMT3FaMjZORjJpc0ZQeXY2V2h5SGRWVHZ1VXVZMXFWNDFNL3JsY0FuUmp6cFoxTnNONjF3eExoVWE0NUs5RzloZElIdnFqYVZwMTlycFpPMU9ISGhhZS8vY0JIU21Kenk0enQxa1licHhVbnlhTG1WRExoc1Q3UjZoazUra1pwci8rRFNpR0hhYnlrUWNidHNyWEc0SStoV2JuNEY4elZ3SHhyREs4Vm9EU1doczQ3MDRoNFI0dWxIbWtpT2VIOE9RUHlDM1N1YnZMazJJYzNNZVA1QVNXS2ZCS1hrdXRZQ2lFMkQ2a3d3Y1pVNWhDYU9jS2NQU2YxQzVSK0JVNm9wLzlETVhpelZZeUMxVnl4QXZNbnBDRmFPcHpKN3I3N0lVcEM3STNVdzR5Z1VUS1U5c3hJRWxnY0ZsWDlVaExKTHVVd2Zydk1DQ1BNV3NjL2VOZWdXRDlOL0YwVHNNMXFXZklTSGcxU3FLMFJMYmhnQlBkNG40OW9Ea3FBRy9QUkRaNTN4d1ljZStlS2VOU0E5QUl3YkYrS28vUE9YNEIrQWtJRTNyTFZJbDZrPS0tSG50enV3aGd0RHVta2pURFFCamJOUT09--f22767d13ab444f6f426c339707c162adf4fec5e

encrypt_key=password&utf8=%E2%9C%93&authenticity_token=CVjaA1WRDaHqYYtYfCyRb7L4I712HS6CjMDsLzeIW2GcXOJmynNjlmu9xuXpcR5Y1n89T1jnhLEgHaSz6t%2FuXA%3D%3D&redirect_to_url=%2F&user%5Blogin%5D=18270014592&encrypt_data%5Buser%5Bpassword%5D%5D=Ug%2F%2F4mYHRNl%2B01lm4tUdlQmMkSE%2FgqHaprf6agZXVAx8c0b%2BE%2BKVhZzJBb95XMQdeMMcNXc%2FsqHvCxJ7ESZZ%2FM7Jk95NAiFG%2B5HVPdE0JsRwVsrKYi76%2FIbAtJVQ1U8j5sGw07Pg8z6EnUerNjLKGLLfWlWxcoTOyYQ54CSWoOw%3D&user%5Bremember_me%5D=0&user%5Bremember_me%5D=1

此外,上传文件时,也会涉及到POST方法,例如:gitte换个头像

2)POST请求特点

  • 首行的第⼀部分为POST
  • URL的querystring⼀般为空(也可以不为空)
  • header部分有若⼲个键值对结构.
  •  body部分⼀般不为空,body内的数据格式通过header中的Content-Type指定,body的长度由header中的Content-Length指定

3)GET与POST的区别

首先,明确抛出结论,这两个方法并没有什么本质的区别(GET能用的场景换成POST也能用,POST能用的场景换成GET也能用)

但是没有本质区别,不代表没有区别

区别

  1. 语义不同:GET⼀般⽤于获取数据,POST⼀般⽤于提交数据。
  2. GET的body⼀般为空,需要传递的数据通过querystring传递,POST的querystring⼀般为空,需要传递的数据通过body传递(若需要,也可以不为空)
  3.  GET请求⼀般是幂等的,POST请求⼀般是不幂等的.(如果多次请求得到的结果⼀样,就视为请求是幂等的)
  4. GET可以被缓存,POST不能被缓存.(这⼀点也是承接幂等性)

什么是幂等性???

幂等性是指某个操作或函数在重复执行多次时,结果始终保持不变的特性。换句话说,无论你执行这个操作多少次,最终的结果都是相同的。

例如:牛吃草,挤得是奶;昨天吃草,挤得是牛奶;明天吃草,挤得是牛奶;每天吃草,挤得都是牛奶,这就是幂等

但是,如果今天牛吃草,挤出的是奶;明天吃草,挤出的是翔,那就不是幂等的了。

3.其他方法

PUT与POST相似,只是具有幂等特性,⼀般⽤于更新

DELETE删除服务器指定资源

OPTIONS返回服务器所⽀持的请求⽅法

HEAD类似于GET,只不过响应体不返回,只返回响应头

TRACE回显服务器端收到的请求,测试的时候会⽤到这个

CONNECT预留,暂⽆使⽤

在进行web开发时,有一种设计服务器接口风格,称为“Restful”

使用不同的方法表示不同的语义(增:POST 删:DELETTE 查:GET 改:PUT)

二.认识报头

1.HOST

表示服务器主机的地址和端口(URL中已有体现)

2.Content-Length和Content-Type

一个请求/响应报头若是没有body部分,也就没有这两个字段

Content-Length

表示body中的数据长度,单位为字节

Content-Type

表示body中的数据格式

 

3.User-Agent(UA)

UA会展现出操作系统的版本信息与浏览器的版本信息,表达你在使用什么样的设备进行上网

UA能够进行数据统计(如统计访问量,多少被点击等),主要是用于区分PC端和移动端。

4.Referer

描述了当前页面是从哪个页面跳转过来的(从哪来)

例如,我从浏览器中点击搜狗搜索,利用Fiddler抓取搜狗的数据包。

可以看到我是从哪个网页跳转到搜狗搜索的。

我们再去点击广告,在广告的数据包中,Referer会显示点击广告前的网页URL

5.Cookie

1)Cookie是什么

Cookie是属于浏览器给网站提供的一种“客户端存储数据”的机制

Cookie也是键值对结构,使用“;”来分割键值对,使用“=”来分割键和值

Cookie看似是从浏览器通过请求发送给服务器的,实际上这些数据最初是从服务器返回给浏览器中的。

对于一个网站来说,主要的数据都是存储在浏览器中,但有些数据需要存储在客户端(如果用户身份信息,上次登入时间等等)

出于安全考虑,浏览器会禁止网页直接访问你的硬盘(硬性要求)
但浏览器并没有把路完全堵死,而是开了个口子,允许网页通过键值对的方式来存储数据(这样的数据本质上是在硬盘上的)

Cookie里面的内容也是来自服务器的,如果是首次访问某个网站,可能会不带有Cookie,而是在响应中带有Set-cookie这样的header,把键值对写回客户端这边,这样服务器以后发送请求时就会带有cookie。

2)Cookie功能

对于HTTP请求来说,针对同一个服务器,彼此之前是独立的。

登入前是一个请求,后续的的请求是怎么知道我已经登入的?
这样的问题,可以通过Cookie解决

通过Cookie,我们可以获取到当前客户端的登入状态,以及快速查询到客户的一些信息。

三.状态码

状态码表示访问⼀个⻚⾯的结果.(是访问成功,还是失败,还是其他的⼀些情况...),以及失败的原因

以下为常见的状态码

1)404 Not Found

浏览器访问的资源在服务器上没有找到(大概率为路径写错了)

2)403 Forbidden 访问被拒绝(没有权限)

3)405 Method Not Allowed

这表示服务器接收到的请求方法不被允许。例如,如果客户端使用POST方法请求一个只允许GET方法的资源,服务器就会返回这个状态码

4)500 Internal Server Error 服务器内部错误

通常为代码中抛出异常,但又没合理的Catch

5)504 Gateway Timeout

服务器问题,响应没有在规定时间内返回

6)302 Found 重定向

访问A网站时自动跳转到B网站

指示请求的资源已被临时移动到其他位置。服务器会在响应中提供新的URL,客户端应使用这个新地址进行后续请求。这个状态码通常用于网站更新或维护期间。


以上便是全部内容,如有不对,欢迎指正

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

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

相关文章

大模型系列——AlphaZero/强化学习/MCTS

AlphaGo Zero无需任何人类历史棋谱,仅使用深度强化学习,从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。 1、围棋知识 (1)如何简单理解围棋知识 (2)数子法分胜负:https://zhu…

得物多模态大模型在重复商品识别上的应用和架构演进

重复商品治理介绍 根据得物的平台特性,同一个商品在平台上不能出现多个链接,原因是平台需要保证一品一链的特点,以保障商品的集中竞价,所以说一个商品在整个得物平台上只能有一个商详链接,因此我们需要对一品多链的情…

1、DevEco Studio 鸿蒙仓颉应用创建

1. 仓颉鸿蒙应用简介 因为仓颉是静态编译型语言,使用仓颉开发的应用执行效率更高。而且主打全场景,后续可并入仓颉生态,其和ArkTS都是基于ArkUI进行开发,最大的区别是typescript和仓颉语法间的差异。 2. 应用创建 前置条件&…

vue3项目中实现el-table分批渲染表格

开篇 因最近工作中遇到了无分页情景下页面因大数据量卡顿的问题&#xff0c;在分别考虑并尝试了懒加载、虚拟滚动、分批渲染等各个方法后&#xff0c;最后决定使用分批渲染来解决该问题。 代码实现 表格代码 <el-table :data"currTableData"borderstyle"wi…

LeetCode:82. 删除排序链表中的重复元素 II(重复的一个都不保留)

目录 题目描述: 代码: 第一种: 第二种: 题目描述: 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2…

偏差与方差的基本概念

在机器学习中&#xff0c;Bias-Variance Tradeoff&#xff08;偏差-方差权衡&#xff09; 是一个核心概念&#xff0c;帮助我们理解模型的误差来源以及如何调节模型复杂度以达到更好的泛化性能。在这篇博客中&#xff0c;我们将深入讨论什么是偏差和方差&#xff0c;以及如何平…

0-ARM Linux驱动开发-字符设备

一、字符设备概述 Linux 系统中&#xff0c;设备被分为字符设备、块设备和网络设备等。字符设备以字节流的方式进行数据传输&#xff0c;数据的访问是按顺序的&#xff0c;一个字节一个字节地进行读取和写入操作&#xff0c;没有缓冲区。例如&#xff0c;终端&#xff08;/dev…

HTML 基础标签——表格标签<table>

文章目录 1. `<table>` 标签:定义表格2. `<tr>` 标签:定义表格行3. `<th>` 标签:定义表头单元格4. `<td>` 标签:定义表格单元格5. `<caption>` 标签:为表格添加标题6. `<thead>` 标签:定义表格头部7. `<tbody>` 标签:定义表格…

【优选算法】——二分查找!

目录 1、二分查找 2、在排序数组中查找元素的第一个和最后一个位置 3、搜索插入位置 4、x的平方根 5、山脉数组的封顶索引 6、寻找峰值 7、寻找旋转排序数组中的最小值 8、点名 9、完结散花 1、二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组…

东北虎豹国家公园shp格式范围

东北虎豹国家公园地处中国吉林、黑龙江两省交界的老爷岭南部&#xff08;珲春—汪清—东宁—绥阳&#xff09;区域&#xff0c;东起吉林省珲春林业局青龙台林场&#xff0c;与俄罗斯滨海边疆区接壤&#xff0c;西至吉林省大兴沟林业局岭东林场&#xff0c;南自吉林省珲春林业局…

Spring 中的 Environment 对象

可参考官网&#xff1a;Environment Abstraction 核心概念 Environment 对象对两个关键方面进行建模&#xff1a;profiles 和 属性&#xff08;properties&#xff09;。 Profile 简单来说&#xff1a;profile 机制在 IOC 容器中提供了一种机制&#xff1a;允许在不同的环境…

Puppeteer点击系统:解锁百度流量点击率提升的解决案例

在数字营销领域&#xff0c;流量和搜索引擎优化&#xff08;SEO&#xff09;是提升网站可见性的关键。我开发了一个基于Puppeteer的点击系统&#xff0c;旨在自动化地提升百度流量点击率。本文将介绍这个系统如何通过模拟真实用户行为&#xff0c;优化关键词排名&#xff0c;并…

浅谈UI自动化

⭐️前言⭐️ 本篇文章围绕UI自动化来展开&#xff0c;主要内容包括什么是UI自动化&#xff0c;常用的UI自动化框架&#xff0c;UI自动化原理等。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题…

[Android]从FLAG_SECURE禁止截屏看surface

在应用中&#xff0c;设置activity的flag为FLAG_SECURE就可以禁止截屏&#xff0c;截屏出来是黑色的&#xff0c; 试验一下&#xff0c; 注意事项 影响&#xff1a; 设置 FLAG_SECURE 标志后&#xff0c;用户将无法对该Activity进行截屏或录制屏幕。这个标志会影响所有屏幕录…

设计模式之模块方法

定义 模板与方法应该是最常使用的设计模式&#xff0c;在GOF&#xff08;设计模式&#xff09;中的定义&#xff1a;定义一个操作中的算法的骨架 &#xff0c;而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 …

深度学习之降维和聚类

1 降维和聚类 1.1 图解为什么会产生维数灾难 ​ 假如数据集包含10张照片&#xff0c;照片中包含三角形和圆两种形状。现在来设计一个分类器进行训练&#xff0c;让这个分类器对其他的照片进行正确分类&#xff08;假设三角形和圆的总数是无限大&#xff09;&#xff0c;简单的…

uni-app 下拉刷新、 上拉触底(列表信息)、 上滑加载(短视频) 一键搞定

一、下拉刷新 1. 首先找到pages.json中 给需要进行下拉刷新的页面设置可以下拉刷新 2. 然后在需要实现下拉刷新的script标签内添加 导入onPullDownRefresh import {onPullDownRefresh} from dcloudio/uni-app 下拉刷新触发的事件 onPullDownRefresh(()> {console.log(正…

AprilTag在相机标定中的应用简介

1. AprilTag简介 相机标定用的标靶类型多样,常见的形式有棋盘格标靶和圆形标靶。今天要介绍的AprilTag比较特别,它是一种编码形式的标靶。其官网为AprilTag,它是一套视觉基准系统,包含标靶编解码方法(Tag生成)和检测算法(Tag检测),可用于AR、机器人、相机标定等领域。…

stm32入门教程--USART外设 超详细!!!

目录 简介 什么是UART&#xff1f; 什么是USART&#xff1f; 简介 USART&#xff08;Universal Synchron /Asynchronous Receiver /Transmitter&#xff09;通用同步/异步收发器 1、USART是STM32内部集成的硬件外设&#xff0c;可根据数据寄存器的一个字节数据自动生成数据帧…

ubuntu20.04 加固方案-设置重复登录失败后锁定时间限制

一、编辑PAM配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/pam.d/common-auth文件。 sudo vim /etc/pam.d/common-auth 二、添加配置参数 在打开的配置文件中&#xff0c;添加或修改以下参数&#xff1a; auth required pam_tally2.so deny5 un…