\documentclass[../public/实验报告模板]{subfiles}

\renewcommand{\mydate}{2023年11月17日}
\renewcommand{\mylabname}{超文本传输协议（HTTP）}
\renewcommand{\mychapternum}{12}

\begin{document}
    \mytitle
    \begin{enumerate}
        \myitem{实验目的}{
            \item 掌握HTTP的报文格式
            \item 掌握HTTP的工作原理
            \item 掌握HTTP常用方法
        }
        \myitem{实验设备或环境}{
            \item 采用网络拓扑结构一
        }
        \myitem{实验原理}{
            \item 体系结构
            \item 万维网文档
            \item HTTP协议简介
            \item HTTP报文格式
            \item HTTP方法
            \item HTTP状态码
            \item 持久与非持久连接
            \item HTTP代理服务器
        }
        \myitemx[label=练习\arabic*\ ]{实验步骤}{
            \item 页面访问
            \item 页面提交
            \item 获取页面信息
            \item 较复杂的页面访问
        }
        \myitemx[label=练习\arabic*\ , itemsep=1em]{实验结果总结}{
            \item 页面访问
            
            本练习使用HTTP协议的GET方法，这种方法的作用是从服务器请求一个文档。
            \begin{table}[H]
                \centering
                \caption{实验结果}
                \begin{tabular}{c|c}
                \toprule
                 主机名 & 172.16.0.253 \\
                 URL & http://172.16.0.253/experiment \\
                 服务器类型 & Apache/2.2.3 (CentOS) \\
                 传输文本类型 & text/html \\
                 访问时间 & Fri, 17 Nov 2023 00:41:58 GMT \\
                \bottomrule
                \end{tabular}
            \end{table}

            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-20-51-39.png}
                \caption{HTTP请求的会话分析即报文交互图}
            \end{figure}

            TCP协议是传输层协议，HTTP是应用层协议，HTTP 1和2是基于TCP的，但HTTP 3 是基于UDP的。
            \thinkingquestion{
                \item 一个主页是否只有一个连接？
                
                如果使用持久连接的话，一个主页只有一个连接；否则就不一定。
            }

            \item 页面提交
            
            本练习的提交过程使用了HTTP协议的POST方法，这种方法的作用是从客户向服务器发送一些信息。

            此次通信分访问post.html页面，提交用户名和密码两个阶段。

            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-08-23.png}
                \caption{先GET post.html}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-09-08.png}
                \caption{同时会附带GET favicon.ico获取图标}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-09-37.png}
                \caption{点击确定后向res.html POST用户名和密码}
            \end{figure}
            
            可以注意到每次请求都重新建立TCP连接了，因此此服务器实现的HTTP/1.1不正确，因为HTTP/1.1应默认为持久连接。

            \item 获取页面信息
            
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-14-23.png}
                \caption{发送请求}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-14-58.png}
                \caption{会话分析}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-15-16.png}
                \caption{服务器返回了400 Bad Request}
            \end{figure}
            \thinkingquestion{
                \item 同时打开多个浏览器窗口并访问一个WEB站点的不同页面时，系统是根据什么把返回的页面正确地显示到相应窗口的？
                
                多个浏览器窗口访问同一个WEB站点的不同页面时，每个窗口都会建立一个TCP连接，这些连接有不同的源端口号，系统根据源端口号把返回的页面正确地显示到相应窗口。
            }

            \item 较复杂的页面访问
            
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-19-06.png}
                \caption{先查询DNS}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-19-53.png}
                \caption{再请求第一个页面，可以看到响应过大被分段了}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-21-41.png}
                \caption{还请求了图片，响应过大仍然被分段}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-22-20.png}
                \caption{也能观察到TCP的累积确认机制}
            \end{figure}
            \begin{figure}[H]
                \includegraphics[width=1\linewidth]{imgs/2023-12-31-21-23-03.png}
                \caption{当然有的资源可能404 Not Found}
            \end{figure}
            \thinkingquestion{
                \item 为什么HTTP不保持与客户端的TCP连接？
                
                （标准回答）先问是不是，再问为什么。

                使用持久连接时，HTTP会保持与客户端的TCP连接；使用非持久连接时，HTTP不保持与客户端的TCP连接。HTTP/1.1以下默认非持久连接，HTTP/1.1开始默认持久连接。而本次实验环境实现的HTTP不规范，因此导致HTTP不保持与客户端的TCP连接。
            }
        }
    \end{enumerate}
\end{document}