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

目录

一、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 响应体

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

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

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

相关文章

全国防灾减灾日主题活动投稿我可算找对了投稿方法

作为一名社区公众人员,我深知对外信息宣传的重要性。特别是在全国防灾减灾日这样的特殊时刻,我们不仅要向居民普及防灾减灾知识,还要通过媒体将社区的活动和成果展示给更多人。然而,在投稿的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发…

【JavaWeb】网上蛋糕商城后台-客户管理

概念 上文中已讲解和实现了后台管理系统中的订单管理功能&#xff0c;本文讲解客户信息管理功能。 客户信息列表 在后台管理系统的head.jsp头部页面中点击“客户管理”向服务器发送请求 在servlet包中创建AdminUserListServlet类接收浏览器的请求 package servlet;import m…

特征提取与深度神经网络(二)

关键点/角点检测 2011论文-ORB关键点检测&#xff0c;比SIFT与SURF速度更快。 ORB算法可以看出两个部分组成&#xff1a;快速关键点定位BRIEF描述子生成 Fast关键点检测&#xff1a; 选择当前像素点P&#xff0c;阈值T&#xff0c;周围16个像素点&#xff0c;超过连续N12个像素…

Vue 局部布局 Layout 内部布局 [el-row]、[el-col]

之前的布局容器是一个整体的框架&#xff0c;layout里面的布局其实就是el-row和el-col的组合。 基础布局 使用单一分栏创建基础的栅格布局。 通过 ​row ​和 ​col ​组件&#xff0c;并通过 ​col ​组件的 ​span ​属性我们就可以自由地组合布局。 这种最简单&#xff0c;…

【Unity Animation 2D】Unity Animation 2D骨骼绑定与动画制作

一、图片格式为png格式&#xff0c;并且角色各部分分离 图片参数设置 需要将Sprite Mode设置为Single&#xff0c;否则图片不能作为一个整体 1、创建骨骼 1.1 旋转Create Bone&#xff0c;点击鼠标左键确定骨骼位置&#xff0c;移动鼠标再次点击鼠标左键确定骨骼&#xff0c…

【知识碎片】2024_05_13

本文记录了两道代码题【自除数】和【除自身以外数组的乘积】&#xff08;利用了前缀积和后缀积&#xff0c;值得再看&#xff09;&#xff0c;第二部分记录了关于指针数组和逗号表达式的两道选择题。 每日代码 自除数 . - 力扣&#xff08;LeetCode&#xff09; /*** Note: T…

☀☀☀☀☀☀☀有关栈和队列应用的oj题讲解☼☼☼☼☼☼☼

准备好了么 目录&#xff1a; 一用两个队列实现栈&#xff1a; 1思路&#xff1a; 2画图理解&#xff1a; 3代码解答&#xff1a; 二用两个栈实现队列&#xff1a; 1思路&#xff1a; 2画图理解&#xff1a; 3代码解答&#xff1a; 三设计循环队列&#xff1a; 1思路…

MySQL5.7压缩包安装图文教程

一、下载 https://dev.mysql.com/downloads/mysql/ 选择5.7版本 二、解压 下载完成后解压&#xff0c;解压后如下&#xff08;zip是免安装的&#xff0c;解压后配置成功即可使用&#xff09; 注意&#xff1a;只有5.6以前的版本才有在线安装&#xff08;install msi&#xf…

网页如何集成各社区征文活动

Helllo , 我是小恒 由于我需要腾讯云社区&#xff0c;稀土掘金以及CSDN的征文活动RSS&#xff0c;找了一下没发现&#xff0c;所以使用GET 请求接口对网页定时进行拉取清洗&#xff0c;甚至无意间做了一个简单的json格式API 最终网址:hub.liheng.work API:http://hub.liheng.wo…

李廉洋:5.13黄金原油美盘行情分析,必看策略。

