静态web服务器开发之HTTP协议

文章目录

  • 版权声明
  • HTTP协议
  • 网址
  • HTTPS
  • 补充:HTTP的无状态特性
  • 浏览器访问Web服务器流程
  • HTTP协议请求报文
    • HTTP GET请求报文分析
    • POST请求方式
    • 要点总结
  • HTTP协议响应报文
    • HTTP 响应报文分析
    • HTTP 状态码
    • 要点总结
  • HTTP协议通信过程查看

版权声明

  • 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
  • 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
  • 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
  • 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。
  • 本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。

在这里插入图片描述

  • HTTP协议和网址(URL)是Web应用程序的两个基本(不可分割)组成部分。它们共同构成了Web应用程序的基础。

HTTP协议

  • HTTP协议的制作者是蒂姆·伯纳斯-李,1991年设计出来的,HTTP协议设计之初目的是传输网页数据的,现在允许传
    输任意类型的数据。

  • HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。

  • 超文本是指在文本数据的基础上还包括非文本数据,非文本数据有图片、音乐、视频等,而这些非文本数据会使用链接的方式进行加载显示,通俗来说超文本就是带有链接的文本数据也就是我们常说的网页数据。
  • HTTP协议使用TCP作为传输协议,发送数据之前需要先建立连接,TCP传输协议是用来保证网络中传输的数据的安全性的,HTTP协议是用来规定这些数据的具体格式的。

  • HTTP协议的主要作用是在Web应用程序中用于传输数据

  • HTTP协议基于请求/响应模型,客户端向服务器发送请求,服务器返回响应。它使得客户端和服务器之间的通信变得简单、可靠和灵活。

  • HTTP协议的主要特点包括:

    1. 简单:HTTP协议使用简单的请求/响应模型,易于实现和理解。
    2. 无状态:HTTP协议是无状态的,每个请求和响应之间是独立的,服务器不会保存任何客户端的状态信息。
    3. 可扩展:HTTP协议支持扩展,可以通过添加新的方法、头部字段等来满足不同的需求。
    4. 明文传输:HTTP协议的数据传输是明文的,容易被窃听和篡改。
    5. 无连接:HTTP协议是无连接的,每个请求和响应之间需要建立新的连接,会增加网络开销。

网址

  • 网址(URL)(Uniform Resource Locator)也称为统一资源定位符,是用于标识互联网上资源位置的字符串。网址由多个部分组成,包括协议、主机名、端口号、路径和查询参数等。

    https://www.example.com:8080/path/to/resource?key1=value1&key2=value2
    
  • 各部分的含义如下:

    • 协议(Protocol):客户端和服务器之间进行通信所采用的协议,常见的协议有HTTP、HTTPS、FTP等。

    • 主机名(Hostname):服务器的域名或IP地址,用于标识服务器的位置。

    • 端口号(Port):服务器的端口号,用于标识服务器上的应用程序。

    • 路径(Path):服务器上资源的路径,用于标识要访问的资源。

    • 查询参数(Query Parameters):请求中的参数,用于向服务器传递额外的信息。

  • 网址的主要作用是帮助客户端定位并访问服务器上的资源。

  • 网址是Web应用程序中不可分割的一部分,它是Web应用程序的基础之一。

HTTPS

  • HTTPS(Hypertext Transfer Protocol Secure)是一种用于加密通信的HTTP协议,它使用SSL或TLS协议进行加密,保证了客户端和服务器之间的通信安全。

  • HTTPS协议的主要特点包括:

    1. 安全:HTTPS协议使用SSL或TLS协议进行加密,保证了客户端和服务器之间的通信安全。它可以防止窃听、篡改和伪造等安全问题。

    2. 验证:HTTPS协议使用数字证书进行身份验证,确保客户端和服务器之间的通信是安全的。数字证书可以防止中间人攻击和DNS欺骗等问题。

    3. 可信:HTTPS协议使用公开密钥加密技术,保证了通信的可信性。公开密钥加密技术可以确保信息只能被合法的接收者解密,防止信息被篡改或伪造。

    4. 性能:HTTPS协议使用硬件加速和缓存技术,可以提高通信的性能和效率。它可以减少网络延迟、提高数据传输速度和降低服务器负载。

  • HTTPS协议是Web应用程序中用于加密通信的标准协议,它保证了客户端和服务器之间的通信安全和可信性。

  • HTTPS协议的使用可以有效地防止窃听、篡改和伪造等安全问题,是Web应用程序中必不可少的一部分。

