Web服务器基础 http协议

news2024/11/16 11:58:54

文章目录

  • 1.Web基础
    • 1.1MIME
    • 1.2 URI 和 URL
      • 1.2.1定义
      • 1.2.2两者的区别
  • 2.静态资源和动态资源
    • 2.1 静态资源
    • 2.2 动态资源
  • 3.HTTP协议
    • 3.1HTTP协议简介
    • 3.2HTTP协议的版本及区别
      • 3.2.1http协议版本
      • 3.2.2http1.0和1.1的区别
    • 3.3HTTP请求报文
    • 3.4HTTP请求访问的过程
        • 1、建立连接:
        • 2、接收请求:
        • 3、处理请求:
        • 4、访问资源:
        • 5、构建响应报文:
        • 6、发送响应报文
        • 7、记录日志
    • 3.5HTTP状态码
      • 3.5.1状态码分类
      • 3.5.2常用状态码
    • 3.6HTTP的请求报文和响应报文
      • 3.6.1请求报文
      • 3.6.2响应报文
    • 3.7 HTTP连接优化
  • 4.http概述
    • 4.1 安装软件
    • 4.2 http相关文件
      • 4.2.1配置文件
      • 4.2.2服务单元文件和主服务器程序文件
      • 4.2.3模块文件
      • 4.2.3http服务控制和启动
  • 5.http的常见配置
    • 5.1 虚拟主机
      • 5.1.1功能
      • 5.1.2虚拟主机的实现方案
        • 5.1.2.1基于ip地址
        • 5.1.2.2基于端口地址
        • 5.1.2.3基于域名
  • 6.http协议的三种工作模式
  • 7.cookie和session
    • 7.1cookie
    • 7.2session

1.Web基础

1.1MIME

MIME是一种互联网标准,是一种用于标识文件类型的方法。
MIME类型由一个主类型和一个子类型组成,用斜杠(/)分隔,MIME类型的作用是告诉接收方如何解释和处理接收到的文件

#常见范例

text/plain     #纯文本文件
text/html      #HTML网页文件
text/css       #CSS媒体文件
image/jpeg     #JPEG格式图片文件
image/png      #PNG格式图片文件
video/mp4      #MP4格式音频文件
audio/mpeg     #MP3格式音频文件

1.2 URI 和 URL

1.2.1定义

URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN

URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置

1.2.2两者的区别

定义范围:URI是一个广义的概念,用于标识和命名互联网上的资源,可以是URL、URN或其他形式。URL是URI的一种具体实现形式,用于资源的定位和访问。

功能重点:URI强调资源的标识性,用于唯一标识和命名资源。URL则更注重资源的位置性,其中包含了定位和访问资源所需的详细信息。

URL格式范例:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

2.静态资源和动态资源

静态和动态资源的区别在于需不需要服务器进行二次加工

静态资源无需二次加工即直接使用
但动态资源需要二次加工

2.1 静态资源

静态资源指的是在服务器上保存的文件,其内容在请求和传输过程中不发生变化。

静态资源可以是图片、CSS样式表、JavaScript文件、HTML文件等。

静态资源的请求一般是通过URL直接访问,当客户端发送请求时,服务器直接将这些文件返回给客户端,不进行任何处理。

2.2 动态资源

动态资源则是在服务器端通过执行脚本或程序生成的内容,需要占用服务器的资源。

服务器会根据请求中的参数和数据,执行相应的脚本或程序来生成动态内容,然后将生成的内容返回给客户端。

动态资源可以是动态网页、API接口等。

3.HTTP协议

3.1HTTP协议简介

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应

3.2HTTP协议的版本及区别

3.2.1http协议版本

http 0.9 :服务器只能回应HTML格式字符串,不能回应别的格式

http 1.0 :每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式

http 1.1 :支持持久连接,即在一个TCP连接里面完成多个http请求和响应,但是每个请求和响应是按照顺序一一对应的

http 2.0 :支持完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应( 也支持压缩,服务端主动推送)

