HTTP
1. HTTP请求组成
-
请求行(Request Line):
- 请求方法:例如
GET
,POST
,PUT
,DELETE
等。 - 请求的 URI(Uniform Resource Identifier):请求的资源路径。
- HTTP 版本:例如
HTTP/1.1
。
- 请求方法:例如
-
请求头(Request Headers):
- 用于传递额外的请求信息和客户端自身描述,例如
User-Agent
,Host
,Accept
,Content-Type
等。
- 用于传递额外的请求信息和客户端自身描述,例如
-
空行:
- 请求头与请求体之间的分隔符。
-
请求体(Request Body):
- 可选,用于在 POST 或 PUT 请求中传递数据,如表单数据或 JSON。
GET /example HTTP/1.1 Host: www.example.com User-Agent: curl/7.64.1 Accept: */* <空行>
1.2 常用请求方法
GET
:请求服务器提供指定的资源。只查询/获取数据,不会影响服务器数据。(数据附在URL之后)POST
:向服务器提交数据(例如表单),通常用于创建资源或进行数据提交。(数据在body中传递)PUT
:上传指定资源的全部内容,通常用于更新资源。(数据在body中传递;幂等)DELETE
:请求删除指定资源。(数据在body中传递)
1.3 PUT和POST区别
- POST:更新资源,非幂等的。多次调用会产生不同的结果,比如:创建一个用户,由于网络原因或是其他原因多创建了几次,那么将会有多个用户被创建。
- PUT:更新资源,幂等的。PUT id/456则会创建一个id为456的用户,多次调用还是会创建的结果是一样的。
- 要求前端提供完整的资源对象。理论上说,如果你用了PUT,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空。
- PATCH:局部更新资源。假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可是某个页面里只想修改userName,这时只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。
1.4 Content-Type
Content-Type字段表示消息主体的编码方式。
-
application/x-www-form-urlencoded【原生Form表单】
-
最常见的 POST 提交数据的方式了。浏览器的原生表单上传,将表单内的数据转换为Key-Value, 而且键值对都是通过&间隔分开的。
-
只能上传键值对
-
如果不设置 enctype 属性,默认为application/x-www-form-urlencoded 方式提交数据。
-
-
multipart/form-data【支持文件上传的Form表单】
-
这也是常见的post请求方式,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。
-
它既可以上传键值对,也可以上传文件,甚至多个文件。
-
-
application/json【json字符串】
-
常见的post提交数据方式,上传的是json字符串,后端使用@RequstBody接收
-
-
application/octet-stream【二进制文件】
-
如application/pdf,指定了特定二进制文件的MIME类型。就像对于text文件类型若没有特定的子类型(subtype),就使用 text/plain。类似的,二进制文件没有特定或已知的 subtype,就使用 application/octet-stream,这是应用程序文件的默认值,一般很少直接使用 。
-
对于application/octet-stream,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)。
-
1.5 Http Header最大长度
默认情况下,tomcat(8.0版本)允许的http请求header的最大值是8024个字节(8KB)。https://cloud.tencent.com/developer/news/240970
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话