1.http协议

 http协议是一种用于在网络设备两端传输超文本的协议
   此协议分为客户端和服务端
   在详细了解此协议之前,我们要清楚
    1.客户端一般是指运行在网络设备上的浏览器
    2.服务端是提供内容服务的服务器软件
   我们来看一下当客户端向服务端发送的请求报文头
在这里插入图片描述
   这个是由客户端(浏览器)自动构造发送给服务端的

   接下来是服务端向客户端的发送的回应报文头
在这里插入图片描述
这不是一个最简单的回应报文头,最简单的回应报文头其实只包含
HTTP/1.1
Transfer-Encoding:
Content-Type: text/html;charset=UTF-8
data
即可。
接下来我们就用java来模拟一下http在服务器上的体现。
在此之前要先说明的是我的网络拓扑图,以便在运行时更好的讲解
在这里插入图片描述

package protocols.http;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class service
{
    public static void main(String args[])
    {
        try
        {
            ServerSocket serverSocket = new ServerSocket(4134);
            Socket socket = new Socket();
            while (true)
            {
                System.out.println("正在监听------");
                socket = serverSocket.accept();
                System.out.println("监听到一个客户端请求");
                System.out.println("为该客户端创建一个线程实列并开始运行该线程");
                serviceThread thread1 = new serviceThread(socket);
                thread1.start();
            }
        }
        catch (Exception e)
        {

        }
    }
}
class serviceThread extends Thread
{
    private Socket socket;


    public  serviceThread(Socket t_socket)
    {
        socket = t_socket;
    }

    @Override
    public void run()
    {
        System.out.println("线程开始,打印该客户端的ip和端口");
        System.out.println(socket.getLocalAddress() + ": " + socket.getLocalPort());
        InputStream clientInput = null;
        InputStreamReader clientInputStream = null;
        BufferedReader clientBufferReader = null;
        OutputStream clientOutStream = null;
        Writer clientWriter = null;
        System.out.println("打印该客户端的请求报文头");
        try
        {
            clientBufferReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String st = null;
            while ((st = clientBufferReader.readLine()) != null && st.length() != 0)
            {
                System.out.println(st);
            }
            socket.shutdownInput();
            System.out.println("构造回应报文头并发送给还客户端");
          clientWriter = new OutputStreamWriter(socket.getOutputStream(),"UTF-8");
          clientWriter.write("HTTP/1.1 200 \r\n");
            clientWriter.write("Transfer-Encoding: chunked");
            clientWriter.write("Content-Type: text/html;charset=UTF-8\r\n");
            clientWriter.write("\r\n");
            clientWriter.write("helloWord\r\n");
            clientWriter.flush();
            socket.close();
        }catch (Exception e)
        {

        }
    }
}

这里要说明的是这个代码运行的流程
在这里插入图片描述
接下来我们分别用客户端1和客户端2向服务端发送请求,而后服务端会分别向客户端1和客户端发送回应,该回应到达客户端1和客户端2时,会被客户端1和客户端2(的浏览器)解析。我们用wireshark来分析这个过程。
1.首先我现在服务端运行这个Java代码
在这里插入图片描述
2.用客户端1向服务端发送请求
在这里插入图片描述
在这里插入图片描述
然后客户端1收到服务端的回应报文,并把它解析到浏览器上
在这里插入图片描述
接着我们来观察一下wireshark捕获到了什么
在这里插入图片描述
以上就是客户端1向服务端发送请求,然后服务端回应的过程

3.接着是客户端2,由于基本上和客户端1相似,这里就在过多讲解
用客户端2向服务端发送请求
在这里插入图片描述
在这里插入图片描述
4.有机会讲一下三次握手和四次挥手的过程,以及它们是如何保持了tcp的可靠连接