\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}