• Servlet学习笔记【2】---Http数据包


    本文主要讲Http协议相关知识。

    1 Http协议特点

    单向性:客户端和服务端是单向通信的,只有客户端发请求,服务端才会响应产生。(异于推送模式)

    无状态:协议本身并没有状态的记录,当客户端多次访问服务器时,服务端并不知道你曾经访问。STP协议是有状态的(即客户端连接服务端后,服务端会记录连接状态,下次链接继续上次状态。例如:下载时支持断点续传),而Http是无状态的,因此需要其它的技术实现状态记录(session、cookie)。

    2 Http模式下发送请求方式

    基于http协议我们能够采用哪些方式来发送请求呢?常用的有如下四种:

    DoGet

    DoPost

    DoHead

    DoDelete

    DoGet和DoPost的区别:

    1)get方式提交表单表单中的数据会在地址栏中显示。而post方法则不会。例如:百度中输入java后,地址栏中?后边有个wd=java。注意:在浏览器地址栏输入地址方式,永远是get方式。

    2)get方式提交表单长度是有限制的512字节,而post理论上是无限的。说明:浏览器地址栏输入的字符长度是有限的,因此,get方式有长度显示。

    3)get方式提交表单会在http数据包中的第一行出现,而post在空一行的body中出现。

    4)get方式永远是以字符方式提交。而post既可以以字符也可以以字节。说明1:get方式内容会在浏览器输入框中显示,因此是字符方式。说明2:当做文件上传时,提交必须以post方式;当用户名和密码提交时,必须用post方式,因为get会造成信息泄露。

     3 Http数据包

    B/S结构,完全是基于http数据包进行传递信息的(请求和响应)。

    3.1 Get方式Http数据包

    在serverSockt创建一个服务器,并将请求的数据包打印出来:

     1 package test1;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.InputStreamReader;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 public class Server {
     9 
    10     public static void main(String[] args) throws Exception {
    11         ServerSocket ss = new ServerSocket(8080);
    12         Socket s = ss.accept();
    13         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    14         String str;
    15         while((str = br.readLine()) != null) {
    16             System.out.print(str + '
    ');
    17         }
    18     }
    19 }

    运行该代码启动服务器,在浏览器地址栏中输入:http://127.0.0.1:8080/index.html?key=value&key1=value1

    在eclipse控制台中,可以看到如下打印日志:

     1 GET /index.html?key=value&key1=value1 HTTP/1.1
     2 Host: 127.0.0.1:8080  // 请求地址
     3 Connection: keep-alive
     4 Cache-Control: max-age=0
     5 Upgrade-Insecure-Requests: 1
     6 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, 
     7 like Gecko) Chrome/69.0.3497.100 Safari/537.36
     8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/a   // 浏览器支持的文件格式
     9 png,*/*;q=0.8
    10 Accept-Encoding: gzip, deflate, br  //浏览器支持的编码
    11 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,de;q=0.6,zh-TW;q=0.5,en-US;  // 浏览器支持的语言
    12 q=0.4

    从上边日志可以看出,这是Get方式的Http数据包

    3.2 Post方式Http数据包

    1)首先创建一个test.html文件,里边有个表单,并且请求方式设置为post:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 <form action="http://127.0.0.1:8888" method="post">
     9     <input type="text" name="username" value="zhaoweikai"/>
    10     <input type="text" name="userage" value="25"/>
    11     <input type="submit" value="提交"/>
    12 </form>
    13 </body>
    14 </html>

    2)通过TcpTrace工具,打印出表单提交时的请求Http数据包

    首先要配置TcpTrace软件监听端口(8888)和目标端口(8080):

    说明:tcpTrace是一款小巧的获取请求报文和响应报文的工具,使用非常简单。

     3)启动一个Tomcat服务

    Tomcat默认监听端口8080。如何启动Tomcat这里不再说明,可以看这个。

    4)在浏览器中打开上边test.html文件,点击提交按钮

    5)在TcpTrace软件中,可以看到Post方式下的Http数据包如下:

     1 POST / HTTP/1.1
     2 Host: 127.0.0.1:8888
     3 Connection: keep-alive
     4 Content-Length: 30
     5 Cache-Control: max-age=0
     6 Upgrade-Insecure-Requests: 1
     7 Origin: null
     8 Content-Type: application/x-www-form-urlencoded
     9 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
    10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    11 Accept-Encoding: gzip, deflate, br
    12 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,de;q=0.6,zh-TW;q=0.5,en-US;q=0.4
    13 
    14 username=zhaoweikai&userage=25

    从上边代码可以看出,表单数据内容在最后的内容中显示。

    参考资料&内容来源:

    速学堂:http://www.sxt.cn/tomcat/1-2-5.html

  • 相关阅读:
    vsprintf解析
    带grub的软盘镜像制作
    SunnyOS准备4
    SunnyOS准备3
    SunnyOS准备1
    汇编第七日
    汇编第六日
    解决k8s集群中mount volume失败的问题
    更新k8s集群的证书
    为k8s集群配置自定义告警
  • 原文地址:https://www.cnblogs.com/zhaoweikai/p/9877582.html
Copyright © 2020-2023  润新知