【JavaWeb】Http请求与响应

Http 请求与响应

一、Http 请求格式

1、请求行

请求行位于HTTP请求的第一行,包含了请求方式、请求地址、请求协议与版本等信息。

  • GET请求的参数还会以「键值对」的形式拼接在URL之后(POST请求的参数在请求体中)
# 格式
		POST:请求方式 请求地址 请求协议/版本号
		GET: 请求方式 请求地址?请求参数 请求协议/版本号 
# 举例
		POST /app/static/login.html HTTP/1.1
		GET  /app/static/login.html?username=jack&password=123 HTTP/1.1

2、请求头

请求头跟在请求行之后,以「键值对」的形式出现,包含了关于客户端、请求、支持的内容等信息。

# 格式
		key: value
			key   --> 请求头名称,固定值。
			value --> 对应的属性值,动态变化。

# 举例
- Host: localhost:8080		
		访问的服务器地址(域名+端口)

- Accept: application/json, text/plain, */*
		告诉服务端,客户端能够接受的响应内容类型。(MIME类型。*/* 表示客户端接受任何类型的响应)

- Content-Type: application/json;charset=UTF-8
		告诉服务端,客户端发送的请求体的数据类型。(MIME类型。charset 指定数据的字符编码)

- Content-Length: 95
		指示消息体的字节大小,以确保数据传输的完整性和正确解析。

- Origin: http://localhost:1024
		告知服务端请求来源的站点,仅包含了请求的协议、域名、端口,不包括路径和查询参数。(一般用于跨域请求)

- Referer: http://localhost:1024/login?redirect=%2Findex
		上一次访问的地址,包含了请求的页面的完整 URL(一般用于防盗链)

- Connection: keep-alive
		长连接(http1.1协议)

- Upgrade-Insecure-Requests: 1
		客户端支持https加密协议  

- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) Chrome/63.0 Safari/537.36
		浏览器兼容性,服务器会根据用户的浏览器版本,返回响应的数据(上面的是谷歌浏览器示例)

3、请求体(post请求才有)

请求体 包含了客户端向服务器发送的数据,例如表单数据、JSON数据等。

  • 请求体的内容格式通常由请求头中的Content-Type字段指定。

1)raw

# 使用场景
	发送原始文本数据。

# 数据形式
	txt、json、xml、html等原始文本格式(常用于json)

# 示例(json)
    {
        "name" : "jack",
        "age"  : 21,
        "ids"  : [1,2,3]
    }

# Content-Type
	txt  - text/plain
	html - text/html
	xml  - text/xml 或 application/xml
	json - application/json

2)x-www-form-urlencoded

# 使用场景
	表单提交(常规表单)

# 数据形式
	键值对编码,每个键值对用 & 分隔,值经过 URL 编码
	如果表单数据包含特殊字符(如空格、&、/ 等),它们会被编码成 %20、%26、%2F 等。

# 示例
	name=jack&age=21&ids=1,2,3

# Content-Type
	application/x-www-form-urlencoded

3)multipart/form-data

# 使用场景
	文件上传 或 复杂表单提交。

# 特点
	支持文件和表单字段混合,支持二进制数据传输,可以上传多个文件。

# 数据形式
	这种编码格式在发送文件时,客户端将数据分割成多个部分,每个部分都有自己的头部,其中包含该部分的数据类型或其他相关信息。
	每个部分之间用分隔符(boundary)隔开。

# 示例
    ----------------------------------------------------7de1a433602ac
    Content-Disposition: form-data; name="name"
    jack
    ----------------------------------------------------7de1a433602ac
    Content-Disposition: form-data; name="file"; filename="photo.jpg"
    Content-Type: image/jpeg
    (binary data of the file)
    ----------------------------------------------------7de1a433602ac--

# Content-Type
	multipart/form-data

4)binary

# 使用场景
	传输图像、音频、视频等二进制文件。

# 数据形式
	原始二进制数据,没有特定的编码方式。(一次只能上传一个文件)

# Content-Type
	application/octet-stream

5)对比

x-www-form-urlencoded 对比 multipart/form-data

特点 x-www-form-urlencoded multipart/form-data
编码格式 键值对形式 每个表单字段和文件作为独立部分,使用边界分隔
适用场景 纯文本数据,简单表单提交 表单包含文件上传,混合文本和文件数据
文件上传 不支持文件上传 支持文件上传(如图片、视频等)
表单字段 仅支持文本字段(如字符串、数字、日期等) 支持文本字段、文件字段以及其他类型的字段
浏览器默认提交方式 是(默认表单提交方式) 否(需要在表单中指定 enctype="multipart/form-data"
数据编码 URL 编码(特殊字符转义) 每个部分单独编码,文件数据以二进制流传输
适用大小限制 数据量较小,浏览器对 URL 编码有长度限制 数据量大,不受 URL 长度限制,适合上传大文件
复杂度 简单,易于处理 较复杂,需要解析多部分,特别是二进制数据

multipart/form-data 对比 binary

特点 multipart/form-data binary
编码方式 使用边界分隔多个部分,字段与文件都分为独立部分 文件数据直接作为二进制数据发送
适用场景 用于 Web 表单提交,支持文本和文件混合提交 用于单一文件上传,通常通过 API 或 cURL 上传
支持数据类型 支持文本和文件数据的混合提交 只支持文件数据上传,不支持文本字段<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scj1022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值