JavaEE-HTTP协议(一)

news2024/11/15 10:43:14

目录

  • 什么是HTTP协议?
  • 协议格式
    • 如何看到HTTP的报文格式?
  • HTTP请求
  • HTTP响应
  • URL
    • URL encode/decode

什么是HTTP协议?

计算机网络,核心概念,网络协议
网络协议种类非常多,其中一些耳熟能详的,IP,TCP,UDP…其中还有一个应用非常广泛的协议,HTTP
HTTP 处于 TCP/IP五层协议栈的应用层~
HTTP在传输层是基于TCP的~( 不够严谨,HTTP/1 HTTP/2 是基于TCP,最新版本HTTP/3是基于UDP的,但是当下互联网绝大部分使用的HTTP都是HTTP/1.1 )
传输层协议,主要关注的是 端对端 之间的数据传输,TCP,重点关注的是可靠传输
应用层协议,则是站在程序应用的角度,要对传输的数据,来进行具体的使用~

HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 **应用层协议**。
所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些
其他的资源, 比如图片, 视频, 音频等二进制的数据。

HTTP虽然是已经设计好的,自身的扩展性非常强,可以根据实际需要,让程序员传输各种自定义的数据信息~

HTTP具体的应用场景:天天都在用~
只要你打开浏览器,随便打开一个网站,这个时候就用到了HTTP,或者打开一个手机APP,随便加载一些数据,这个时候其实大概率就用到了HTTP。

协议格式

协议格式:数据具体是怎么组织的。
之前学习过UDP:报头(源端口,目的端口,长度,校验和)+载荷。

UDP/TCP/IP这些协议都是属于“二进制”的协议,经常要理解到二进制的bit位~

HTTP 则是一个文本格式的协议。(不需要去理解具体的二进制位,而只是理解文本的格式即可)

如何看到HTTP的报文格式?

其实可以借助一些“抓包工具”来获取具体的HTTP交互过程中,请求和响应。

抓包工具,其实就是一个第三方的程序,在网络通信的过程中,类似于一个”代理“一样。

在这里插入图片描述
我们使用Fiddler 抓包 下载地址:Fiddler下载链接
在这里插入图片描述
在这里插入图片描述
安装下载之后的界面就是这样的
在这里插入图片描述
Fiddler左侧,是一个列表,显示了当前抓到的HTTP/HTTPS的数据报。
当选中左侧列表某个条目,并双击的时候,右侧就会显示详细信息。
在这里插入图片描述

这个标签页的选项,就表示了当前使用啥样的格式来显示 HTTP 请求;咱们用的最多的就是 Raw 这个选项;
选择 Raw 看到的就是 HTTP 请求数据的本体;选择其他的选项相当于 Fiddler 对数据进行了一些加工 调整了格式;
在这里插入图片描述
我们可以点击这里的view in notepad查看原始数据;
在这里插入图片描述
如果出现下列情况:
在这里插入图片描述
这是因为Fiddler 刚安装好的时候,默认没有启用 HTTPS;如果你抓到了 HTTPS 的包,就会出现类似的情况;当下网络上的大部分的网站都是 HTTPS;如果不开启 HTTPS,其实就基本没啥可抓的,所以我们可以允许fiddler启动https;

首先我们打开fiddler,按照下图的箭头依次勾选,然后点击OK;
在这里插入图片描述

可能会出现fiddler要求安装xx证书,一定要点是!!
Fiddler作为一个代理,是和其他的代理程序冲突的,如果也安装了其他的代理程序/插件,就可能导致Fiddler失效

HTTP请求

在这里插入图片描述
在这里插入图片描述

请求分成4个部分:

  1. 请求行(首行),包括三个部分
    a)HTTP的方法,方法大概描述了这个请求想干啥~~ GET 意思是想从服务器获取到某个东西
    b)URL 描述了要访问的网络上的资源具体在哪~
    c)版本号,HTTP/1.1表示当前使用的HTTP版本是1.1
  2. 请求头(head) 包含了很多行
    每一行都是一个键值对
    键和值之间使用:空格来分割~
    这里的键值对的数目是不固定的,不同的键值对表示不同的含义;
  3. 空行
    相当于请求头结束的标记!类似于链表的null一样。
  4. 请求正文(body)不一定有,可选;

Fiddler使用技巧;
我们在使用fiddler的时候,经常看到左侧会抓取很多的包,我们不知道如何选择哪一个是我们需要的,这里教大家一个技巧,我们可以选中左侧的某一行,然后Ctrl+A全选,点电脑上的Del键,把抓包信息全部删除,再去进行我们需要的操作,然后再点击到fiddler这里,即可观察到我们一个操作对应的fiddler抓包信息;

