目录

  • 实验介绍
  • 实验目标
  • 实验原理与方法
    • 万维网(WWW)运行原理
    • 服务器
    • 浏览器
    • HTTP协议
      • 简介
      • 特点
      • 请求报文
        • HTTP 请求报文头属性
      • 响应报文
        • 常见的 HTTP 响应报文头属性
  • 实验步骤
    • 网址的选取
    • 分析网络拓扑和数据流向
    • 分析网页组成
    • 分析HTTP协议
  • 实验内容
    • 网络拓扑和数据流向
    • 网页组成分析
    • HTTP协议分析
      • 请求报文
      • 响应报文
  • 心得体会

实验介绍

本实验通过对特定网站分析,了解网站运行原理和相关技术;
通过使用抓包工具或浏览器自带工具采集 HTTP 协议包并进行分析。

实验目标

深入了解万维网结构、原理、技术
深入了解并掌握 WEB 页面组成
深入了解并掌握 HTTP 协议

实验原理与方法

万维网(WWW)运行原理

输入一个网址进行访问,这中间其实是客户端浏览器与服务器端的通信过程,具体如下:浏览器与网络上的域名对应的 Web 服务器建立 TCP 连接浏览器发出要求访问某个页面的HTTP 请求,Web 服务器在接收到 HTTP 请求后,解析 HTTP 请求,然后发回包含目标页面的文件数据的 HTTP 响应浏览器接受到 HTTP 响应后,解析 HTTP 响应,并在其窗口中展示网页文件内容,浏览器与 Web 服务器之间的 TCP 连接关闭。

服务器

接受来自浏览器的 TCP 的请求接收并解析 HTTP 请求创建并发送 HTTP 响应。常用的 Web 服务器有 IIS,Tomcat,Weblogic,jboss 等。

浏览器

请求与 Web 服务器建立 TCP 连接创建并发送 HTTP 请求接受并解析 HTTP 响应展示 html 文档HTTP 客户程序(浏览器)和 HTTP 服务器分别由不同的软件开发商提供,目前最流行的浏览器IE,Firefox,Google Chrome,Apple Safari 等。

HTTP协议

简介

HTTP 协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:WorldWide Web)服务器传输超文本到本地浏览器的传送协议。HTTP 基于 TCP/IP 通信协议来传递数据。HTTP 基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

特点

(1)HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的2请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(2)HTTP 是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME‐type 内容类型。
(3)HTTP 是无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

请求报文


请求行:
①是请求方法,GET 和 POST 是最常见的 HTTP 方法,除此以外还包括 DELETE、HEAD、OPTIONS、PUT、TRACE。
②为请求对应的 URL 地址,它和报文头的 Host 属性组成完整的请求 URL。
③是协议名称及版本号。
请求头:
④是 HTTP 的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。与缓存相关的规则信息,均包含在 header 中
请求体:
⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2 的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL 也可以通过类似于“/chapter15/user.html?param1=value1&param2=value2”的方式传递请求参数。

HTTP 请求报文头属性

Accept
请求报文可通过一个“Accept”报文头属性告诉服务端 客户端接受什么类型的响应。Accept属性的值可以为一个或多个 MIME 类型的值(描述消息内容类型的因特网标准, 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据)
Cookie
客户端的 Cookie 就是通过这个报文头属性传给服务端的。 服务端是如何知道客户端的多个请求是隶属于一个 Session?就是通过 HTTP 请求报文头的 Cookie 属性的 jsessionid 的值3关联起来的。
Referer
表示这个请求是从哪个 URL 过来的。
Cache‐Control
对缓存进行控制,例如一个请求希望响应返回的内容在客户端要被缓存一年或不希望被缓存,就可以通过这个报文头达到目的。

响应报文


响应行:
①报文协议及版本;
②状态码及状态描述;
响应头:
③响应报文头,也是由多个属性组成;
响应体:
④响应报文体
响应状态码
和请求报文相比,响应报文多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。
HTTP 的响应状态码由 5 段组成:

以下是几个常见的状态码:

常见的 HTTP 响应报文头属性

Cache‐Control
响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的取值有 private、public、no‐cache、max‐age,no‐store,默认为 private,缓存时间为 31536000秒(365 天)也就是说,在 365 天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用。

ETag
一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个 ETag 就会相应发生变化。它是 Cache‐Control 的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。
Location
在 JSP 中让页面 Redirect 到一个某个 A 页面中,其实是让客户端再发一个请求到 A 页面,这个需要 Redirect 到的 A 页面的 URL,其实就是通过响应报文头的 Location 属性告知客户端的。
Set-Cookie
服务端可以设置客户端的 Cookie,其原理就是通过这个响应报文头属性实现的:
客户端请求服务器,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个 Cookie。客户端浏览器会把 Cookie 保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提交给服务器。服务器检查该 Cookie,以此来辨认用户状态。服务器还可以根据需要修改 Cookie 的内容。
Cookie 的 maxAge 决定着 Cookie 的有效期,单位为秒(Second)。Cookie 中通过 getMaxAge()方法与 setMaxAge(int maxAge)方法来读写 maxAge 属性。如果 maxAge 属性为正数,则表示该 Cookie 会在 maxAge 秒之后自动失效。如果 maxAge 为负数,则表示该 Cookie 仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该 Cookie 即失效。如果 maxAge 为 0,则表示删除该 Cookie。
Cookie 并不提供修改、删除操作。如果要修改某个 Cookie,只需要新建一个同名的 Cookie,添加到 response 中覆盖原来的 Cookie。
如果要删除某个 Cookie,只需要新建一个同名的 Cookie,并将 maxAge 设置为 0,并添加到response 中覆盖原来的 Cookie。

实验步骤

网址的选取

本次实验选取www.bilibili.com,也就是哔哩哔哩弹幕网作为实验的网址。
在谷歌浏览器输入该网址,进入页面,并打开开发者工具,刷新页面。

分析网络拓扑和数据流向

拓扑图见下方实验内容部分

分析网页组成

在开发者工具中打开Elements标签,便可以对网页的html组成进行查看。分析结果见下方实验内容部分

分析HTTP协议

在开发者工具中打开Network标签,并在页面刷新过后,在下方的name中找到www.bilibili.com,点击它的Headers,对其HTTP协议进行查看。分析结果见下方实验内容部分

实验内容

网络拓扑和数据流向

网页组成分析

首先,整个网页由一个html标签组成,其包含head和body两个子标签,并且含有lang=”zh-CN”属性,说明其语言为简体中文。

先看子标签head,它含有title、meta、link、script、style等子标签。title标签只有一个,代表该网站的标题;meta标签提供了该网站的一些基本信息,比如关键词,简介,作者;link标签表示链接到外部的样式等信息;script标签中写有该网站的js脚本语言;style标签中则写了该网站的css样式。


然后是子标签body,是网页html的主题内容。哔哩哔哩弹幕网的body部分主要由众多div标签组成,他们把网站的页面布局划分成了很多小方块,然后每个小方块都有各自的样式、属性和方法。当然,在div中也穿插有script标签,进行javascript语言的编写。

HTTP协议分析

请求报文


客户机支持的数据类型:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
客户机支持的数据压缩格式:gzip, deflate, br
数据:在cookie中
客户机的软件环境:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36

响应报文


数据的压缩格式:gzip
内容类型:text/html
字符集:utf-8
当前时间:Sun, 04 Apr 2021 14:52:04 GMT
网站编写语言和框架:MISS from jd-zjwz-dx-w-02

心得体会