补充:HTTP的无状态特性

HTTP使用TCP传输协议,为什么还是无状态的?

  • HTTP协议使用TCP作为传输协议,是因为TCP协议提供了可靠的数据传输和流量控制机制,可以保证HTTP协议的数据传输安全和可靠。但是,HTTP协议本身是无状态的,这是因为HTTP协议的设计如此。

  • HTTP协议的无状态性是指服务器不会保存客户端的状态信息,每个请求和响应之间是独立的,服务器不能识别一个请求是否来自同一个客户端。这是HTTP协议的设计原则之一,它可以提高Web应用程序的可伸缩性和可靠性。

  • HTTP协议的无状态性可以提高Web应用程序的可伸缩性和可靠性。由于服务器不需要保存客户端的状态信息,可以处理更多的请求,从而提高Web应用程序的吞吐量和性能。此外,由于每个请求和响应之间是独立的,服务器不会受到客户端状态的影响,可以更加可靠地处理请求。

  • 为了解决HTTP协议的无状态性问题,Web应用程序通常使用Cookie、Session等技术来保存客户端的状态信息。Cookie和Session技术可以在客户端和服务器之间保存状态信息,从而实现Web应用程序的状态管理。

  • 有关cookie和session内容,参看会话跟踪技术之Cookie&Session

浏览器访问Web服务器流程

在这里插入图片描述

HTTP协议请求报文

HTTP最常见的请求报文有两种:

  • GET方式的请求报文,获取Web服务器数据
  • POST方式的请求报文,向Web服务器提交数据

HTTP GET请求报文分析

在这里插入图片描述

---- 请求行 ----
GET /a/b/c HTTP/1.1  # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: www.itcast.cn  # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用1--https请求 0--http请求
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36  # 用户代理,也就是客户端的名称
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型 q表示权值 越大越先加载
Accept-Encoding: gzip, deflate # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: pgv_pvi=1246921728; # 登录用户的身份标识
---- 空行 ----
  • 说明:每项数据之间使用:\r\n
GET / HTTP/1.1\r\n
Host: www.itcast.cn\r\n  
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: pgv_pvi=1246921728; \r\n
\r\n  (请求头信息后面还有一个单独的’\r\n’不能省略)

POST请求方式

在这里插入图片描述

---- 请求行 ----
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本
---- 请求头 ----
Host: mail.itcast.cn # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Content-Type: application/x-www-form-urlencoded  # 告诉服务端请求的数据类型
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 客户端的名称
---- 空行 ----
---- 请求体 ----
username=hello&pass=hello # 请求参数
  • 说明:每项数据之间使用:\r\n
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1\r\n
Host: mail.itcast.cn\r\n
Connection: keep-alive\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
\r\n(请求头信息后面还有一个单独的’\r\n’不能省略)
username=hello&pass=hello

要点总结

  • 一个HTTP请求报文可以由 请求行、请求头、空行和请求体 4个部分组成
  • 请求行是由三部分组成: 请求方式 请求资源路径 HTTP协议版本
  • GET方式的请求报文没有请求体,只有请求行、请求头、空行组成。
  • POST方式的请求报文由请求行、请求头、空行、请求体四部分组成
  • 注意:POST方式可以允许没有请求体,但是这种格式很少见

HTTP协议响应报文

HTTP 响应报文分析

在这里插入图片描述

--- 响应行/状态行 ---
HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述
--- 响应头 ---
Server: Tengine # 服务器名称
Content-Type: text/html; charset=UTF-8 # 内容类型
Connection: keep-alive # 和客户端保持长连接
Date: Fri, 23 Nov 2023 02:01:05 GMT # 服务端的响应时间
--- 空行 ---
--- 响应体 ---
<!DOCTYPE html><html lang=“en”></html> # 响应给客户端的数据
  • 说明:每项数据之间使用:\r\n

