java http请求原理_HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一、web及网络基础

1、HTTP的历史

1.1、HTTP的概念:

HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

它是一个应用层协议,承载于TCP之上。由请求和响应构成,是一个标准的客户端服务器模型

1.2、HTTP的发展历史:

作为Web文档传输协议的HTTP,它的版本更新十分缓慢,目前只更新了三个版本:

HTTP/0.9:  1990年,并未建立标准

HTTP/1.0:  1996年5月,

HTTP/1.1:  1997年1月,目前主流的HTTP版本

1.2、HTTP在Web应用中的重要性:

HTTP协议是整个Web基础,许多应用都离不开对HTTP协议的认识:

WebService = HTTP + XML

Reset = HTTP + JSON

各种API的实现:HTTP + XML/JSON

采集、小偷站

QQ、迅雷等桌面应用软件

2、网络基础TCP/IP协议

2.1、协议的概念:

协议是指计算机通信网络中,两台计算机进行通信,所必须遵循的规定或规则。

计算机网络中有各种各样的协议,比如TCP协议、IP协议、HTTP协议、FTP协议等等,像这样把与互联网相关联的协议集合起来,就成为TCP/IP协议族。

1dd6c83bfb15c3dee413635dd546d597.png

2.2、TCP/IP的分层管理

应用层:负责处理特定的应用程序,如FTP、DNS、HTTP等。

传输层:对上层应用层提供处于网络连接中两台计算机之间的数据连接。该层有两种协议:TCP和UDP。

网络层:处理网络上流动的数据报。该层协议有:IP、ICMP、IGMP。

数据链路层:处理连接网络的硬件部分。包括操作系统、硬件设备驱动、网卡、光纤等。

2.3、TCP/IP通信传输流程

f6a3d0078a3e74367625ee9f780a6f1c.png

3、IP、TCP、DNS与HTTP的密切关系

3.1、IP协议的概念与作用

IP(Internet Protocol),网际协议,位于网络层

把各种数据包传送给对方。最重要的两个条件是IP地址和MAC地址(MAC地址基本不会改变,但可以通过软件改变)

ARP地址解析协议:根据IP地址查出MAC地址

3.2、TCP协议的概念与作用

TCP(Transmission Control Protocol),传输控制协议,位于传输层。

提供可靠的字节流服务,通过三次握手策略

3.3、TCP协议的三次握手过程

dc2ef2a842f7a4b4e76748abe9d57b9f.png

3.4、DNS的概念与作用

DNS(Domain Name System),域名解析系统,位于应用层。

提供域名到IP地址之间的解析服务

3.5、HTTP与TCP、IP和DNS的关系

HTTP生成请求报文需要通过DNS解析出IP找到服务器,通过TCP传输请求。

4、URI和URL的概念

4.1、URI的概念:

URI(Uniform Resource Identifier),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。

4.2、URL的概念:

URL(Uniform Resource Location),统一资源定位符,它描述一台特定服务器上某特定资源的特定位置。

4.3、URI与URL的关系:

URI用字符串标识某一互联网资源,而URL代表资源的地址,由此可见,URL是URI的子集。

URI由两个主要的子集URL和URN构成

4.4、URI的格式,由9部分构成

http:协议方案名,获取资源是要指定协议类型

user:pass:登录信息(认证),指定用户名和密码,可选。

www.example.com:服务器地址

80:端口号,可选

/home/index.html:文件路径

age=11:参数组件,为应用程序提供访问资源所需的附加信息

查询字符串:针对已指定的文件路径内的资源,可以使用查询字符串穿入任意参数,可选(分页case)

mask:片段标识符,通常可标记出已获取资源中的子资源(文档内的某一个位置),可选

二、细说HTTP的报文格式和工作流程

1、HTTP请求报文和响应报文的格式

1.1、HTTP事务和报文流的概念

HTTP事务 = 请求命令 + 响应结果

c15ac72b5869e85dbf4726243c4917a4.png

1.2、请求报文的格式(抓包工具,fiddler)

请求行:   请求方式(大写)    请求URL    版本

请求首部: 名: 值

空行:

报文主体:

请求首部也叫消息头,其中字段名不区分大小写,习惯驼峰式,字段可按任意顺序排列,有些可接受多个值选项,有些字段可出现多次

