【java程序员理解HTTP】【5】小结

请求响应报文结构

请求报文结构

请求报文实例

响应报文结构

响应报文实例

HTTP经常使用的响应状态码

200 OK                        //客户端请求成功php

400 Bad Request               //客户端请求有语法错误,不能被服务器所理解html

401 Unauthorized              //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 前端

403 Forbidden                 //服务器收到请求,可是拒绝提供服务java

404 Not Found                 //请求资源不存在,eg:输入了错误的URLios

500 Internal Server Error     //服务器发生不可预期的错误json

503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常浏览器

请求/响应头字段中的重要字段

User-Agent--请求头独有头部字段:HTTP 客户端程序的信息

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101服务器

首部字段 User-Agent 会将建立请求的浏览器和用户代理名称等信息传达给服务器。网络

由网络爬虫发起请求时,有可能会在字段内添加爬虫做者的电子邮件地址。此外,若是请求通过代理,那么中间也极可能被添加上代理服务器的名称。app

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协议的学习与理解

相关文章
相关标签/搜索