HTTP协议和静态web服务器

一、HTTP协议

1 HTTP协议的定义

  • 网络协议

    • 网络协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
  • HTTP协议

    • HTTP协议(超文本传输协议)是一种网络通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。默认端口:80
  • HTTPS协议

    • HTTPS协议是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。1HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。默认端口:443
  • HTTP协议的主要特点

    • 支持客户/服务器模式
    • 简单快速:客户向服务器发送请求时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • HTTPS协议的主要特点

    • 内容加密:采用混合加密技术,中间者无法直接查看明文内容。
    • 验证身份:通过证书认证客户端访问的是自己的服务器。
    • 保护数据完整性:防止传输的内容被中间人冒充或者篡改。
    • SSL证书需要购买申请,功能越强大的证书费用越高。
    • SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
    • HTTPS连接缓存不如HTTP高效,流量成本高。
    • HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。

2 HTTP协议的组成

在这里插入图片描述

  • 请求行

    • 请求行由请求方法字段(GET/POST)、URL字段和HTTP协议版本组成。
  • URL字段

    • URL字段也称为请求地址
  • HTTP协议的请求方法

    • HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
    • 常用的方法:
      • GET方法:浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源。
      • POST方法:要求被请求服务器接受附在请求后面的数据,常用于提交表单。
  • GET和POST区别

    • 从参数的传递方面来看,GET请求的参数是直接拼接在地址栏URL的后面,而POST请求的参数是放到请求体里面的;
    • 从长度限制方面来看,GET请求有具体的长度限制,一般不超过1024KB,而POST理论上没有,但是浏览器一般都有一个界限;
    • 从安全方面来看,GET请求相较于POST,因为数据都是明文显示在URL上面的,所以安全和私密性不如POST;
    • 从本质上来说,GET和POST都是TCP连接,并无实质的区别.但是由于HTTP/浏览器的限定,导致它们在应用过程中体现出了一些不同.GET产生一个数据包,POST产生两个数据包.对于GET请求,浏览器会把http header 和 data 一并发出去,服务器响应200(返回数据).而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200
  • 请求头部

    • 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号 “ : ” 分隔。

    • 请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

      • User-Agent:产生请求的浏览器类型。

      • Accept:客户端可识别的内容类型列表。

    • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

      • Content-Type:请求体的MIME类型。MIME类型:描述消息内容类型的因特网标准,常见的有application/json、image/jpeg、application/octet-stream等。

  • 请求正文

  • 请求正文向服务器提交的请求数据,GET请求的参数一般是放在请求行后的键值对,post请求的参数类型多样(表单、json、xml、图片等)

  • 响应行

  • 响应行由响应状态码、响应信息和HTTP协议版本字段3个字段组成

  • 响应状态码

    • 响应状态码由三位数字组成,第一个数字定义了响应的类别,且有五种类型
      • 1xx:指示信息–表示请求已接收,继续处理
      • 2xx:成功–表示请求已被成功接收、理解、接受
      • 3xx:重定向–要完成请求必须进行更进一步的操作
      • 4xx:客户端错误–请求有语法错误或请求无法实现
      • 5xx:服务器端错误–服务器未能实现合法的请求
  • 常见的响应状态码

    • 200 - 请求成功,已经正常处理完毕
    • 301 - 请求永久重定向,转移到其它URL
    • 302 - 请求临时重定向
    • 304 - 请求被重定向到客户端本地缓存
    • 400 - 客户端请求存在语法错误
    • 401 - 客户端请求没有经过授权
    • 403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限
    • 404 - 客户端请求的URL在服务端不存在
    • 500 - 服务端永久错误
    • 503 - 服务端目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
  • 响应头

    • 响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

    • 常见的响应头:

      • Content-Length:表示内容长度

      • Content- Type:表示后面的文档属于什么MIME类型

      • Server:服务器通过这个头告诉浏览器服务器的类型

      在这里插入图片描述

      • 响应正文
    • 响应正文就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是图片就是图片等。

二、搭建python自带静态web服务器

1 静态web服务器是什么

静态web服务器是指可以为出发请求的浏览器提供静态文档的程序。

平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个页面就是动态的。

而静态的Web服务器,页面的数据不会发生变化。

2 如何搭建python自带的静态web服务器

搭建python自带的静态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962692.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展,针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击,包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …

在虚拟机里运行frida-server以实现对虚拟机目标软件的监测和修改参数(一)(android Google Api 35高版本版)

