计算机网络协议
ICMP(Internet Control Message Protocol)
ICMP
协议是一种面向无连接的协议,用于传输出错报告控制信息。它对于网络安全具有极其重要的意义。
它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
TCP
TCP的优化可以在发起方第二次ack的时候把请求包也带过去,节省时间。
Http
GET产生一个TCP数据包;POST产生两个TCP数据包。
- 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
- 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
HTTP请求体编码方式
request header: Content-Type是前端妹妹规定的请求头的响应类型,常用的类型有
application/x-www-form-urlencoded : 表单默认的提交数据的格式。
multipart/form-data : 当你需要在表单中进行文件上传时,就需要使用该格式;
application/xhtml+xml :XHTML格式
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
application/json : JSON数据格式
application/pdf :pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
@RequestParam
@RequestParam
可以处理get,post,delete等方法**,就是可以从urlString传参,也可以从Body传参,但body的编码方式必须是application/x-www-form-urlencoded
,或者multipart/form-data
**
@RequestBody
一般用来处理body为application/json,application/xml
等非**application/x-www-form-urlencoded
,multipart/form-data
**编码方式。只能接受来自body的数据,GET方式无请求体,因此无法使用get
HttpServletRequest
HttpServletRequest
封装了一个HTTP请求,它实际上是从ServletRequest
继承而来。
我们通过HttpServletRequest
提供的接口方法可以拿到HTTP请求的几乎全部信息,常用的方法有:
- getMethod():返回请求方法,例如,
"GET"
,"POST"
; - getRequestURI():返回请求路径,但不包括请求参数,例如,
"/hello"
; - getQueryString():返回请求参数,例如,
"name=Bob&a=1&b=2"
; - getParameter(name):返回请求参数,GET请求从URL读取参数,POST请求从Body中读取参数;
- getContentType():获取请求Body的类型,例如,
"application/x-www-form-urlencoded"
; - getContextPath():获取当前Webapp挂载的路径,对于ROOT来说,总是返回空字符串
""
; - getCookies():返回请求携带的所有Cookie;
- getHeader(name):获取指定的Header,对Header名称不区分大小写;
- getHeaderNames():返回所有Header名称;
- getInputStream():如果该请求带有HTTP Body,该方法将打开一个输入流用于读取Body;
- getReader():和getInputStream()类似,但打开的是Reader;
- getRemoteAddr():返回客户端的IP地址;
- getScheme():返回协议类型,例如,
"http"
,"https"
;
此外,HttpServletRequest
还有两个方法:setAttribute()
和getAttribute()
,可以给当前HttpServletRequest
对象附加多个Key-Value,相当于把HttpServletRequest
当作一个Map<String, Object>
使用。