HTTP响应

在这里插入图片描述
在这里插入图片描述
注意响应分成四个部分;

  1. 首行,包含了3个部分
    a)版本号——http1.1
    b)200 状态码,描述了这个响应表示一个成功的还是失败的;这里200表示成功;
    c)OK状态码的描述,通过一个/组简单的单词,来描述当前状态码的含义;
  2. 响应头(header)
    也是键值对结构,依然是每个键值对占一行,每个键和值之间使用空格来分割;
  3. 空行
    表示响应头结束的标记;
  4. 响应正文(body)
    服务器返回给客户端的数据,这里的数据可能是不同的格式,最常见的是html形式。

URL

含义就是“网络上唯一资源地址符”,既要明确哪个主机,又要明确主机上哪个资源;

https://www.baidu.com/s?ie=utf-8&tn=85070231_18_hao_pg&wd=fiddler

这串也就是URL,通过浏览器打开网页的时候,地址栏填写的网址就是URL。
在这里插入图片描述
这是一个总结,URL都要遵守这样一个基本模板。

协议方案名:描述了当前这个URL是给哪个协议来使用的~~
http://给HTTP用的
https:// 给HTTPS用的
jdbc:mysql:// 给jdbc:mysql用的
登录信息:这个部分现在很少会用到,上古时期上网,会在这里体现用户名密码~
服务器地址: 当前要访问的主机是啥~ 这里可以是一个IP地址,也可以是域名~
服务器端口号 :端口号,表示当前要访问的主机上的哪个应用程序.(这里的端口号大部分情况下是省略的,省略的时候,不是说没有,而是浏览器会给一个默认端口号,对于HTTP开头的URL,就会使用80端口号作为默认值,对于HTTPS开头的URL,就会使用443端口号作为默认值)
带层次的文件路径:描述了当前要访问的服务器资源是啥~虽然请求的URL中,写的是一个文件路径,但是不一定服务器上就真存在一个对应的文件,这个文件可能是一个真实的,在磁盘上存在的文件,也可能是虚拟的,由服务器代码,构造出的一个动态数据
查询字符串:本质上是浏览器/客户端,给服务器传递的自定义信息~相当于对获取到的资源提出了进一步的要求
片段标识符:描述了要访问当前html页面中哪个具体的子部分,能够控制浏览器滚动到相应位置

上述的IP地址+端口+带层次的文件路径其实就描述了一个网络上具体的资源
但是在这个基础上,还可以携带一些其他的要求,也就是后面的参数

URL 总结:
对于 URL 来说,里面的结构看起来比较复杂,其实最重要的,和开发最关系紧密的,主要就是四个部分:

1、ip 地址/域名;
2、端口号(常省略);
3、带层次结构的路径;
4、query string 查询字符串;

URL encode/decode

当query string 中如果包含了特殊字符,就需要对特殊字符进行转义~
这个转义的过程,就叫做 url encode 反之,把转义的内容还原回来,就叫做url decode
url里面有很多特殊含义的符号的
/ : ? $ = …这些符号都在URL中具有特殊含义的~万一,query string里也包含这类特殊符号,就可以导致URL被解析失败!!
在这里插入图片描述
这个%2B%2B的在干嘛?骂人嘛?那肯定不是!
这个键值对 %2B%2B 其实就是通过URL encode转义之后得到的结果;字符 + 的ASCII的十六进制的表示就是2B,按照URL encode转义的规则在这个字符前加上%,就是现在这样的 %2B%2B;

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

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

相关文章

shell命令行并行神器 - parallel

shell命令行并行神奇 - parallel 概述 GNU parallel 是一个 shell 工具,用于使用一台或多台计算机并行执行作业。作业可以是单个命令或必须为输入中的每一行运行的小脚本。典型的输入是文件列表、主机列表、用户列表、URL 列表或表列表。作业也可以是从管道读取的…

98年的确实卷,公司新来的卷王,我们这帮老油条真干不过.....

都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …

电脑麦克风没声音怎么办?这3招就可以解决!

最近有用户在使用电脑麦克风进行视频录制时,发现麦克风没有声音。这是什么原因?电脑麦克风没有声音怎么办?关于解决方案,我专门整理了三种方法来帮你们,一起来看看吧! 操作环境: 演示机型&#…