frida-server下载路径 我这里选择较高版本的frida-server-16.6.6-android-x86_64 以root身份启动adb 或 直接在android studio中打开 adb root 如果使用android studio打开的话,最好选择google api的虚拟机,默认以root模式开启 跳转到下载的frida-se…

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

【2024年华为OD机试】(C卷,200分)- 启动多任务排序 (JavaScriptJava PythonC/C++)

一、问题描述 题目解析 本题是一个典型的拓扑排序问题。拓扑排序用于解决有向无环图(DAG)中的节点排序问题,使得对于图中的每一条有向边 (u, v),u 在排序中总是位于 v 的前面。在本题中,任务之间的依赖关系可以看作是有向图中的边,而任务的执行顺序就是拓扑排序的结果。…

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 1.原理及网络结构 1.1RNN 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…

Privacy Eraser,电脑隐私的终极清除者

Privacy Eraser 是一款专为保护用户隐私而设计的全能型软件,它不仅能够深度清理计算机中的各类隐私数据,还提供了多种系统优化工具,帮助用户提升设备的整体性能。通过这款软件,用户可以轻松清除浏览器历史记录、缓存文件、Cookie、…

数据分析常用的AI工具

数据分析领域中常用的AI工具种类繁多,涵盖了从数据处理、分析到可视化和预测的各个环节。以下是一些常见且广泛应用的AI数据分析工具及其特点: 1. 数据处理与清洗工具 Python库:如PandasAI,集成了生成式AI能力,支持自…

npm常见报错整理

npm install时报UNMET PEER DEPENDENCY 现象 npm install时报UNMET PEER DEPENDENCY,且执行npm install好几遍仍报这个。 原因 不是真的缺少某个包,而是安装的依赖版本不对,警告你应该安装某一个版本。 真的缺少某个包。 解决 看了下package.json文件,我的react是有的…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核…

https数字签名手动验签

以bing.com 为例 1. CA 层级的基本概念 CA 层级是一种树状结构,由多个层级的 CA 组成。每个 CA 负责为其下一层级的实体(如子 CA 或终端实体)颁发证书。层级结构的顶端是 根 CA(Root CA),它是整个 PKI 体…

如何获取当前的位置信息

文章目录 1 概念介绍2 使用方法3 示例代码3 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的…

c++在线音乐播放器项目开发记录(2)

前言 因为放寒假了,时间比较短,想找实习也不好找,干脆在家加强一下技术栈,首先从c学起,最适合练手的就是qt的项目了,我是根据B站视频【5个C/C硬核简历项目实战,可直接写入简历,包含…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(下.代码部分)

医疗 MLLM 框架编程实现 本医疗 MLLM 框架结合 Python 与 PyQt6 构建,旨在实现多模态医疗数据融合分析并提供可视化界面。下面从数据预处理、模型构建与训练、可视化界面开发、模型 - 界面通信与部署这几个关键部分详细介绍编程实现。 6.1 数据预处理 在医疗 MLLM 框架中,多…

【项目初始化】

项目初始化 使用脚手架创建项目Vite创建项目推荐拓展 使用脚手架创建项目 Vite Vite 是一个现代的前端构建工具,它提供了极速的更新和开发体验,支持多种前端框架,如 Vue、React 等创建项目 pnpm create vuelatest推荐拓展

云原生(五十二) | DataGrip软件使用

文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用:C…

爬虫基础(二)Web网页的基本原理

一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…

【MySQL】MySQL客户端连接用 localhost和127.0.0.1的区别

# systemctl status mysqld # ss -tan | grep 3306 # mysql -V localhost与127.0.0.1的区别是什么? 相信有人会说是本地IP,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。 看来这个入门问题还有人不清楚,其实…

【算法设计与分析】实验3:动态规划—最长公共子序列

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握动态规划求解问题的思想;针对不同的问题,会利用动态规划进行设计求解以及时间复杂度分析&#xff0…

FIDL:Flutter与原生通讯的新姿势,不局限于基础数据类型

void initUser(User user); } 2、执行命令./gradlew assembleDebug,生成IUserServiceStub类和fidl.json文件 3、打开通道,向Flutter公开方法 FidlChannel.openChannel(getFlutterEngine().getDartExecutor(), new IUserServiceStub() { Override void…

JavaScript闭包深入剖析:性能剖析与优化技巧

一、引言 在 JavaScript 的奇妙世界里,闭包无疑是一个既强大又迷人的特性。它就像是一把万能钥匙,为开发者打开了实现各种高级功能的大门。从数据封装与保护,到函数的记忆化,再到模块化开发,闭包都发挥着举足轻重的作…