一个完整的网站的构建是需要很多内容的,特别是哔哩哔哩这种大型公司的网站,其代码的完备性、隐蔽性、规范性都是很重要的。比如它在书写html时,将全部内容都放在不同的div标签中,这样既便于后期维护,又不容易出错,这些都是值得我们学习借鉴的。
同时,我了解到,一个网页的访问过程是相当复杂的,也对于多年以来网络传输技术的飞速发展感到敬佩,现在我们访问网站的迅速,离不开前人的努力。

万维网运行原理分析实验相关推荐

  1. java启动servlet_Java Servlet 运行原理分析

    1 Servlet基本执行过程 Web容器(如Tomcat)判断当前请求是否第一次请求Servlet程序 . 如果是第一次,则Web容器执行以下任务: 加载Servlet类. 实例化Servlet类. ...

  2. laravel $request 多维数组取值_Laravel 运行原理分析与源码分析,底层看这篇足矣

    精选文章内容 一.运行原理概述 laravel的入口文件 index.php 1.引入自动加载 autoload.php 2.创建应用实例,并同时完成了: 基本绑定($this.容器类Containe ...

  3. java能够运行的原理_JAVA程序运行原理分析(一)

    作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...

  4. 操作系统原理分析实验

    操作系统原理分析要点 https://www.cnblogs.com/huyufeng/p/5400639.html 进程的调度时机与进程切换机制 ------------- 调度时机 中断处理过程( ...

  5. 关于HIve的运行原理分析和日志解析清洗思路(一)

    HIVE原理: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再Hadoop平台上运行:Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据.本质就是Hadoop的目录文件,达 ...

  6. 【原创视频】docker pull和docker run运行原理分析

    docker pull和docker run源码分析

  7. maven运行原理分析,源码分析

    maven启动脚本mvn.bat,借助于Plexus容器启动,Plexus提供完整的软件栈,用于创建和执行软件项目,是IoC框架,和spring类似 有兴趣想了解Plexus的,可以在github上下 ...

  8. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  9. JAVA程序运行原理分析

最新文章

  1. Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
  2. java 虚拟机 初始化_Java虚拟机 类初始化 阶段
  3. fastadmin弹框提示不起作用 confirm
  4. FCS编程之NetConnect对象
  5. (转)mssql2005生成表字典
  6. bootstrap validator 提供了哪些验证函数
  7. 第四章 单位根检验与章节综训
  8. oracle并行和并发,Oracle 并发查询
  9. errortext为什么不显示?原来是rowtemplate的高度作怪要=20
  10. python local global_Python 变量作用域 LEGB (上)—— Local,Global,Builtin
  11. Java基础教程【第一章:Java概述】
  12. java定时功能分析
  13. linux忘记root密码及时间设定
  14. java合同到期提醒_合同到期提醒,你会操作吗?
  15. python_csv文件使用记录
  16. [JavaScript] - replaceAll,将字符串中的字母或数字等全部替换掉的方式
  17. Android的 线性布局,Android布局之LinearLayout线性布局
  18. JVM监控及诊断工具命令行篇之jcmd
  19. 在vscode中php语言配置,vscode配置go语言开发环境
  20. c语言国二题库及答案2017,全国计算机二级《C语言》考试题库与答案

热门文章

  1. 为国内制造业转型升级而努力,董明珠终将折戟沉沙还是笑傲江湖?
  2. mac androidstudio 无法连接魅蓝手机进行调试
  3. Python之源码安装python3.10及有道词典依赖PyQt5问题(二十三)
  4. cached_network_image 多个图片卡顿崩溃
  5. 莆田华侨职业学校有没有计算机,莆田华侨职业中专学校招生专业|莆田华侨职业中专学校有哪些专业...
  6. java 基本类型封装类,Java 八种基本类型和基本类型封装类-九五小庞
  7. 操作系统速通学习(二)
  8. 软件工程——————面向对象的概述
  9. 或许,这是你见过最全的TCP+UDP图解系列
  10. 销售与客户沟通时如何找到客户感兴趣的话题