【JavaEE】_HTTP请求与HTTP响应

目录

1. HTTP协议

2. HTTP请求

2.1 HTTP请求首行

2.2  URL

2.3 HTTP方法

2.3.1 GET请求

2.3.2 POST请求

2.3.3 GET与POST的区别

2.3.4 其他方法

2.4 请求报头header

2.4.1 Host:

2.4.2 Content-Length与Content-Type:

2.4.3 User-Agent(简称UA)

2.4.4 Referer

2.4.5 Cookie

2.5 请求正文body

3. HTTP响应

3.1 响应首行

3.2 报头header

3.3 空行

3.4 正文body


1. HTTP协议

1. HTTP协议一般被称为“超文本传输协议”,即不止可以传输文本,还可以传输图片、音频、视频等二进制数据,是一个应用层协议

2. 浏览器获取到网页就是基于HTTP,可以将HTTP理解为浏览器与服务器之间的交互桥梁,最常见的是HTTP1.1。

3. 应用层协议需要基于传输层协议向上层提供服务,HTTP就是基于TCP协议实现的。

4. 当我们在浏览器中输入一个网址(URL)时,其实就是浏览器给该网址的服务器发送了一个HTTP请求,然后该网址的服务器返回一个HTTP响应,浏览器再把得到的HTML等数据显示出来,即进行渲染;

5. HTTP协议是一个行文本协议(文本与二进制对应),可以直接用记事本等文本编辑器直接打开查看的;

6. HTTP协议报文格式可以借助一些第三方工具查看,这些工具称为“抓包”工具,如:fiddler,打开后可在左栏查看到当前电脑上某个程序使用HTTP和服务器交互的过程:

注:(1)fiddler本质是一个代理程序,可能会与别的代理程序冲突,故而在使用fiddler时需要关闭其他的代理程序,包括一些浏览器插件;

代理分为正向代理与反向代理,其中代表着客户端的代理称为正向代理,代表着服务器的代理称为反向代理;

(2)要想正确抓包还需要开启https功能,https是基于http的进化版协议,当下互联网上绝大部分的服务器都是https的,fiddler默认不能抓包https的包,需要手动启用https并安装证书;

2. HTTP请求

HTTP请求包括四个部分:

(1)首行; (2)请求头(header); (3)空行; (4)正文(body);

如果是GET请求,没有body;如果是POST请求,一般有body

2.1 HTTP请求首行

以在浏览器中访问bilibili为例,抓包结果中,首行内容如下:

首行包括三个部分:

(1)GET:是HTTP的方法;

(2)中间部分是URL(唯一资源定位符,标识互联网上唯一的资源的位置),即俗称的网址;

注:URI是唯一资源标识符,是一个身份标识,为了和别的资源区分开,实际上URL也可以起到身份标识的效果,故而URL也可以视为是一个URI;

(3)HTTP/1.1:是HTTP的版本号;

2.2  URL

因特网标准RFC1738规定URL的详细情况如下:

即: 协议名称://ip:端口号/路径?查询字符串

注:(1)TCP、IP、UDP等协议格式都是RFC系列文档规定的;

(2)URL不是HTTP专属的,很多协议都可以使用URL;

(3)URL中某些部分是可以省略的,以在浏览器页面访问bilibili为例,抓包到的url如下:

① 其中服务器端口号就被省略了,在端口号被省略时,浏览器会提供默认端口,

对于http来说,默认端口是80;

对于https来说,默认是443,

即访问https://www.bilibili.com与访问https://www.bilibili.com:443是相同的;

② / 也是目录,只是非常简短,代表HTTP服务器的根目录,/管理的根目录可以是系统上的任何一个目录;

(可以理解为HTTP服务器是系统上的一个进程,委托这个服务器管理系统上的一个特定目录,这个目录里的资源都可以让外部进行访问)

2.3 HTTP方法

常用的HTTP方法如下:

方法说明
GET获取资源
POST传输实体主体
PUT传输文件
HEAD获得报文首部
DELETE删除文件
OPTIONS询问支持的方法
TRACE追踪路径
CONNECT要求用隧道协议连接代理
LINK建立和资源之间的联系
UNLINE断开连接关系

注:(1)方法描述了这次请求的语义,即要进行的操作;

(2)GET方法最常用,其次是POST方法,其余方法使用频率都远小于这两中方法;

2.3.1 GET请求

1. 在浏览器地址栏里直接输入URL或点击收藏夹就会触发GET请求;

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