1.2.1、请求方式:GET、POST、HEAD、OPTIONS、DELETE、PUT

默认发GET请求,如在浏览器直接输入地址访问,点超链接访问都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。POST与GET方式的区别:传递参数的方式;传递数据量大小

1.2.2、常用请求头:

Accept: 浏览器可接受的MIME类型  */* (大类型)/(小类型)

Accept-Charset:告诉服务器,浏览器支持哪种字符集

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

Accept-Language:浏览器所希望的语言种类

Host:初始URL中的主机和端口

Referer:包含一个URL,用户从该URL代表的页面发出访问当前请求的页面

Content-Type:内容类型

If-Modified-Since:值为一个GMT标准时间,如果在该时间到目前,请求文件没有更改,则服务器告诉浏览器可以直接从缓存中读取文件

User-Agent:用户的浏览器类型,操作系统等信息

Content-Length:表示请求消息正文的长度

Connection:如果值为Keep-Alive,表示需要持久连接,HTTP 1.1默认进行持久连接

Cookie:这是最重要的请求头信息之一,但是由于该技术存在安全隐患等原因,该功能被Session取代

Date:值为GMT时间,表示请求时间

1.3、响应报文的格式

响应行:   协议版本      状态码     原因短语

响应首部:

空行:

报文主体:

1.3.1、状态码:用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类:

057bbd38d85c70fc4fa727c2503b2568.png

1.3.2、常用状态码:

200:正常

301:永久重定向

302/307:临时重定向

304:未修改,可以使用缓存,无需再次修改

404:资源找不到

500:服务器内部错误

关于更多状态码,请参考博客:

1.3.3、常用响应头:

Server:apache tomcat 指示服务器的类型

Content-Encoding: gzip 服务器发送数据采用的编码类型

Content-Length:80 告诉浏览器正文的长度

Content-Language:zh-cn 服务器发送的文本的语言

Content-Type:text/html;charset=GB2312 服务器发送内容的MIME类型

Last-Modified:GMT时间 文件最后修改的时间

Refresh:1;url=http://www.baidu.com 指示客户端刷新频率,单位是秒

Content-Disposition:attachment;filename=aaa.zip 指示客户端下载文件

Set-Cookie:SS=Q0=5Lb_nQ;path=/search 服务器发送的Cookie

Expires: GMT时间  表示过期时间,其值为0或-1表示禁止缓存

Cache-Control:no-cache(1.1) 表示进制缓存

Connection:close/Keep-Alive

Date: GMT时间

2、HTTP的工作流程

2.1、整个流程步骤

db572edd2826248c016498f7778a0c23.png

2.2、域名解析过程

44734131ea338d0af8e2c430e1de7156.png

2.3、三次握手过程

2.4、发起HTTP请求

2.5、响应HTTP请求并得到HTML代码

2.6、浏览器解析HTML代码

2.7、浏览器对页面进行渲染呈现给用户

3、HTTP1.0与HTTP1.1的区别

3.1、HTTP1.0的基本运行方式:

一个事务分为四个过程:建立连接、浏览器发出请求信息、服务器发出响应信息、关闭连接。每次连接只处理一个请求和响应。对每一个文件的访问,浏览器与服务器都要建立一次单独的连接

3.2、HTTP1.1的特点

在一个TCP连接上可以传送锁哥HTTP请求和响应

多个请求和响应过程可以重叠

增加了更多的请求头和响应头,比如Host、If-Unmodified-Since请求头等

4、使用Telnet连接的实例

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。为用户提供了在本地计算机上完成远程主机工作的能力。在终端电脑上使用telnet程序,用它连接到服务器

三、Java中的HTTP通信

1、使用HTTP的Get方式读取网络数据

class ReadByGet extendsThread{

@Overridepublic voidrun(){

URL url= new URL("网址");//如果有参数,在网址中携带参数

URLConnection conn =url.openConnection();

InputStream is=conn.getInputStream();

InputStreamReader isr= newInputStreamReader(is);

BufferedReader br= newBufferedReader(isr);

String line;

StringBuilder builder= newStringBuilder();while((line=br.readLine())!=null){

builder.append(line);

}

br.close();

isr.cloae();

is.close();

System.out.println(builder.toString);

}

}public static voidmain(String[] args){newReadByGet().start();

}

2、使用HTTP的Post方式与网络交互通信

Class ReadByPost extendsThread{

@overridepublic voidrun(){

URL url= new URL("网址");

HttpURLConnection conn=(HttpURLConnection)url.openConnection();

conn.addRequestProperty("encoding","UTF-8");

conn.setDoInput(true);

Conn.setDoOutput(true);

conn.setRequestMethod("POST");

OutputStream os=conn.getOutputStream();

OutputStreamWriter osw= newOutputStreamWriter(os);

BufferedWriter bw= newBufferedWriter(osw);

bw.write("向服务器传递的参数");

bw.flush();

InputStream is=conn.getInputStream();

InputStreamReader isr= newInputStreamReader(is);

BufferedReader br= newBufferedReader(isr);

String line;

StringBuilder builder= newStringBuilder();while((line = br.readLine())!=null){

builder.append(line);

}//关闭资源

System.out.println(builder.toString);

}

}public static voidmain(){newReadByPost().start();

}

3、使用HttpClient进行Get方式通信

apache有一个HttpClient包

class Get extendsThread{

HttpClient client=HttpClients.createDefault();

@Overridepublic voidrun(){

HttpGet get= new HttpGet("http://www.baidu.com");

HttpResponse response=client.execute(get);

HttpEntity entity=response.getEntity();

String result= EntityUtils.toString(entity,"UTF-8");

System.out.println(result);

}

}public static voidmain(String[] args){newGet().start();

}

4、使用HttpClient进行Post方式通信

class Post extendsThread{

HttpClient cilent=HttpClients.CreateDefault();

@Overridepublic voidrun(){

HttpPost post= new HttpPost("网址");//设置要传的参数

List parameters = newArratList();

parameters.add(new BasicNameValuePair("key","value"));

post.setEntity(new UrlEncodeFormEntity(parameters,"UTF-8"));

HttpResponse response=client.execute(post);

HttpEntity entity=response.getEntity();

String result= EntityUtils.roString(entity,"UTF-8");

System.out.println(result);

}

}

main(){newPost().start();

}

Canoe主要功能的详细介绍 CANoe是德国Vetor公司推出的一款用于总线开发的设备,全程为CAN open environment。后来随着总线技术的发展,CANoe不仅限于CAN类型的总线开发,还包含LIN、FlexRay、MOST和以太网等开发。在车载网络和ECU开发、测试和分析方面,CANoe几乎长期占据着垄断地位,当然是因为其强大的功能性了。目前用这个工具的主要是整车厂和供应商的网络设计工程是、开发工程师和测试工程师。小编当时安装CANoe的时候也是花了一定的时间和精力,好在没有崩溃。 阅读详情

相关推荐

使用patchelf与独立glibc解决Cursor/VSCode远程开发环境兼容性问题

本文针对Cursor/VSCode远程开发连接Ubuntu 18.04、CentOS 7等老系统时因GLIBC版本过低导致的兼容性问题,提供了一套安全高效的解决方案。核心思路是通过编译独立的glibc-2.28环境,并利用patchelf工具修改远程服务端的node可执行文件,使其优先使用新版glibc,从而在不升级系统库、不影响系统稳定性的前提下,完美解决远程开发环境“罢工”的难题。

weixin_28835789的博客 552

http 连接池 java_HttpClient 连接池管理

随着微服务的流行,服务之间的http调用越来越多。在java里面我们可以使用httpclient这个开源工具类来进行处理,但若使用不当,可能性能会比较差,尤其是连接池是否能正常使用。接下来会详细分析下httpclient的连接池原理。1. 使用httpclient的好处1)、降低延迟:如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手...

weixin_32126555的博客 2556

麦当劳app之sign逆向分析

摘要:本文分析了麦当劳APP请求参数sign的逆向过程。通过抓包发现32位sign参数疑似MD5加密,使用frida-trace工具跟踪CC_MD5函数验证其为标准MD5算法。加密参数包含时间戳、token、版本号等固定和动态字段,拼接后经MD5加密生成sign。文章提供了JS和Python两种实现方案,包含完整的请求头参数和加密逻辑,最终成功获取API响应数据。该研究仅用于逆向技术学习,展示了移动应用常见加密参数的逆向分析方法。

佛系更新... 2438

JAVA: httpclient 详解——第二章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者; httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,

1672

matlab锅炉 pid仿真,基于Matlab锅炉仿真.doc

基于Matlab锅炉仿真内蒙古科技大学MATLAB课程设计任务书2012题 目:锅炉汽包水位控制系统学生姓名:林三彪学 号:0967112127专 业:测控技术与仪器班 级:2009-1指导教师:梁 丽摘 要锅炉是化工、炼油、发电、造纸和制糖等工业生产过程中必不可少的重要动力设备。锅炉往往成了不少工厂不可缺少的一部分,因而,对锅炉设备中的自动控制系统进行分析研究是必要的...

weixin_29133981的博客 1096

中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据,气候数据

中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据 b_china_mon_avg_data_pressure月平均气象 b_china_mon_avg_data_rain月平均降水 b_china_mon_avg_data_rhu月平均相对湿度 b_china_mon_max_data_rain月最大降水 b_china_mon_max_min_data_tem月最高温度最低温度 b_china

无极低码 2万+

【JavaWeb】Http请求报文详解

【JavaWeb】Http请求报文详解!

runofsun的博客 1856

【TC3xx芯片】TC3xx芯片看门狗复位的默认行为分析

TC3xx芯片看门狗复位的默认行为分析

qq_36056498的博客 351

HttpClient使用详解

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因...

cihongmo6452的博客 1090

CKS-CN考试之路----04

根据上面信息我们知道,这个pod运行在default命名空间下,pod名字为cpu-77cd5ddcbf-bvb8w。可以从/etc/falco/falco_rules.yaml中获得相关内容,大概在文件的460行左右.编辑/etc/falco/falco_rules.local.yaml。7c688a8bfd69即是我们想要获得的docker id。将行为不当 Pod 的 Deployment 缩放为零副本。根据我们刚才定义的rule生成报告。访问/dev/mem 的 Pod。那么如果考试记不住怎么办?

Q先生 602

C++(Qt)软件调试---gdb调试入门用法(12)

学习GDB可以帮助程序员更好地调试程序,找到程序中的错误和问题,提高程序的质量和稳定性。 在开发大型软件时,程序中可能存在许多错误和问题,这些问题可能会导致程序崩溃或者出现不可预期的行为。 使用GDB可以帮助程序员更快地找到这些问题,并且提供一些调试工具来帮助程序员更好地理解程序的行为。

mahuifa的博客 5552

JavaEE初阶(11)HTTP 协议(发展历程、报文格式、URL、HTTP请求详解、HTTP 响应详解、构造HTTP请求、form 表单构造、AJAX的方式构造)

JavaEE初阶(11)HTTP 协议(HTTP发展历程、报文格式、URL、HTTP请求详解、HTTP 响应详解、构造HTTP请求、form 表单构造、AJAX的方式构造)

m0_74343467的博客 1万+

芒果YOLOv8改进160:姿态估计Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

芒果YOLOv8改进159:OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 812

HTTP协议报文、工作原理及Java中的HTTP通信技术详解

博客园 首页 新随笔 联系 管理 订阅 随笔- 31 文章- 0 评论- 25 ...

158

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java报文解析_HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一、web及网络基础1、HTTP的历史1.1、HTTP的概念:HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它是一个应用层协议,承载于TCP之上。由请求和响应构成,是一个标准的客户端服务器模型1.2、HTTP的发展历史:作为Web文档传输协议的HTTP,它的版本更新十分缓...

weixin_35971787的博客 1194

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java http通讯协议_学习——HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一、web及网络基础1、HTTP的历史1.1、HTTP的概念:HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它是一个应用层协议,承载于TCP之上。由请求和响应构成,是一个标准的客户端服务器模型1.2、HTTP的发展历史:作为Web文档传输协议的HTTP,它的版本更新十分缓...

weixin_42515058的博客 495

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

学习——HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一、web及网络基础 1、HTTP的历史 1.1、HTTP的概念: HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。 它是一个应用层协议,承载于TCP之上。由请求...

weixin_34106122的博客 130

http协议报文

HTTP协议报文、工作原理及Java中的HTTP通信技术详解 一、web及网络基础       1、HTTP的历史            1.1、HTTP的概念:                 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

啦啦啦的博客 365
上一篇: java get set方法小写_JavaBean中的get/set 的命名规范
下一篇: eclipse如何搜索java文件内容_eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)(图解)...
非流
博客等级 码龄8年 34粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值