3.2.2http1.0和1.1的区别

  • 缓存处理
  • 带宽优化及网络连接的使用
  • 错误通知的管理
  • Host 头处理
  • 长连接

3.3HTTP请求报文

HTTP定义了一组请求方法,用于指定客户端对资源的操作方式

方法名作用
GET获取资源
HEAD获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等
POST传输实体主体 (比如传输 用户名密码)
PUT上传文件(比如写博客)
PATCH对资源进行部分修改
DELETE删除文件
OPTIONS查询支持的方法(查看服务端可以支持哪些方法)
CONNECT要求在与代理服务器通信时建立隧道(类似加密)
TRACE追踪路径

3.4HTTP请求访问的过程

在这里插入图片描述

1、建立连接:

接收或拒绝连接请求

2、接收请求:

接收客户端请求报文中对某资源的一次请求的过程

3、处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

4、访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

5、构建响应报文:

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文

6、发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

3.5HTTP状态码

3.5.1状态码分类

1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误

3.5.2常用状态码

状态码含义
200成功,请求数据通过响应报文的entity-body部分发送;OK
301请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302响应报文Location指明资源临时新位置 Moved Temporarily
304客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
307浏览器内部重定向
401需要输入账号和密码认证方能访问资源;Unauthorized
403请求被禁止;Forbidden
404服务器无法找到客户端请求的资源;Not Found
500服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限
502代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503服务不可用,临时服务器维护或过载,服务器无法处理请求,
504网关超时

3.6HTTP的请求报文和响应报文

3.6.1请求报文

在这里插入图片描述

#request 报文格式 

<method> <request-URL> <version>
<headers>

<entity-body>

第一行为请求行,包含请求方法、请求目标和HTTP协议版本号
第二行为请求头部,包含与请求相关的各种元数据信息

空行用于分隔头部和请求体的空行
第四行为请求体,可选项,包含实际的请求数据
示例:

curl  192.168.67.100|head

在这里插入图片描述

#状态行
> GET / HTTP/1.1
#HTTP GET请求,即获取指定路径的内容,请求的路径为根路径("/"),表示请求服务器的默认页面