3. 通过JS也可以构造GET请求;

仍以访问网页版bilibili为例:

2.3.2 POST请求

1. 登录操作进行跳转时会涉及到POST;

2. 上传文件时也会使用到POST;

注:(1)POST的body部分的内容与格式都是程序员自行定义的;

2.3.3 GET与POST的区别

1.信息存放差异:

GET也可以给服务器传递一些信息,GET传递的信息一般都是放在query string,POST传递消息则是通过body

2. 语义差异(数据流动方向差异):

GET请求一般用于从服务器获取数据,POST请求一般用于给服务器提交数据

3. GET通常会被设计成幂等的,但POST则不要求幂等

4. GET是可以被缓存的,POST一般不能被缓存

注:① 以上区别只是习惯用法,GET也可以有body,POST也可以有query string,GET也可以给服务器提交数据,POST也可以从服务器获取数据等等;

② 其实GET和POST就没有本质区别,在大部分场景下彼此之间都可以彼此替代,但在使用习惯上会有差异;

③ 幂等可以理解为相同的输入得到的结果也是确定的;

④ 缓存即保存请求的结果,方便下次请求直接取缓存结果从而节省时间;

2.3.4 其他方法

(1)PUT和POST相似,只是具有幂等特性,一般用于更新;

(2)DELETE删除服务器指定资源;

(3)OPTIONS返回服务器所支持的请求方法;

(4)HEAD类似于GET,只不过响应体不返回,只返回响应头;

(5)TRACE回显服务器端收到的请求,测试的时候会使用到该方法;

2.4 请求报头header

header的整体格式是“键值对”结构,一行是一个键值对,这些键值对都是HTTP事先定义好,有特殊含义的。

常见的报头种类有:

2.4.1 Host:

Host表示服务器主机的地址和端口;

注:此处的地址和端口是用来描述最重要访问的目标,大概率与URL相同,但也有可能不同

2.4.2 Content-Length与Content-Type:

Content-Length:表示body中的数据长度;

Content-Type:表示请求的body中的数据格式;

常见选项:

1. Content-Type:application/json;charset=UTF-8,数据为json格式,body格式形如:

{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16
a861fa2bddfdcd15"}

2.Content-Type:application/x-www-form-urlencoded;charset=UTF-8,form标签构造的body格式就是该种类型,body格式如下:

title=test&content=hello

注:如果是GET请求,没有body,则请求中没有以上两个字段;

如果是POST请求,有body,则请求中必须有该两个字段;

2.4.3 User-Agent(简称UA)

1. 表示用户浏览器或操作系统的版本(属性);

2. 如今的UA主要用于区分PC和移动;

2.4.4 Referer

1. 表示当前页面的来源,即当前页面是由哪个页面跳转过来的;

2. 不一定有,如果是直接通过地址栏输入地址,或者直接点击收藏夹等进行访问,就没有Referer;

2.4.5 Cookie

1. Cookie本质是浏览器给网页提供的本地存储数据的机制;

为了保证安全,网页默认是不允许访问计算机硬盘的。

Cookie即对浏览器访问硬盘做出了明确的限制;

2. Cookie是通过键值对方式组织数据的,故而也可以使用Cookie存储少量数据;

3. Cookie中具体存储的内容是程序员自定义的部分;

4. Cookie中的数据来自于服务器,服务器会通过HTTP响应的报头部分(Set-Cookie字段)。

即服务器决定浏览器的Cookie要存什么;

5. Cookie可以认为是存在于浏览器中的,本质上是存在于硬盘上

Cookie在存储的时候,是按照浏览器+域名 的维度来进行细分的,即不同的浏览器存各自的Cookie,同一个浏览器不同的域名也对应着不同的Cookie;

Cookie中的内容不只有键值对,还有过期时间,过期则删除,比如一些网站,在第一次登录之后,定期自动记录登录状态,若超过其设定的过期时间,则删除;

6. Cookie最终要回到服务器

同一时刻存在很多客户端,客户端会通过Cookie来保存客户使用的中间状态,当客户端访问浏览器时,就会自动把Cookie内容带入到请求中,服务器就可以获取到当前客户端的状态了;

2.5 请求正文body

正文中的内容格式和header中的Content-Type密切相关,常见的正文类型有:

(1)application/x-www.form-urencoded:类似于query string的键值对组织方式;

(2)multipart/form-data;

(3)application/json:最为常见的数据格式;

3. HTTP响应

响应也是由四个部分构成的:

3.1 响应首行

响应首行:版本号+状态码+状态码描述

HTTP状态码描述了这次响应的结果(比如成功、失败,以及失败原因等);

1. HTTP状态码有:

(来源:搜狗百科)

2. 常见HTTP状态码有:

(1)200 OK, 表示访问成功

(2)404 Not Found, 表示访问的资源不存在,在服务器上查询无果

如访问:

页面显示:

也可在fiddler中查看:

(3)403 Forbidden:无访问权限,访问被拒绝

(4)302 Move temporarily:重定向

重定向类似于呼叫转移,在登录页面302非常常见,用于实现登陆成功后自动跳转到主页;

302这样的响应报文中会在header中带有一个Location属性,通过这个属性来描述要跳转到哪个新的地址;

注:注意区别重定向与请求转发:

① 请求转发是servlet/spring里提供的机制;重定向是HTTP里提供的机制;

② 请求转发只能在该服务器内部的资源之间转发,重定向可以重定向到外部资源,即可跳转到别的网站;

③ 请求转发只有一次交互,更高效;重定向需要进行两次交互;

(5)500系列:服务器内部错误

如:504 gateway timeout:请求超时等等;

注:gateway即网关,是一个网络的出入口,通常也用来指代一个机房的入口服务器,192.168.1.1这种ip一般是网关ip;

可总结如下:

类别原因短语
1XXInformational(信息性状态码)接受的请求正常处理
2XXSuccess(成功状态码请求正常处理完毕
3XXRedirection(重定向状态码需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码服务器无法处理请求
5XXServer Error(服务器错误状态码服务器处理请求出错

注:HTTP状态码是RFC标准明确规定的,不允许自定义;

3.2 报头header

HTTP响应的报头也是键值对格式

3.3 空行

与HTTP请求相同,空行是header的结束标记;

3.4 正文body

HTML的页面内容;

HTTP请求与响应总结如下:

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

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

相关文章

王道考研计算机组成原理——计算机硬件的基础知识

计算机组成原理的基本概念 计算机硬件的针脚都是用来传递信息,传递数据用的: 服务程序包含一些调试程序: 计算机硬件的基本组成 控制器通过电信号来协调其他部件的工作,同时负责解析存储器里存放的程序指令,然后指挥…

数据结构--》数组和广义表:从基础到应用的全面剖析

数据结构为我们提供了组织和处理数据的基本工具。而在这个广袤的数据结构领域中,数组和广义表是两个不可或缺的重要概念。它们作为线性结构的代表,在算法与应用中扮演着重要的角色。 无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可…

十二、Django之模板的继承+用户列表

模板的继承 新建layout.html&#xff1a; {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"{% static plugins…

计算机毕设 大数据B站数据分析与可视化 - python 数据分析 大数据

文章目录 0 前言1 课题背景2 实现效果3 数据获取4 数据可视化5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做…

阿里云轻量应用服务器有月流量限制吗?

阿里云轻量应用服务器限制流量吗&#xff1f;部分限制&#xff0c;2核2G3M和2核4G4M这两款轻量应用服务器不限制月流量&#xff0c;其他的轻量服务器套餐有月流量限制。 腾讯云轻量应用服务器价格便宜&#xff0c;活动页面&#xff1a;aliyunbaike.com/go/tencent 细心的同学看…

第四课 递归、分治

文章目录 第四课 递归、分治lc78.子集--中等题目描述代码展示 lc77.组合--中等题目描述代码展示 lc46.全排列--中等题目描述代码展示 lc47.全排列II--中等题目描述代码展示 lc226.翻转二叉树--简单题目描述代码展示 lc98.验证二叉搜索树--中等题目描述代码展示 lc104.二叉树的最…

八大排序详解(默认升序)

一、直接插入排序 直接插入排序&#xff1a;直接插入排序就是像打扑克牌一样&#xff0c;每张牌依次与前面的牌比较&#xff0c;遇到比自己大的就将大的牌挪到后面&#xff0c;遇到比自己小的就把自己放在它后面(如果自己最小就放在第一位)&#xff0c;所有牌排一遍后就完成了排…

GitHub工具之云资产管理

文章目录 0x01 介绍0x02 软件架构0x03 下载地址0x04 更新记录0x05 实现功能0x06 使用截图1、云存储工具-资产列表2、云存储工具-阿里云3、云存储工具-七牛云4、云存储工具-腾讯云5、云存储工具-亚马逊6、云存储工具-京东云7、云存储工具-金山云8、云存储工具-其他9、云存储工具…

【Kotlin精简】第1章 基础类型

1 Kotlin基础类型 Kotlin中&#xff0c;我们可以调用任何变量的成员函数和属性&#xff0c;从这个角度来说&#xff0c;一切皆对象。某些类型可以有特殊的内部表现。例如&#xff1a;数字、字符和布尔型在运行时可以表现为基础类型&#xff08;primitivetypes&#xff09;。 …

Stable diffusion的架构解读(本博客还是以unet架构为主)

博客只是简单的记录一下自己学的&#xff0c;基于自己的一些情况&#xff0c;所以简单了一些只是将来忘记&#xff0c;用来回顾用。 论文的大体框架 unet结构位于 unet会接受prompt特征、latent特征、和t时间步特征&#xff0c;最后生成新一轮的特征 可以参考知乎大佬htt…

Android之App跳转其他软件

文章目录 前言一、效果图二、实现步骤1.弹框xml(自己替换图标)2.弹框utils3.两个弹框动画4.封装方便调用5.调用6.长按事件方法7.跳转步骤8.复制utils 总结 前言 最近遇到一个需求&#xff0c;就是App内大面积需要长按复制并跳转指定App&#xff0c;没办法&#xff0c;只能埋头…

大语言模型之十六-基于LongLoRA的长文本上下文微调Llama-2

增加LLM上下文长度可以提升大语言模型在一些任务上的表现&#xff0c;这包括多轮长对话、长文本摘要、视觉-语言Transformer模型的高分辨4k模型的理解力以及代码生成、图像以及音频生成等。 对长上下文场景&#xff0c;在解码阶段&#xff0c;缓存先前token的Key和Value&#…

SpringCloud Alibaba - Sentinel 高级玩法,修改 Sentinel-dashboard 源码,实现 push 模式

目录 一、规则持久化 1.1、什么是规则持久化 1.1.1、使用背景 1.1.2、规则管理的三种模式 a&#xff09;原始模式 b&#xff09;pull 模式 c&#xff09;push 模式 1.2、实现 push 模式 1.2.1、修改 order-service 服务&#xff0c;使其监听 Nacos 配置中心 1.2.2、修…

RocketMQ 5.0 新版版本新特性总结

1 架构变化 RocketMQ 5.0 架构上的变化主要是为了更好的走向云原生 RocketMQ 4.x 架构如下&#xff1a; Broker 向 Name Server 注册 Topic 路由信息&#xff0c;Producer 和 Consumer 则从 Name Server 获取路由信息&#xff0c;然后 Producer 根据路由信息向 Broker 发送消…

2023年中国石化行业节能减排发展措施分析:用精细化生产提高生产效率,降低能耗[图]

2022年&#xff0c;我国石油和化工行业克服诸多挑战取得了极其不易的经营业绩&#xff0c;行业生产基本稳定&#xff0c;营业收入和进出口总额增长较快&#xff0c;效益比上年略有下降但总额仍处高位。2022年&#xff0c;我国石油化工行业市场规模为191761.2亿元&#xff0c;同…

macbook电脑磁盘满了怎么删东西?

macbook是苹果公司的一款高性能笔记本电脑&#xff0c;受到很多用户的喜爱。但是&#xff0c;如果macbook的磁盘空间不足&#xff0c;可能会导致一些问题&#xff0c;比如无法开机、运行缓慢、应用崩溃等。那么&#xff0c;macbook磁盘满了无法开机怎么办&#xff0c;macbook磁…

Qt实现 图片处理器PictureEdit

目录 图片处理器PictureEdit1 创建工具栏2 打开图片3 显示图片4 灰度处理5 颜色反转6 马赛克 图片处理器PictureEdit 创建工程&#xff0c;添加资源文件 1 创建工具栏 widget.h中 #include <QWidget> #include<QPixmap> #include<QFileDialog> #include&l…

【赠书活动】如何让AI在企业多快好省的落地

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【LeetCode: 2034. 股票价格波动 | 有序表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

[极客大挑战 2019]BabySQL 1

#做题方法# 进去之后做了简单的注入发现有错误回显&#xff0c;就进行注入发现过滤了sql语 后面进行了双写and payload&#xff1a; ?usernameadmin%27%20aandnd%20updatexml(1,concat(0x7e,dAtabase(),0x7e,version()),1)%20--&passwordadmi 接下来又 ?usernameadm…