WWW服务器搭建(1)——HTTP协议原理篇

news2024/11/23 0:40:47

目录

一、WWW的相关概念

1.1 WWW的定义

1.2 超文本标记语言HTML

1.3 统一资源定位符URL

1.4 超文本传输协议HTTP

二、HTTP协议工作过程

2.1 DNS解析

2.2 TCP连接过程

2.3 HTTP 请求与响应

2.4 TCP连接断开

三、HTTP请求报文格式

3.1 请求行

3.2 请求头

3.3 空行

3.4 请求体

四、HTTP响应报文格式

4.1 状态行

4.2 响应头

4.3 响应体


一、WWW的相关概念

1.1 WWW的定义

WWW(World Wide Web),即万维网或全球信息网,是集文字、图像、声音和视频等超媒体为一体的分布式信息服务系统,也称为3W、Web。

WWW的表现形式是存储在互联网计算机上的数量巨大的文档的集合,这些文档称为Web页面,它通过超文本标记语言(Hyper Text Markup Language,HTML)把信息组织成图文并茂的超文本,用来描述超媒体。Web页面通过”超链接“从一个页面跳转到另一个页面。

1.2 超文本标记语言HTML

HTML是标准通用标记语言下的一个应用,是一种对文档进行格式化的标记语言。HTML文档的扩展名为.html或.htm,包含大量的标签,用以对网页内容进行格式化和布局,定义页面在浏览器中查看时的外观。

HTML的源文件由一个纯文本文件组成,代码中由许多元素组成,通过浏览器解释这些元素,从而显示各式各样的页面。

例如,下面是一个用户注册表单页面的HTML代码。

<html>
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="./css/ex21.css">
        <title>用户注册</title>
    </head>
    <body>
        <form method="post" action="register.php" onsubmit="return checkForm()" >
            <table class="reg">
                <tr><td class="title" colspan="2">欢迎注册新用户</td></tr>
                <tr><th>用户名:</th><td><input type="text" name="username"></td></tr>
                <tr><th>密码:</th><td><input type="password" name="password" /></td></tr>
                <tr><th>确认密码:</th><td><input type="password" /></td></tr>
                <tr><td colspan="2" class="td-btn">
                <input type="submit" value="提交注册" class="button" />
                <input type="reset" value="重新填写" class="button" />
                </td></tr>
            </table>
        </form>
    </body>
</html>

经过浏览器解释后,得到下图所示的页面。

1.3 统一资源定位符URL

1、定义

统一资源定位符(Uniform Resource Locator,URL)是因特网的万维网服务上用于指定资源位置的访问和表示方法。简单地说,URL就是web地址,俗称“网址”。例如:http://www.example.com/info/1285/128521.htm。

2、URL的格式

URL 的完整格式如下:

协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]

经常见到的URL并不是完整的,因为 URL 中的有些参数是可以省略的。下表是URL中各参数含义:

参数含义
协议类型指定访问资源的方式,常见的有http、https、ftp等
访问资源需要的凭证信息访问时的登录信息(用户名、密码等),例如:ftp://user:123@1.2.3.4
服务器地址IP 地址或域名
端口号表示特定进程或服务,如 http 协议默认是80端口,https 协议默认是443端口
资源层级 UNIX 文件路径表示服务器上资源的路径,如:http://www.example.com/info/1285/test.htm
查询字符串一些键值对,格式:键=值,键值对之间用 & 分割,如 http://www.example.com/ex22/artical.php?id=9&page=12
片段标识符锚链接,用于页面内跳转
1.4 超文本传输协议HTTP

超文本传输协议(HyperText Transfer Protocol,HTTP),一种应用层协议,用于Web 服务器传输超文本到本地浏览器的传输协议。

目前HTTP协议的版本主要包括HTTP1.0、HTTP1.1、HTTP2.0 和HTTP3.0。HTTP3.0 基于 UDP 实现,其他基于 TCP 实现,Web服务器需要监听在80/TCP端口。

HTTP是基于C/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx、IIS等,其客户端的实现程序主要是Web浏览器,例如Firefox、Internet Explorer、Google Chrome、Safari等。

二、HTTP协议工作过程

