请求响应报文结构
请求报文结构
请求报文实例
响应报文结构
响应报文实例
HTTP常用的响应状态码
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
请求/响应头字段中的重要字段
User-Agent--请求头独有头部字段:HTTP 客户端程序的信息
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101
首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。
由网络爬虫发起请求时,有可能会在字段内添加爬虫作者的电子邮件地址。此外,如果请求经过代理,那么中间也很可能被添加上代理服务器的名称。
Connection--请求头和响应头通用
管理持久连接
Connection: close
HTTP/1.1 版本的默认连接都是持久连接。当服务器端想明确断开连接时,则指定 Connection 首部字段的值为 close。
Connection: Keep-Alive
HTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接。为此,如果想在旧版本的 HTTP 协议上维持持续连接,则需要指定 Connection 首部字段的值为 Keep-Alive。
Content-Length--实体首部字段:实体主体的大小(单位:字节)
Content-Length: 15000
首部字段 Content-Length 表明了实体主体部分的大小(单位是字节)。对实体主体进行内容编码传输时,不能再使用 Content-Length首部字段。
Content-Type--实体首部字段:实体主体的媒体类型(即MIME)
Content-Type: text/html; charset=UTF-8
首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部字段 Accept 一样,字段值用 type/subtype 形式赋值。参数 charset 使用 iso-8859-1 或 euc-jp 等字符集进行赋值。
常用的MIME类型:MIME 遵循以下格式:major/minor 主类型/次类型
例如:
image/jpg
image/gif
text/html
video/quicktime
appliation/x-httpd-php
appliation/json
appliation/xml
application/x-www-form-urlencoded
实际应用--使用SpringMVC时
Controller中使用@RequestBody注解参数,那么要求前端(或者模拟前端比如MockMvc)向后台请求时要以json格式请求。此时前端应该指定自己向后台发送的参数的MIME为appliation/json。
Controller中使用@RequestParam注解参数,用于简单类型的情况,比如string、Integer、Double等。要求前端采用GET请求并将参数写在链接【?】的后面,格式如:
http://localhost:1008/LoginService/login?userName=admin&password=123
应用:和前端配合时参数传输方式的确定以及后台自身提取需要的信息
和前端配合时参数传输方式的确定
Controller中使用@RequestBody注解参数还是使用@RequestParam注解参数,要和前端进行商定。
后台自身提取需要的信息
从Http信息中提取有用的信息,比如想对请求的浏览器信息进行统计,可以提取出User-Agent信息然后提取出浏览器信息,进行统计。
获取浏览器请求头(User-Agent)方式1--request.getHeader("User-Agent");
参考网页
https://blog.csdn.net/mr_caoshuai/article/details/78284010
代码
/**
*
* Description:java获取客户端
* @Version1.0 2018-8-14 下午3:36:51
* @param request
* @return
*/
public static String getPlatform(HttpServletRequest request){
/**
* User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器
能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
*/
String agent= request.getHeader("user-agent");
//客户端类型常量
String type = "";
if(agent.contains("iPhone")||agent.contains("iPod")||agent.contains("iPad")){
type = "ios";
} else if(agent.contains("Android") || agent.contains("Linux")) {
type = "apk";
} else if(agent.indexOf("micromessenger") > 0){
type = "wx";
}else {
type = "pc";
}
return type;
}
获取浏览器请求头(User-Agent)方式2--通过第三方包来实现
参考网页
https://www.sojson.com/blog/223.html
引入maven依赖
<dependency>
<groupId>nl.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.2.4</version>
</dependency>
代码示例
//获取浏览器信息
String ua = request.getHeader("User-Agent");
//转成UserAgent对象
UserAgent userAgent = UserAgent.parseUserAgentString(ua);
//获取浏览器信息
Browser browser = userAgent.getBrowser();
//获取系统信息
OperatingSystem os = userAgent.getOperatingSystem();
//系统名称
String system = os.getName();
//浏览器名称
String browserName = browser.getName();
所以,这些的基础都是http协议的学习与理解
来源:oschina
链接:https://my.oschina.net/u/3866531/blog/1927756