HTTP/1.1 200 OK\r\n
Server: Tengine\r\n
Content-Type: text/html; charset=UTF-8\r\n
Connection: keep-alive\r\n
Date: Fri, 23 Nov 2023 02:01:05 GMT\r\n
\r\n(响应头信息后面还有一个单独的’\r\n’不能省略)
<!DOCTYPE html><html lang=“en”></html>

HTTP 状态码

状态码类型含义
100信息客户端应该继续发送请求
101信息服务器已经切换协议
200成功请求已经成功,服务器返回了请求的数据
201成功请求已经被成功处理,并创建了新的资源
204成功请求已经成功,但是服务器没有返回任何内容
301重定向请求的资源已经被永久移动到新的位置
302重定向请求的资源已经被临时移动到新的位置
304重定向客户端缓存的资源是最新的,服务器返回了空响应
400客户端错误请求无效,服务器无法理解请求
401客户端错误请求需要认证,客户端没有提供有效的凭据
403客户端错误请求被服务器拒绝,客户端没有访问权限
404客户端错误请求的资源不存在
500服务器错误服务器在处理请求时发生了未知的错误
502服务器错误服务器作为网关或代理,从上游服务器接收到无效的响应
503服务器错误服务器暂时无法处理请求,通常是由于过载或维护
  • 解HTTP状态码的含义和使用方法,可以帮助更好地调试和优化Web应用程序。

要点总结

  • 一个HTTP响应报文是由响应行、响应头、空行和响应体4个部分组成。
  • 响应行是由三部分组成:HTTP协议版本 状态码 状态描述,最常见的状态码是200
    在这里插入图片描述

HTTP协议通信过程查看

在这里插入图片描述

  • 使用浏览器开发者工具
    在这里插入图片描述

标签选项说明

  • 元素(Elements):用于查看或修改HTML标签
  • 控制台 (Console) : 执行JS代码
  • 源代码 (Sources):查看静态资源文件,断点调试JS代码
  • 网络(Network): 查看http协议的通信过程
    在这里插入图片描述
    在这里插入图片描述
  • Headers选项总共有三部分组成:
    • General: 主要信息
    • Response Headers: 响应头
    • Request Headers: 请求头
  • Response选项是查看响应体信息的

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

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

相关文章

矩阵论(Matrix)

​ 大纲 矩阵微积分&#xff1a;多元微积分的一种特殊表达&#xff0c;尤其是在矩阵空间上进行讨论的时候逆矩阵(inverse matrix)矩阵分解&#xff1a;特征分解&#xff08;Eigendecomposition&#xff09;&#xff0c;又称谱分解&#xff08;Spectral decomposition&#xf…

Spark SQL 时间格式处理