为便于介绍HTTP协议工作过程,本人模拟了一个实验环境,环境中包括一台Web服务器,一台DNS服务器和一台客户端计算机,配置信息如图所示。假设客户端在浏览器地址栏中输入:http://php.example.com:8888/ex20-finish,访问Web服务器上的页面,下面我们通过使用Wireshark嗅探器,解析此访问过程,来理解HTTP协议的工作过程。

2.1 DNS解析

当用户在浏览器中输入http://php.example.com:8888/ex20-finish,客户端联系DNS服务器,查询Web服务器php.example.com的IP地址,如下图所示。

DNS服务器收到查询请求后,将查询结果返回给客户端,如下图:

2.2 TCP连接过程

HTTP协议是承载在TCP协议之上的,在实验中用到的Web服务器,使用的是TCP的8888端口。当客户端通过DNS查询到Web服务器的IP地址后,便通过TCP三次握手,与Web服务器建立TCP连接。TCP连接建立之后,开始HTTP通信,数据传输结束,双方断开TCP连接。整个通信过程如下图:

其中三次握手捕获的数据包如下图所示:

2.3 HTTP 请求与响应

HTTP由请求和响应构成,是一个标准的客户端服务器模型。HTTP协议都是客户端发起请求,服务器回送响应。本例中,客户端请求访问服务器的http://php.example.com:8888/ex20-finish页面,同时可以看到此页面还加载了其他资源,都是以请求、响应的方式来通信的。

2.4 TCP连接断开

通信结束,首先由服务器申请断开TCP连接,客户端确认,客户端通信结束,向服务器申请断开TCP连接,服务器确认,最终完成通信。

三、HTTP请求报文格式

客户端发送给服务器的请求报文包括请求行、请求头、空行和请求体四个部分组成。

3.1 请求行

请求行包括请求方法、URI和协议版本三个部分,中间用空格分隔。

1、请求方法

请求方法作用
GET用于请求指定资源。GET请求通常用于数据检索,请求的参数通常附加在URL后面。
POST用于向指定资源提交数据以创建或更新资源。POST请求通常包含在请求体中的数据,适用于提交表单或上传文件。
HEAD与GET方法相似,但HEAD不返回消息体,仅返回状态行和消息头。HEAD方法主要用于获取响应的元数据。
PUT用于将数据发送到服务器以创建或更新资源。PUT方法用上传的内容替换目标资源中的所有当前内容。
DELETE用于请求服务器删除指定的资源。DELETE请求会导致服务器删除URI指定的目标资源的所有当前内容。
OPTIONS用于获取当前URL支持的方法列表。OPTIONS请求返回服务器支持的方法列表
CONNECT用于建立到给定URI标识的服务器的隧道,通常用于实现HTTPS连接。
TRACE用于回显服务器收到的请求,主要用于测试或诊断。

2、URI

URL就是HTTP请求资源的地址,它配合消息头的 host 属性共同工作。

3、协议版本

HTTP 有多个版本,目前广泛使用的是 HTTP/1.1 和 HTTP/2,以及正在逐步推广的 HTTP/3。

  • HTTP/1.1:支持持久连接,允许多个请求/响应通过同一个 TCP 连接传输,减少了建立和关闭连接的消耗。

  • HTTP/2:基于二进制分帧,支持多路复用,允许同时通过单一的 HTTP/2 连接发起多重的、独立的、双向的交流。

  • HTTP/3:基于 QUIC 协议,旨在减少网络延迟,提高传输速度和安全性。

3.2 请求头

在HTTP请求报文中,请求头字段是发送 HTTP 请求时使用的首部字段,用于补充请求的额外信息,便于服务器理解请求的内容。如图所示:

1、Host

用于指定被请求资源的服务器和端口号,它通常从HTTP URL中提取出来的。如

Host:php.example.com:8888

2、Connection

keep-alive :当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。如

Connection: keep-alive

close :代表一个请求t完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送请求,需要重新建立TCP连接。

3、User-Agent

通知HTTP服务器,客户端使用的操作系统和浏览器的名称和版本,如

user_agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0

4、Accept