在TitanIDE中使用ChatGPT辅助科研开发

作者:行云创新CEO 马洪喜 命题:太空望远镜拍摄的照片处理 假设:我是图形科学家,但不是特别懂Python 先上传一张银河系照片,目的是把彩色转成灰度: 然后我不会啊, 问问chatGPT 彩色图片转灰度…

电话号码的字母组合-力扣17-java

一、题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits "23"输出…

Android 一体机研发之修改系统设置————自动锁屏

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解自动锁屏。 自动锁屏功能,这个可以根据…

简述springIOC容器的bean加载流程

参考笔记:https://blog.51cto.com/u_14006572/3118363 https://zhuanlan.zhihu.com/p/386335813 https://blog.csdn.net/mrathena/article/details/115654379 目录结构 spring ioc容器的加载,大体上经过以下几个过程: 资源文件定位、解析、注册、实例化…

UWA Pipeline 2.4.1 版本更新说明

UWA Pipeline是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线,提供可视化的CICD操作界面、高可用的自动化测试以及UWA性能保障服务的无缝贴合等实用功能。 在本次UWA Pipeline 2.4.1版本更新中,主要…

PIL.Image与cv2之间的常用API汇总

简单介绍 主要是因为经常用到这两个,经常弄混淆,所以,总结一番。持续更新。 from PIL import Image import cv2 as cv import numpy as np import matplotlib.pyplot as plt1、读取文件与写入文件 1.1 Image.open() img_pil Image.open…

电商数据监测——中国白酒行业数据浅析

大国盛世酿,万家潭酒香。中国白酒是中国特色文化之一。 2022年,国内白酒总产量为671.2万千升,处于持续下滑的态势。 白酒产量不佳,但线上平台的销售情况却成绩优异。2022年,京东平台白酒的年度总销量超3500万件,同比去…

操作系统开发:编写开机引导

操作系统是用来管理与协调硬件工作的,开发一款操作系统有利于理解底层的运转逻辑,本篇内容主要用来理解操作系统是如何启动的,又是如何加载磁盘中的内核的,该系列文章参考各类底层书籍,通过自己的理解并加以叙述&#…

彻底理解 cookie、session、token (一)

发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记…

阿里巴巴在开源压测工具 JMeter 上的实践和优化

Apache JMeter [1] 是 Apach 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史。JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一。 性能测试通常集中在新系统上线或大型活动前&…

l1和l2接口如何进行编写?一定要掌握这几个元素

在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…

浏览器广告拦截插件| 浏览器搜索广告横飞怎么办

文章目录浏览器广告拦截插件| 浏览器搜索广告横飞怎么办一、效果二、安装浏览器广告拦截插件| 浏览器搜索广告横飞怎么办 浏览器广告横飞怎么办?今天教你一招解决!很多小伙伴说自己用的浏览器总是有广告。 今天咱们就针对这个问题分享一个浏览器插件&a…

【面试题】JavaScript中递归的理解

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库递归 RecursionTo iterate is human, to recurse, divine. 理解迭代,神理解递归。本文会以 JavaScript为主、有部分 Rust 举例说明。…

【python--networkx】函数说明+代码讲解

【Python–NetworkX】函数说明代码讲解 文章目录【Python--NetworkX】函数说明代码讲解1. 介绍1.1 前言1.2 图的类型(Graph Types)1.3 常用方法2. 代码示例1. 介绍 1.1 前言 NetworkX是复杂网络研究领域中的常用Python包。 1.2 图的类型(G…

Linux高级命令之文件权限命令

文件权限命令学习目标能够使用chmod命令完成文件权限的修改1. chmod命令的介绍命令说明chmod修改文件权限chmod修改文件权限有两种方式:字母法数字法2. chmod 字母法的使用角色说明:角色说明uuser, 表示该文件的所有者ggroup, 表示用户组oother, 表示其他用户aall, 表示所有用户…

[carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题

1.获取车辆的Odometry原始信息 在carla中,通过订阅/carla/ego_vecle/odometry 可以查看车辆的全局位置信息,例如: > header: seq: 118872stamp: secs: 5946nsecs: 5720187frame_id: "map" child_frame_id: "ego_vehicle" pos…

替换子串得到平衡字符串[map计数+滑动窗口]

滑动窗口前言一、替换子串得到平衡字符串二、map计数滑动窗口总结参考文献前言 对于子串问题,确定左边界和有边界,就能确定一个子串,暴力取子串,时间复杂度O(n2)。有时挖掘内在规律的限定,或者问题所限定,…