HTTP请求

106 阅读2分钟

1. 请求方式与数据格式

get请求和post请求

区别: get请求把数据放在URI后面,post请求是把数据放到请求体中

image.png

格式细节:

  • 参数分成名字和值,中间用 = 分隔
  • 多个参数使用 & 进行分隔 (name='张三'&age=19)
  • 【张】等特殊字符需要用 encodeURIComponent() 编码为 【%E5%BC%A0】后才能发送

特殊字符需进行URL编码: encodeURIComponent(xxx)

image.png

post请求的content-length需要根据下方请求体变化

image.png

json 请求示例

 POST /test3 HTTP/1.1
 Host: localhost
 Content-Type: application/json
 Content-Length: 25
 ​
 {"name":"zhang","age":18}

json 对象格式

使用utf-8编码 ,汉字若求长度,一个+2

 {"属性名":属性值}

其中属性值可以是

  • 字符串 ""
  • 数字
  • true, false
  • null
  • 对象
  • 数组

json 数组格式

 [元素1, 元素2, ...]

multipart 请求示例

 POST /test2 HTTP/1.1
 Host: localhost
 Content-Type: multipart/form-data; boundary=123
 Content-Length: 125
 ​
 --123
 Content-Disposition: form-data; name="name"
 ​
 lisi
 --123
 Content-Disposition: form-data; name="age"
 ​
 30
 --123--
  • boundary=123 用来定义分隔符
  • 起始分隔符是 --分隔符
  • 结束分隔符是 --分隔符--

数据格式小结

客户端发送

  • 编码

    • application/x-www-form-urlencoded :url 编码
    • application/json:utf-8 编码
    • multipart/form-data:每部分编码可以不同
  • 表单只支持以 application/x-www-form-urlencoded 和 multipart/form-data 格式发送数据

  • 文件上传需要用 multipart/form-data 格式

  • js 代码可以支持任意格式发送数据

服务端接收

  • 对 application/x-www-form-urlencoded 和 multipart/form-data 格式的数据,Spring 接收方式是统一的,只需要用 java bean 的属性名对应请求参数名即可
  • 对于 applicaiton/json 格式的数据,Spring 接收需要使用 @RequestBody 注解 + java bean 的方式

2. session 原理

session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。

Http 无状态,有会话

  • 无状态是指,请求之间相互独立,第一次请求的数据,第二次请求不能重用
  • 有会话是指,客户端和服务端都有相应的技术,可以暂存数据,让数据在请求间共享

服务端使用了 session 技术来暂存数据

image.png

 GET /s1?name=zhang HTTP/1.1
 Host: localhost

 GET /s2 HTTP/1.1
 Host: localhost
 Cookie: JSESSIONID=560FA845D02AE09B176E1BC5D9816A5D

session 技术实现身份验证

ClientLoginControllerLoginInterceptorSession登录请求检查用户名,密码 -->验证通过存入用户名登录成功-->其它请求获取用户名用户名存在,放行ClientLoginControllerLoginInterceptorSession

image.png

3. jwt 原理

jwt 技术实现身份验证

ClientLoginControllerLoginInterceptor登录请求检查用户名,密码,验证通过登录成功,返回token其它请求,携带token校验token,校验无误,放行ClientLoginControllerLoginInterceptor

image.png 生成 token

 GET /j1?name=zhang&pass=123 HTTP/1.1
 Host: localhost

校验 token

 GET /j2 HTTP/1.1
 Host: localhost
 Authorization: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9._1-P_TLlzQPb1_lCyGwplMZaKQ8Mcw_plBbYPZ3OX28