黄金消息面分析&#xff1a;机构最新调查中的一些受访者表示&#xff0c;美国最大的科技股不仅是对创新行业的押注&#xff0c;而且可能是对冲通胀的工具。46%的受访者表示&#xff0c;数十年来一直是避险之选的黄金仍被视为抵御价格上涨风险的最佳保障。但近三分之一的人表示&…

前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言 &#x1f44b;一、Nginx简介 &#x1f4da;二、常见的Web服务器架构 &#x1f300;&#x1f4cc; 架构概述&#x1f4cc; Nginx的深入探讨 三、正向代理与反向代理 &#x1f52e;&#x1f4cc; 正向代理工作原理&#…

深度解读《深度探索C++对象模型》之虚继承的实现分析和效率评测(一)

目录 前言 具有虚基类的对象的构造过程 通过子类的对象存取虚基类成员的实现分析 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎左下角点击关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#xff0c;或文章末…

docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口

docker端口映射不生效的问题解决 问题 使用docker run -p 88848:8848后&#xff0c;显示容器启动正常&#xff0c;并且使用docker logs –f xxx能够看到容器可以正常启用&#xff0c;docker ps 可以看到容器启动成功&#xff0c;并且端口已经映射,但是在浏览器访问相关地址&am…

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy&#xff08;字符串拷贝&#xff09;1.函数使用2.模拟实现 二.strcat&#xff08;字符串追加&#xff09;1.函数使用2.模拟实现 三.strcmp&#xff08;字符串比较&#xff09;1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.…

调剂”小清华“、不保护一志愿?——兰州大学25计算机考研考情分析

兰州大学&#xff08;Lanzhou University&#xff09;&#xff0c;简称“兰大”&#xff0c;是中华人民共和国教育部直属 全国重点大学&#xff0c;中央直管副部级建制&#xff0c;位列国家首批“双一流(A 类)”、“211 工 程”、“985 工程”大学行列&#xff0c;入选国家“珠…

电机及FOC算法介绍

一.电机概述 1.电机的简介 电机是一种可以在电能和机械能的之间相互转换的设备&#xff0c;其中发电机是将机械能转换为电能&#xff0c;电动机是将电能转换为机械能。发电机的主要用于产生电能&#xff0c;用途单一&#xff0c;但是电动机主要用于产生机械能&#xff0c;用途…

外卖 点金推广实战课程,2024外卖 点金推广全流程(7节课+资料)

课程内容&#xff1a; 外卖点金推广实操课程 资料 01 1-了解外卖.mp4 02 第一节:点金推广的说明.mp4 03 第二节:如何降低点金推广的成本,mp4 04 第三节:如何计算点金推广的流速,mp4 05 第四节:如何提升点金的精准度,mp4 06 第五节:点金推广实操,mp4 07 点金推广高级教程…

几种IO模型

部分图来自网络和黑马程序员 IO IO分为两个阶段&#xff1a;数据准备&#xff08;数据读取到内核缓冲区&#xff09;数据拷贝&#xff08;从内核缓冲区拷贝到用户空间&#xff09; 例如&#xff0c;在下图中两个主机的通信中&#xff0c;程序A/B从TCP接收缓冲区读取数据时&am…

Vue3实战笔记(13)—pinia安装笔记

文章目录 前言安装和配置pinia总结 前言 Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。 Pinia是一个轻量级的状态管理库&#xff0c;它专注于提供一个简单的API来管理应用程序的状态。相比之下&#xff0c;Vuex是一个更完整的状态管理库&#xf…

视频模糊变清晰,这13个工具总有一个能帮到你,收藏好

1、Topaz Video Enhance AI 这是一款非常专业的视频分辨率放大软件&#xff0c;使用来自多个帧的信息来实现视频升级、去噪、去隔行扫描和恢复的结果。 Topaz Video Enhance AI可以将视频放大和增强8K分辨率的镜头&#xff0c;并提供真实的细节和动作一致性。它采用AI技术实现…