浏览器端可以接受的媒体类型,例如text/html 代表浏览器可以接受服务器回发的类型为 text/html、*/* 代表浏览器可以处理所有类型,使用 q= 权重值指定媒体类型的权重,默认权重为 q=1.0,当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

Accept: 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.7\r\n

5、Content-Type

说明了请求体内对象的媒体类型,如:下面表示的是请求体内容是表单数据。

Content-Type: application/x-www-form-urlencoded

常见的媒体类型有:

媒体类型(值)格式媒体类型(值)格式
text/htmlHTML格式text/plain纯文本格式
text/xmlXML格式image/gifgif图片格式
image/jpegjpg图片格式image/pngpng图片格式
application/xhtml+xmlXHTML格式application/xmlxML数据格式
application/isonJSON数据格式application/pdfpdf格式
application/mswordWord格式application/octet-stream二进制流数据
application/x-www-form-urlencoded表单提交application/atom +xmlAtom xML格式

6、Accept-Encoding

浏览器声明自己接收的编码方法,通常指定压缩方法,作用:是否支持压缩,支持什么压缩方法。如:

Accept-Encoding: gzip, deflate

7、Accept-Language

浏览器声明自己接收的语言。如:

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

8、Uprade-Insecure-Request

表示客户端对HTTPS加密和认证响应良好,可以请求所属网站所有的HTTPS资源。如:

Upgrade-Insecure-Requests: 1

9、Referer

当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器是从哪个页面链接过来的。如:

Referer:http://php.example.com:8888/ex20-finish/
3.3 空行

请求头后面的空行是必须的,空行后面是请求体

3.4 请求体

在HTTP请求报文中,请求体用于向服务器传递数据。与HTTP请求头不同,HTTP请求体通常只在POST、PUT等方法中使用,而在GET等方法中不使用请求体。

HTTP请求体的格式与请求头有所不同,它通常是一个字符串或二进制流,可以携带各种类型的数据,携带的媒体类型不一样,请求体的内容则不相同。 例如,当请求体媒体内容为表单数据时(Content-Type: application/x-www-form-urlencoded),请求体的内容是表单提交数据,如:

username:testuser
password:mypasswd

四、HTTP响应报文格式

HTTP 的响应报文是服务器返回的数据,必须先有请求体再有响应报文。HTTP响应报文包括状态行、响应头、空行和响应体四个部分组成。

4.1 状态行

状态行包括协议版本状态码和有总结代码含义的原因短语三个部分,中间用空格分隔。

1、状态码

HTTP状态码是服务器对客户端请求的响应。HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,分为五类。

状态码编号状态码类型状态码含义
1XX信息性状态码属于提示信息,是协议处理中的⼀种中间状态,实际⽤到的⽐较少。
2XX成功状态码表示服务器成功处理了客户端的请求。
3XX重定向状态码表示客户端请求的资源发送了变动,需要客户端⽤新的 URL 新发送请求获取资源,也就是重定向。
4XX客户端错误状态码表示客户端发送的报⽂有误,服务器⽆法处理。
5XX服务器错误状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误。

HTTP协议共包括42个状态码,其中常见的状态码如下表。

状态码状态码的英文名称中文描述
200OK请求成功。一般用于GET与POST请求。
204No Content与 200OK 基本相同,但响应头没有 body 数据。
206Partial Content应⽤于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,⽽是其中的⼀部分。
301Moved Permanently表示永久定向,说明请求的资源已经不存在了,需改⽤新的 URL 再次访问。响应头⾥使⽤字段 Location ,指明后续要跳转的 URL,浏览器会⾃动定向新的 URL。
302Found表示临时定向,说明请求的资源还在,但暂时需要⽤另⼀个 URL 来访问。响应头⾥使⽤字段 Location ,指明后续要跳转的 URL,浏览器会⾃动定向新的 URL。
304Not Modified不具有跳转的含义,表示资源未修改,定向已存在的缓冲⽂件,也称缓存定向,⽤于缓存控制。
400Bad Request表示客户端请求的报⽂有错误,但只是个笼统的错误。
403Forbidden表示服务器禁⽌访问资源,并不是客户端的请求出错。
404Not Found表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。
500Internal Server Error笼统通⽤的错误码,服务器发⽣了什么错误,并不知道。
501Not Implemented表示客户端请求的功能还不⽀持。
502Bad Gateway通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误。
503Service Unavailable表示服务器当前很忙,暂时⽆法响应服务器。
504GetWay timeout表示网关超时。
505HTTP version not support表示的HTTP协议不支持。

2、原因短语

原因短语,也称为状态文本,它是人类可以阅读的文本,总结了状态码的含义。

4.2 响应头

HTTP 响应头信息是服务器在响应客户端的HTTP请求时发送的一系列头字段,它们提供了关于响应的附加信息和服务器的指令。在实际的 HTTP 响应中可能会有所不同,具体值取决于服务器的配置和处理逻辑。

响应消息中的 HTTP 头系列后放了一个空行,以将响应头与响应体分隔开。

1、Date:响应生成的日期和时间。例如:Date: Sat, 20 Apr 2024 04:44:47 GMT

2、Server:服务器软件的名称和版本。例如:Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9

3、Content-Type:响应体的媒体类型(MIME类型)。例如:Content-Type: text/html

4、Content-Length:响应体的大小,单位是字节。例如:689

5、Content-Encoding:响应体的压缩编码。例如:gzip,deflate等。

6、Content-Language:响应体的语言。例如:zh-CN

7、Content-Location:响应体的 URI。例如:/index.html

8、Content-Range:响应体的字节范围,用于分块传输。例如:bytes 0-999/8000

9、Connection:管理连接的选项,如keep-alive或close,keep-alive 表示连接不会在传输后关闭。

10、Set-Cookie:设置客户端的 cookie。

11、Expires:响应体的过期日期和时间。

12、Last-Modified:资源最后被修改的日期和时间。

13、Location:用于重定向的 URI。

4.3 响应体

对于对成功请求的响应,响应体包含客户端请求的资源,或有关客户端请求的操作状态的某些信息。 对于对不成功请求的响应,响应体可能提供有关错误原因的进一步信息,或有关客户端为了成功完成请求需要执行的某些操作的进一步信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型的数据预处理

文章目录 质量过滤敏感内容过滤数据去重 当收集了丰富的文本数据之后&#xff0c;为了确保数据的质量和效用&#xff0c;还需要对数据进行预处理&#xff0c;从而消除低质量、冗余、无关甚可能有害的数据。一般来说&#xff0c;需要构建并使用系统化的数据处理框架&#xff08;…

第十五节:贪心算法(下)

一 、 贪心算法的解题套路实战一&#xff08;最多的会议宣讲场次&#xff09; 1.1 描述 一些项目要占用一个会议室宣讲&#xff0c;会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间 你来安排宣讲的日程&#xff0c;要求会议室进行的宣讲的场次最多。…

校园志愿者管理系统带万字文档

文章目录 校园志愿者管理系统一、项目演示二、项目介绍三、10000字论文参考四、部分功能页面五、部分代码展示六、底部获取项目源码和万字论文参考&#xff08;9.9&#xffe5;带走&#xff09; 校园志愿者管理系统 一、项目演示 校园志愿者管理系统 二、项目介绍 基于Spring…

快速对比 找出2个名单不同之处

import pandas as pd# 读取两个Excel文件 df1 pd.read_excel(1.xlsx) df2 pd.read_excel(2.xlsx)# 检查两个DataFrame的列是否相同 if list(df1.columns) ! list(df2.columns):print("两个Excel文件的列不一致。")print("文件1的列&#xff1a;", df1.co…

免费思维13招之九:时间型思维

免费思维13招之九:时间型思维 免费思维的另一大战略思维——时间型思维。 什么是时间型思维呢?就是在某一个规定的时间内对消费者进行免费,比如一个月中的某一天,或一周中的某一天或一天中的某一个时间段对消费者进行免费。 就在去年,有一个电影院老板弟子,他的电影院营…

基于SSM的“基于协同过滤的在线通用旅游平台网站”的设计与实现(源码+数据库+文档)

基于SSM的“基于协同过滤的在线通用旅游平台网站”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统主界面 景点信息界面 后台界面 部分源码…

设计循环队列-C语言实现

题目描述 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的…

算法-卡尔曼滤波之为什么要使用卡尔曼滤波器

假设使用雷达来预测飞行器的位置&#xff1b; 预先的假设条件条件: 1.激光雷达的激光束每5s发射一次&#xff1b; 2.通过接受的激光束&#xff0c;雷达估计目标当前时刻的位置和速度&#xff1b; 3.同时雷达要预测下一时刻的位置和速度 根据速度&#xff0c;加速度和位移的…

Spring简介IOCDI

文章目录 Spring简介Spring课程介绍为什么要学学什么怎么学 初识SpringSpring家族Spring发展史 Spring体系结构Spring核心概念目前代码存在的问题核心概念 IOC和DI入门案例IOC入门案例入门案例分析实现步骤实现代码 DI入门案例DI入门案例分析实现步骤实现代码图解演示 Bean的基…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下&#xff1a; 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09; 1、配置清华等镜…

用Arm CCA解锁数据的力量

安全之安全(security)博客目录导读 目录 CCA将如何改变Arm架构呢? 在实践中部署CCA 释放数据和人工智能的全部力量和潜力 早期计算中最大的挑战之一是管理计算资源&#xff0c;以最大化计算效率同时提供给不同程序或用户分配资源的分离。这导致了我们今天大多数使用的时间…

Windows环境下代码文档生成工具Doxygen使用详细教程

背景 最近研究aom源码&#xff0c;发现编译需要依赖Doxygen工具&#xff0c;故此篇博客详细记录下Doxygen的安装和使用。 Doxygen Doxygen 是一个强大的源代码文档生成工具&#xff0c;它支持多种编程语言&#xff0c;能够直接从源代码中的注释提取文档&#xff0c;并生成多…

基于SpringBoot设计模式之创建型设计模式·抽象工厂模式

文章目录 介绍开始架构图&#xff08;以穿搭举例&#xff09;样例一&#xff08;html关于列表和表格的应用&#xff09;定义抽象工厂&#xff08;html&#xff09;定义抽象工厂需要制作抽象产物&#xff08;托盘&#xff09;定义具体工厂&#xff08;列表、表格&#xff09;定义…

Mamba:4 魔幻矩阵A

若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。 ​Mamba自从出道就一直被拿来和Transformer对比…

HIVE卡口流量需求分析

HIVE卡口流量需求分析 目录 HIVE卡口流量需求分析 1.创建表格 插入数据 2.需求 3.总结&#xff1a; 1.创建表格 插入数据 CREATE TABLE learn3.veh_pass( id STRING COMMENT "卡口编号", pass_time STRING COMMENT "进过时间", pass_num int COMMENT …

懒人网址导航源码v3.9

测试环境 宝塔Nginx -Tengine2.2.3的PHP5.6 MySQL5.6.44 为防止调试错误&#xff0c;建议使用测试环境运行的php与mysql版本 首先用phpMyAdmin导入数据库文件db/db.sql 如果导入不行&#xff0c;请直接复制数据库内容运行sql语句也可以 再修改config.php来进行数据库配置…

AI智能体|我把Kimi接入了个人微信

大家好&#xff0c;我是无界生长。 最近加入AI学习交流群的小伙伴越来越多&#xff0c;我打算在微信群接入一个聊天机器人&#xff0c;让它协助管理微信群&#xff0c;同时也帮忙给群友解答一些问题。普通的群聊机器人肯定是不能满足需求的&#xff0c;得上AI大模型&#xff0c…

EPS软件标注点坐标值

1、如下&#xff0c;点击右侧&#xff08;尺寸标注&#xff09;按钮&#xff1a; 2、弹出一个对话框&#xff0c;如下&#xff1a; 3、在上图对话框中设置好箭头样式和小数位数&#xff0c;然后点击图上一点&#xff0c;右击结束再鼠标指定位置&#xff0c;如下&#xff1a; 如…

同城预约上门服务家政小程序

基于Thinkphp和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端、门店端各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式&#xff0c;支持自营…

树莓派|连接CSI接口摄像头+opencv

CSI&#xff08;Camera Serial Interface&#xff09;接口摄像头是一种常见的嵌入式系统或移动设备中使用的摄像头接口。它通常用于与处理器或图像传感器进行直接连接&#xff0c;实现高速的图像数据传输。 CSI接口摄像头具有以下特点&#xff1a; 高速传输&#xff1a;CSI接口…