【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.rhkb.cn/news/150964.html

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

相关文章

青少年近视问题不容小觑,蔡司用专业技术助力孩子视力健康发展

根据国家卫健委公布的数据显示,2022年全国儿童青少年近视率达到53.6%,青少年近视已成为社会普遍的眼健康问题。对家长来说,也需要提高对孩子眼视光健康重要性的认知,日常培养青少年良好的用眼习惯,并通过矫正视力的方式…

珠宝饰品商家为什么要做微信小程序开发

珠宝饰品商家为什么要做微信小程序开发? 随着互联网的发展,微信小程序作为一种新型的应用形态,正逐渐成为商家们关注的热点。对于珠宝饰品商家来说,开发微信小程序具有以下几个方面的优势: 一、获取更多流量 微信小程…

数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】

一、数据规范化的原理 数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异,需要进行标准化处理。将数据…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

课程1_第1周_测验题 目录:目录 第一题 1.“人工智能是新电力” 这个比喻指的是什么? A. 【  】人工智能为我们的家庭和办公室的个人设备供电,类似于电力。 B. 【  】通过“智能电网”,人工智能正在传递新一波的电力。 C. …

计算机竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…

springboot-admin整合及使用

0. 官方文档及示例 官方文档 示例代码:Spring-Boot-Admin-Demo 1. 概述 Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序。应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 SBA 中,然…

【nvm】Node Version Manager(NVM)安装配置以及使用(WIN版)

NVM 包管理工具 安装 访问NVM-Windows的GitHub页面:点击nvm-setup.exe。 根据提示进行下一步,文件位置选择自定义位置 验证安装是否成功 nvm version 。如果成功,它将显示NVM的版本号。 使用 nvm list available查看所有的可以被下载…

柯桥生活口语学习,英语中初次见面,除了Nice to meet you,还能说什么?

第一印象非常重要。所以当你第一次见到某人时,留下一个好印象很重要,尤其是当你面对一个重要的工作或者面对某个对你来说可能非常特别的人时。 下面我列出了一些最常用的说“很高兴见到你”的表达方法,也包括对方的回答,除了nice …

OLED透明屏技术在智能手机、汽车和广告领域的市场前景

OLED透明屏技术作为一种新型的显示技术,具有高透明度、触摸和手势交互、高画质和图像显示效果等优势,引起了广泛的关注。 随着智能手机、汽车和广告等行业的快速发展,OLED透明屏技术也在这些领域得到了广泛的应用。 本文将介绍OLED透明屏技…

网络安全总结

前言 本文内容主要摘抄网络规划设计师的教材和腾讯-SUMMER课堂,主要对网络安全进行简单梳理和总结 OSI安全体系 X轴表示8种安全机制,Y轴表示OSI7层模型,Z轴表示5种安全服务,图中X是水平,Y轴竖直,Z轴向外…

手边酒店V2独立版小程序 1.0.21 免授权+小程序前端安装教程

手边酒店小程序独立版酒店宾馆订房系统支持创建多个小程序,让每一个客户单独管理属于自己的小程序。系统无需授权,小程序端用户授权也是采用最新接口。 缺点不开源不影响使用,播播资源安装测试下来未发现或出现BUG情况,用户授权接…

03_Node.js模块化开发

1 Node.js的基本使用 1.1 NPM nodejs安装完成后,会跟随着自动安装另外一个工具npm。 NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。 2020年3月17日&…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师,我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分,对于每一个从事网络安全工作的人员来说,不仅需要掌握一定的技术能力,更需要具备全面的综合…

SSCI及SCI撰写|立足于审稿进行论文修改

一、回复审稿意见视角下的论文改进 (一)常见审稿意见分类(改进向) 意见分类研究主题方面真实案例研究主题研完没有提供新的信息This is clearly a students paper Although it is adequately written it offers no new informat…

超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告

RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时,也在构建一座座“自动化烟囱”。自动化工具尚未融为一体,协同价值没有得到释放。Gartner于2019年提出超自动化(Hyperautomation)概念,主要从技术组…

英特尔参与 CentOS Stream 项目

导读红帽官方发布公告欢迎英特尔参与进 CentOS Stream 项目,并表示 “这一举措不仅进一步深化了我们长期的合作关系,也构建在英特尔已经在 Fedora 项目中积极贡献的基础之上。” 目前,CentOS Stream 共包括以下特别兴趣小组(SIG&a…

第二证券:市盈率市净率市销率计算公式?

市盈率(Price-earnings ratio, P/E ratio)、市净率(Price-to-book ratio, P/B ratio)和市销率(Price-to-sales ratio, P/S ratio)都是出资者在分析公司股票时常常运用的点评方针。这些方针可以帮忙出资者判…

在Unity使用自定义网格生成一个球体

1.在Unity场景中新建一个空物体,在空物体上添加MeshRenderer和MeshFilter组件。 2.新建一个C#脚本命名SphereMesh,将脚本挂载到空物体上,如图: 运行场景就可以看到生成一个球体 全部代码如下: using UnityEngine;public class S…

ThreeJS-3D教学六-物体位移旋转

之前文章其实也有涉及到这方面的内容,比如在ThreeJS-3D教学三:平移缩放物体沿轨迹运动这篇中,通过获取轨迹点物体动起来,其它几篇文章也有旋转的效果,本篇我们来详细看下,另外加了tween.js知识点&#xff0…

类 ChatGPT 模型存在的局限性

尽管类ChatGPT模型经过数月的迭代和完善,已经初步融入了部分领域以及人们的日常生活,但目前市面上的产品和相关技术仍然存在一些问题,以下列出一些局限性进行详细说明与成因分析: 1)互联网上高质量、大规模、经过清洗…