初始化Spark Sql package pbcp_2023.clear_dataimport org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions.{current_date, current_timestamp}object twe_2 {def main(args: Array[String]): Unit {val con new …

优秀的时间追踪软件Timemator for Mac轻松管理时间!

在现代社会&#xff0c;时间管理成为了我们工作和生活中的一大挑战。如果你经常感到时间不够用&#xff0c;无法高效地完成任务&#xff0c;那么Timemator for Mac将成为你的得力助手。 Timemator for Mac是一款出色的时间追踪软件&#xff0c;它可以帮助你精确记录和管理你的…

Codeforces Round 786 (Div. 3) D. A-B-C Sort

D. A-B-C Sort 步骤 1 &#xff1a;当 a不为空时&#xff0c;从 a中取出最后一个元素&#xff0c;并将其移动到数组 b的中间。如果 b 当前长度为奇数&#xff0c;则可以选择&#xff1a;将 a 中的元素放到 b 中间元素的左边或右边。结果&#xff0c; a 变空&#xff0c; b 由 n…

【2023.11.24】Mybatis基本连接语法学习➹

基本配置 1.如果使用Maven管理项目&#xff0c;需要在pom.xml中配置依赖。 2.安装Mybatis-3.5.7.jar包 3.进行XML配置&#xff1a;这里将文件命名为mybatis-config.xml 配置数据库连接XML文件 <?xml version"1.0" encoding"UTF-8" ?> <!DO…

数据结构-归并排序+计数排序

1.归并排序 基本思想&#xff1a; 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有序表合并成一个…

Relabel与Metic Relabel

Prometheus支持多种方式的自动发现目标&#xff08;targets&#xff09;&#xff0c;以下是一些常见的自动发现方式&#xff1a; 静态配置&#xff1a;您可以在Prometheus配置文件中直接列出要监测的目标。这种方式适用于目标相对稳定的情况下&#xff0c;例如固定的服务器或设…

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

字节序

计算机硬件有两种储存数据的方式&#xff1a;大端字节序big endian 和 小端字节序 little endian。 数值0x2211使用两个字节储存&#xff1a;高位字节是0x22&#xff0c;低位字节是0x11。 大端字节序&#xff1a;低位放高地址&#xff0c;高位字节在低地址&#xff0c;地址空间…

JDBC编程方法及细节

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言用于连接和操作数据库的API&#xff08;Application Programming Interface&#xff09;。它为开发人员提供了一组Java类和接口&#xff0c;用于与各种关系型数据库进行通信。使用JDBC&#xff0c;开发人…

路径规划之Best-First Search算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之Best-First Search算法 系列文章目录前言一、Best-First Search算法1.1 起源1.2 过程 三、简单使用 前言 Best-First Search算法和Dijkstra算法类似&#xff0c;都属于BFS的扩展或改进 一、…

【Python进阶笔记】md文档笔记第6篇:Python进程和多线程使用(图文和代码)

本文从14大模块展示了python高级用的应用。分别有Linux命令&#xff0c;多任务编程、网络编程、Http协议和静态Web编程、htmlcss、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。 全套md格式笔记和代码自…

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

文章目录 一、collect_set()/collect_list():二、实际运用1、创建测试表及插入数据 :举例1&#xff1a;按照id&#xff0c;cur_day分组&#xff0c;取出每个id对应的所有rule&#xff08;不去重&#xff09;。举例2&#xff1a;按照id&#xff0c;cur_day分组&#xff0c;取出每…

【Unity入门】碰撞检测

碰撞器由来 1.系统默认会给每个对象(GameObject)添加一个碰撞组件(ColliderComponent)&#xff0c;一些背景对象则可以取消该组件。 2.在unity3d中&#xff0c;能检测碰撞发生的方式有两种&#xff0c;一种是利用碰撞器&#xff0c;另一种则是利用触发器。这两种方式的应用非…

左孩子右兄弟(Java详解)

目录 一、题目描述 二、题解 一、题目描述 对于一棵多叉树&#xff0c;我们可以通过“左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。 如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。 换句话说&#xff0c;每个结点可以选任意子结…

论文导读 | 10月专题内容精选:人的预测

编者按 本次论文导读&#xff0c;编者选择了10月份OR和MS上与"人的预测"有关的三篇文章&#xff0c;分别涉及群体智慧的提取&#xff0c;个体序列预测的评估&#xff0c;以及决策者对风险的扭曲感知在分布式鲁棒优化中的应用。其中&#xff0c;从基于"生成式可能…

红队攻防实战之从边界突破到漫游内网(无cs和msf)

也许有一天我们再相逢&#xff0c;睁大眼睛看清楚&#xff0c;我才是英雄。 本文首发于先知社区&#xff0c;原创作者即是本人 本篇文章目录 网络拓扑图&#xff1a; 本次红队攻防实战所需绘制的拓扑图如下&#xff1a; 边界突破 访问网站&#xff1a; http://xxx.xxx.xxx…

Flink 常用物理分区算子(Physical Partitioning)

Flink 物理分区算子(Physical Partitioning) 在Flink中&#xff0c;常见的物理分区策略有&#xff1a;随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)。 接下来&#xff0c;我们通过源码和Demo分别了解每种物理分区算子的作用和区别。 (1) 随机…

2024北京林业大学计算机考研分析

24计算机考研|上岸指南 北京林业大学 特色优势 Characteristics & Advantages&#xff1a;信息学院创建于2001年&#xff0c;是一个年轻而有朝气的学院。学院秉承“结构、特色、质量、创新”的八字方针&#xff0c;坚持以“质量提升、行业融合”为核心的内涵式发展战略&am…

Pycharm创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…