浏览器是如何将用户数据发送到服务器的?

今天是刘小爱学习JAVA的第89天 。
感谢你的观看 , 谢谢你 。
话不多说 , 开始今天的学习:

浏览器是如何将用户数据发送到服务器的?

文章插图
 
在学习之前 , 先思考如下问题:
  • 对于浏览器来说:
  • 如何将用户数据发送到服务器呢?
  • 数据传输的格式是怎么样的呢?
  • 对于服务器来说:
  • 如何获取用户提交的数据呢?
  • 如何将结果响应给浏览器?
画一张图 , 对其做一个分析:
浏览器是如何将用户数据发送到服务器的?

文章插图
 
如果把servlet比作浏览器和服务器之间的一个通道 , 那么request和response也就是通道里的内容 。
【浏览器是如何将用户数据发送到服务器的?】当然这样说明肯定不太准确 , 但是初学这样更好理解 , 今天就学一学这个request 。
一、get、post请求在学form表单的时候就知道了请求有get和post之分 , 当然请求方式不只有这两个 , 但目前主要接触这两种 。
分析下浏览器发送请求到服务器的流程:
浏览器是如何将用户数据发送到服务器的?

文章插图
 
①登录页面
这是我在网上找的一个bootstrap登录页面 , 其本质也就是一个form表单 , 只不过加入了美化 。
form表单标签有两个属性:
  • action:也就是表单提交后会跳转的路径 , 我这边设置的为“/getServlet”
  • method:也就是请求方式 , 我这边设置的是get请求 。
详情见下图 , 模拟post请求时也就可以修改这两个属性 。
浏览器是如何将用户数据发送到服务器的?

文章插图
 
②浏览器地址
当点击登录提交按钮后 , 浏览器就会跳转action中对应的那个路径 。其中get请求:会将参数拼接到url后面 。
如何拼接的呢?
input标签中的name属性对应的值等于输入框中输入的值 。
也就是:username=刘小爱 。
③注解Servlet开发
使用注解开发的方式创建一个类GetServlet , 其路径为“/getServlet” 。
而在①中点击登录时会跳转“/getServlet” , 所以会找到这个类 , 从而执行doGet()请求方法 。
浏览器抓包观察请求报文
这边我又将①中表单请求方式改成post了 , 主要也是为了将get和post做一个总结对比 。
浏览器是如何将用户数据发送到服务器的?

文章插图
 
一般是用谷歌浏览器 , 按F12进入开发调试 , 在Network选项中可以抓包 。
①请求行
在get请求中参数是被拼接在url后面的 。
而在post请求中是不拼接参数的 。
正是因为如此 , get请求不可以传输数据类较大的或者非文本数据 , 因为太长了url写不下了哈哈哈 。
②请求头
以键值对的形式将信息传输给服务器 。
③请求体
post请求的参数在请求体中 , 而get请求请求体为空 。
二、request请求API回到最先开始的几个问题 , 浏览器将数据传输给服务器了 。
那么服务器如何获取这些数据呢?又如何进行处理呢?
在Java中一切都是对象 , 肯定有对应的类和对象 。
1Request请求行
浏览器是如何将用户数据发送到服务器的?

文章插图
 
①getMethod()方法
其获取的就是浏览器发起的请求方式 , 例子中是post请求 。
②getRequestURI()方法
其获取的就是浏览器访问的路径 。
③getRemoteAddr()方法
这个是ip值 , 因为我的是本地电脑 , 所有就这样了 。
④getProtocol()方法
获取的协议版本号 , 这里是HTTP/1.1 。
2Request请求头
浏览器是如何将用户数据发送到服务器的?

文章插图
 
请求头中的信息是以键值对的形式传送给服务器的 。
其中关于getHeader()方法中的参数:user-agent 。
  • user:浏览器携带的用户操作系统 。
  • agent:浏览器版本等信息 。
老实说 , 这里面的信息就只能看懂一点点 。
电脑系统为Win10 , 64位系统 , 后面还有能看出是用的谷歌浏览器访问 , 其它的很多信息暂时不懂 。


推荐阅读