http从请求到响应分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Andyzhu_2005/article/details/80804553

http协议是互联网开发的基石,其基于请求/响应模型,请求和响应必须成对出现,默认端口是80.下面分别对http的请求和响应分别做说明。
1、前期准备
新建springmvc工程,将一个html文件放到tomcat的webapp下,其内容j就是一个简单的表单提交页面,如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/user/testHttp1" method="get">
        <input type="text" name="username"><br>
        <input type="password" name="password"><br>
        <input type="submit" value="提交"><br>

    </form>

</body>
</html>

在controller的java文件中,创建testHttp1方法用于处理表单请求,并进行String字符串返回。只有当用户名和密码都正确时,返回login success信息,否则返回login fail。

    @RequestMapping("/user/testHttp1")
    @ResponseBody
    private String testHttp1(Model model,String username,String password) throws JsonProcessingException{       
        logger.warn("查询用户id");
        String result=null;

        if (username.equalsIgnoreCase("andy")&&password.equalsIgnoreCase("123")) {

             result = ("login success");
        }else{
             result =("login fail");
        }



         return  result;
    }

先以get方式进行提交,通过httpwatch进行抓包查看。
首先登陆http://localhost:8083/views/test2.html,登陆表单页面,看其http请求和响应信息。

GET /views/test2.html HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 25 Jun 2018 08:30:35 GMT
Host: localhost:8083
Connection: Keep-Alive

上面就是http请求,其中:
1、第一行就是请求行,请求头主要包括请求的方法(即常用的post、get以及其他),资源的地址,以及http的协议版本。
2、从第二行到最后是请求头,请求头的内容都是键值对,用于向服务器描述浏览器的相关信息。
比如:Accept:表示浏览器能接收的数据类型。
User-Agent:浏览器和操作系统的信息,是ie浏览器还是狐火啥的
If-Modified-Since:本地缓存的最后变更时间
还有Cookie等相关信息,这里没体现出来。
3、如果是post请求,表单的参数信息就放在请求体中。此处get方法中,没有请求体
http响应:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Last-Modified: Mon, 25 Jun 2018 09:05:14 GMT
Accept-Ranges: bytes
Content-Type: text/html
Content-Length: 342
Date: Mon, 25 Jun 2018 09:05:54 GMT

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/user/testHttp1" method="get">
        <input type="text" name="username"><br>
        <input type="password" name="password"><br>
        <input type="submit" value="提交"><br>
          xxx

    </form>

</body>
</html>

http响应的第一行:响应行:包括http协议版本,和状态码。以及状态信息。
状态码的几个重要数字:
200: 表明请求成功;
302:表明重定向
304:表明浏览器本地有缓存,访问本地缓存。
404:表明访问的资源不存在
500:表明服务器端的代码由错误

响应头的信息
Server: Apache-Coyote/1.1 服务器的信息
Last-Modified: Mon, 25 Jun 2018 09:05:14 GMT :服务器关于此资源的最后更改时间。和请求头的If-Modified-Since的时间来去确定是否访问本地缓存
Accept-Ranges: bytes
Content-Type: text/html :返回的内容格式
Content-Length: 342
Date: Mon, 25 Jun 2018 09:05:54 GMT

响应体的信息就是浏览器呈现给用户的信息。

在表单中输入用户名和密码,点击提交,然后看其http请求和响应:

POST /user/testHttp1 HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost:8083/views/test2.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8083
Content-Length: 26
Connection: Keep-Alive
Cache-Control: no-cache

username=andy&password=123

以及响应

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/x-ms-application
Content-Length: 13
Date: Mon, 25 Jun 2018 10:00:05 GMT

login success

在post请求中,http请求体包含了表单的参数,因此post请求比get请求要安全。

猜你喜欢

转载自blog.csdn.net/Andyzhu_2005/article/details/80804553