#头部字段
> User-Agent: curl/7.29.0
#指定客户端使用的User-Agent,该请求由curl/7.29.0发送
> Host: 192.168.67.100
#指定了要访问的服务器的主机地址
> Accept: */*
#指定了客户端可以接受的响应内容的类型,表示客户端可以接受任何类型的内容

3.6.2响应报文

在这里插入图片描述

response报文格式

<version> <status> <reason-phrase>
<headers>
<entity-body>

第一行为状态行,状态行由协议版本,状态码,状态码描述三部分组成。

第二行为响应头部,响应头包含与响应相关的各种元数据信息。

第三行为空行,用于分隔头部和响应体的空行。

第四行为响应体,可选项,包含实际的响应数据。
示例:
curl -v 192.168.67.100|head

在这里插入图片描述

#响应状态行
HTTP/1.1 403 Forbidden
#表示请求被拒绝 状态403表示请求被禁止

头部字段
Date: Thu, 24 Aug 2023 06:13:43 GMT
#报文的创建时间
Server: Apache/2.4.6 (CentOS)
#服务器程序软件名称和版本
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
#表示所请求资源的最后修改日期和时间
ETag: "1321-5058a1e728280"
#表示所请求资源的实体标签
Accept-Ranges: bytes
#服务器可接受的请求范围类型
Content-Length: 4897
#响应实体主体的长度。
Content-Type: text/html; charset=UTF-8
#实体主体的类型和字符编码,表示响应内容是以UTF-8编码的HTML文本。

3.7 HTTP连接优化

1)并行连接:并行连接通过同时建立多个连接 ,使得客户端可以并发地发送多个请求,以提高并发性和响应速度。

2)持久连接 :持久连接允许客户端和服务器之间在单个连接上发送多个HTTP请求和响应 ,而不是每个请求都要重新建立连接。

3) 管道化连接:管道化连接是一种在持久连接上发送多个请求而无需等待服务器响应 的机制。

4.http概述

4.1 安装软件

yum install -y httpd

4.2 http相关文件

4.2.1配置文件

/etc/httpd/conf/httpd.conf                 #主配置文件

/etc/httpd/conf.d/*.conf                   #子配置文件

/etc/httpd/conf.d/conf.modules.d/          #模块加载的配置文件

检查配置语法:httpd -tapache2 -t
站点网页文档根目录:/var/www/html

4.2.2服务单元文件和主服务器程序文件

服务单元文件

/usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd

主服务器程序文件

/usr/sbin/httpd

4.2.3模块文件

/etc/httpd/modules

/usr/lib64/httpd/modules

4.2.3http服务控制和启动

开机自启和关闭开机自启

systemctl enable httpd.service  #开机自启

systemctl disable httpd.service #关闭开机自启

开启服务

systemctl start httpd.service

apachectl start 

service httpd start

关闭服务

systemctl stop httpd.service

apachectl stop

service httpd stop

重新加载

systemctl restart httpd.service

apachectl restart 

service httpd restart

查看服务状态

systemctl status httpd

配置文件语法检查

apachectl configtest

service httpd configtest

5.http的常见配置

5.1 虚拟主机

5.1.1功能

httpd虚拟主机的作用是通过一个物理服务器来托管多个域名或网站,实现资源共享、个性化配置和多域名指向不同网站的功能,提高服务器资源利用率和降低成本。

5.1.2虚拟主机的实现方案

5.1.2.1基于ip地址

原理
为每个虚拟主机准备至少一个ip地址,并通过服务器软件来指定每个虚拟主机使用的IP地址

示例:
前置准备
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0

rpm -q httpd
#查看软件是否安装

systemctl start httpd #开启服务

cd /var/www/html/     #进入httpd站点文件目录
vim  index.html       #设定默认主页,默认主页名字必须为index.html

systemctl resgtart httpd #重启服务

在这里插入图片描述

mkdir ip1
#创建新目录

vim .ip1/index.html
#新的测试网页

在这里插入图片描述

#新建一个除了IP地址不同的配置文件
vim  /etc/httpd/conf.d/ipv.conf

注:网址是需要真实存在的

在这里插入图片描述

httpd -t
#测试是否有错误

在这里插入图片描述

vim   /etc/httpd/conf/httpd.conf   #编辑主配置文件

ServerName www.example.com:80 #添加到主配置文件中

在这里插入图片描述

保存后再次尝试
httpd -t

在这里插入图片描述

示例

配置192.168.67.101为示例
vim /etc/httpd/conf/httpd.conf

在这里插入图片描述
在这里插入图片描述

mkdir /var/www/html/scj #创建所需目录

httpd -t

vim /var/www/html/scj/index.html #编辑主页

systemctl restart httpd
#重新加载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
记得刷新

5.1.2.2基于端口地址

原理
每个虚拟主机使用同一个IP地址,但使用不同的端口号来区分。
这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。

示例

前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务

vim /etc/httpd/conf/httpd.conf
#编辑配置文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

vim scj1/index.html
#编辑主页

在这里插入图片描述

httpd -t
#查看是否有错误

在这里插入图片描述

systemctl restart httpd
#重启服务

curl 192.168.67.100:80

curl 192.168.67.10:8080

在这里插入图片描述

5.1.2.3基于域名

原理
服务器软件根据请求头中的主机名(域名)来区分虚拟主机。

这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。

示例

前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务

vim /etc/httpd/conf/httpd.conf
#编辑配置文件

在这里插入图片描述
在这里插入图片描述

vim scj2/index.html
#添加新路径

在这里插入图片描述

httpd -t
#排错

在这里插入图片描述

vim /etc/hosts
#编辑本地hosts文件,添加地址映射

在这里插入图片描述

systemctl restart httpd
#重启服务

curl www.scj1.com

curl www.scj2.com

在这里插入图片描述

6.http协议的三种工作模式

①prefork:一对一模式,处理一个请求开启一个进程,缺点是httpd服务进程数有上限。

②worker:一对多模式,规定一个进程处理多少个请求,缺点是处理完自己的请求空闲不会告知服务器。

③event:一对多模式,且有一个监听进程,若有处理完请求的空闲进程会通知服务器分配新的请求。

7.cookie和session

Cookie和Session用于解决http协议无状态。

7.1cookie

Cookie是一种在客户端(通常是Web浏览器)存储数据的小文件。它由服务器在HTTP响应中发送给客户端,并在后续的请求中由客户端发送回服务器。Cookie通常用于跟踪和标识用户会话,以提供个性化的服务或记录用户在网站上的活动。

7.2session

Session是指在一段时间内,用户与某个系统或应用之间的交互过程。在Web开发中,会话通常用于跟踪用户在网站上的活动状态,以便提供个性化的服务、记录用户的操作等。

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

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

相关文章

word 调整列表缩进

word 调整列表缩进的一种方法&#xff0c;在试了其他方法无效后&#xff0c;按下图所示顺序处理&#xff0c;编号和文字之间的空白就没那么大了。 即右键word上方样式->点击修改格式->定义新编号格式->字体->取消勾选 “……对齐到网格”->确定

微服务框架 go-zero logx 日志组件剖析

addTenant api 和 rpc 的实现 上一篇我们说到咱们还剩下 addTenant 功能还未实现&#xff0c;不知道有没有兄弟感兴趣去实验一波的&#xff0c;本篇文章进行简要补充 根据上一篇文章分析&#xff0c;其实我们只需要执行如下几步即可&#xff1a; 编写 tenant.api&#xff0c…

Vue3.0极速入门 - 登录demo

Talk is cheap, Show the code 在完成npm和vue的环境安装&#xff0c;并了解了基本的目录和文件结构以后&#xff0c;直接写一个带登录和首页的demo做示例&#xff0c;快速了解一个vue工程的创建和基本的页面跳转 第一步创建工程 1、选择手动模式创建工程 npm create app-…

工地扬尘自动监测识别算法

工地扬尘自动监测识别系统通过yolov7python网络模型深度学习算法模型&#xff0c;扬尘自动监测识别算法能够全天候、全方位地观测扬尘情况。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和通道乘数。然后&#xff0c;每个…

prometheus + grafana进行服务器资源监控

在性能测试中&#xff0c;服务器资源是值得关注一项内容&#xff0c;目前&#xff0c;市面上已经有很多的服务器资 源监控方法和各种不同的监控工具&#xff0c;方便在各个项目中使用。 但是&#xff0c;在性能测试中&#xff0c;究竟哪些指标值得被关注呢&#xff1f; 监控有…

SQL语法与DDL语句的使用

文章目录 前言一、SQL通用语法二、DDL语句1、DDL功能介绍2、DDL语句对数据库操作&#xff08;1&#xff09;查询所有数据库&#xff08;2&#xff09;查询当前数据库&#xff08;3&#xff09;创建数据库&#xff08;4&#xff09;删除数据库&#xff08;5&#xff09;切换数据…

【Linux-Day8- 进程替换和信号】

进程替换和信号 问题引入 我们发现 终端输入的任意命令的父进程都是bash,这是因为Linux系统是用fork()复制出子进程&#xff0c;然后在子进程中调用替换函数进行进程替换&#xff0c;实现相关命令。 &#xff08;1&#xff09; exec 系列替换过程&#xff1a;pcb 使用以前的只…

开源项目的资金来源:捐赠、赞助与商业模式

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

C语言(第三十一天)

6. 调试举例1 求1!2!3!4!...10!的和&#xff0c;请看下面的代码&#xff1a; #include <stdio.h> //写一个代码求n的阶乘 int main() {int n 0;scanf("%d", &n);int i 1;int ret 1;for(i1; i<n; i){ret * i;}printf("%d\n", ret);return …

delphi7创建DLL步骤方法

delphi7创建DLL步骤方法1.打开delphi7,点击File/New/Other...,如下图&#xff1a; 2.选择New/DLL Wizard,如下图&#xff1a; 3.起一个项目名称&#xff0c;然后点击File/SaveAll,这里以TestDll为例&#xff0c;如下图&#xff1a; 4.新建一个单元文件File/New/Unit,保存…

Vue2向Vue3过度核心技术插槽

目录 1 插槽-默认插槽1.作用2.需求3.问题4.插槽的基本语法5.代码示例6.总结 2 插槽-后备内容&#xff08;默认值&#xff09;1.问题2.插槽的后备内容3.语法4.效果5.代码示例 3 插槽-具名插槽1.需求2.具名插槽语法3.v-slot的简写4.总结 4 作用域插槽1.插槽分类2.作用3.场景4.使用…

C语言(第三十二天)

1. 递归是什么&#xff1f; 递归是学习C语言函数绕不开的一个话题&#xff0c;那什么是递归呢&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 写一个史上最简单的C语言递归代码&#xff1a; #include <stdio.h>…

拼多多anti-token分析

前言&#xff1a;拼多多charles抓包分析发现跟商品相关的请求头里都带了一个anti-token的字段且每次都不一样,那么下面的操作就从分析anti-token开始了 1.jadx反编译直接搜索 选中跟http相关的类对这个方法进行打印堆栈 结合堆栈方法调用的情况找到具体anti-token是由拦截器类f…

wazuh环境配置和漏洞复现

1.wazuh配置 虚拟机 &#xff08;OVA&#xff09; - 替代安装 (wazuh.com)在官方网页安装ova文件 打开VMware选择打开虚拟机&#xff0c;把下载好的ova文件放入在设置网络改为NAT模式 账号:wazuh-user 密码:wazuh ip a 查看ip 启动小皮 远程连接 账号admin …

Vue2向Vue3过度Vuex核心概念getters

目录 1 核心概念 - getters1.定义getters2.使用getters2.1原始方式-$store2.2辅助函数 - mapGetters 2 使用小结 1 核心概念 - getters 除了state之外&#xff0c;有时我们还需要从state中筛选出符合条件的一些数据&#xff0c;这些数据是依赖state的&#xff0c;此时会用到get…

数据结构(Java实现)-二叉树(下)

获取二叉树的高度 检测值为value的元素是否存在(前序遍历) 层序遍历 判断一棵树是不是完全二叉树 获取节点的路径 二叉树的最近公共祖先

小研究 - JAVA 虚拟机内存使用优化研究与应用

Java 虚拟机在运行 Java 应用程序的查询操作时&#xff0c;存在由于查询结果数据量大和查询并发性高而出现系统不稳定的问题。提出了一种 JVM 内存使用优化方案&#xff1a;恒定使用 JVM 内存&#xff0c;能够在不提高硬件成本的情况下&#xff0c;保证系统连续稳定地运行。 目…

c++的分文件编写

前言 在C中&#xff0c;你可以将代码分割成多个文件来提高可维护性和组织性。分割文件有助于将代码模块化&#xff0c;使大型项目更易于管理。以下是C中关于分文件的一些规则和概念&#xff1a; 理论知识 头文件&#xff08;Header Files&#xff09;&#xff1a; 头文件通常…

深入理解 C++ 中的 std::cref、std::ref 和 std::reference_wrapper

深入理解 C 中的 std::cref、std::ref 和 std::reference_wrapper 在 C 编程中&#xff0c;有时候我们需要在不进行拷贝的情况下传递引用&#xff0c;或者在需要引用的地方使用常量对象。为了解决这些问题&#xff0c;C 标准库提供了三个有用的工具&#xff1a;std::cref、std:…

2023年 Java 面试八股文下(20w字)

目录 1.1 面试过程最关键的是什么&#xff1f; 1.2 面试时该怎么说&#xff1f; 1.3 面试技巧 1.3.1 六个常见问题 1.3.2 两个注意事项 1.3.3 自我介绍&#xff08;控制在4分半以内&#xff0c;不超过5分钟&#xff09; 手写代码 2.1 冒泡排序&#xff08;Bubble Sort&…