Web服务器基础 http协议

文章目录

  • 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.serviceapachectl start service httpd start

关闭服务

systemctl stop httpd.serviceapachectl stopservice httpd stop

重新加载

systemctl restart httpd.serviceapachectl restart service httpd restart

查看服务状态

systemctl status httpd

配置文件语法检查

apachectl configtestservice 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 0rpm -q httpd
#查看软件是否安装systemctl start httpd #开启服务cd /var/www/html/     #进入httpd站点文件目录
vim  index.html       #设定默认主页,默认主页名字必须为index.htmlsystemctl 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 -tvim /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:80curl 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.comcurl 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.rhkb.cn/news/106165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器CPU飚高排查

排查思路 当正在运行的Java服务导致服务器的CPU突然飙高时&#xff0c;我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢&#xff1f;我主要提供两个方案&#xff1a; jstackarthas 准备工作 代码准备 现在需要准备一段可以让服务器CPU飙高的代码以及把代码部署…

Go framework-Kratos

目录 一、Go framework 1、Kratos 介绍 1.1、Kratos 框架开发依赖安装 2、初始化 Kratos 项目 3、使用 Protobuf 、生成 Go 代码 3.1、增加proto文件模板 3.2、修改proto文件模板 3.3、根据修改完的模板文件生成客户端代码 3.4、根据修改完的模板文件生成服务端代码 …

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候&#xff0c;遇到这样的问题&#xff0c;比如展会、安防监控等场景下&#xff0c;需要同时播放多路RTMP或RTSP流&#xff0c;这样对设备性能&#xff0c;提出来更高的要求。 虽然我们软解码&#xff0c;已经做的资源占有非常低了…

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

MySQL—MySQL的NULL值是怎么存放的

一、引言 1、MySQL数据存放在哪个文件&#xff1f; 创建一个数据库会产生三种格式的文件&#xff0c;分别是.opt格式、.frm格式、.ibd格式。 opt格式&#xff1a;用来存储当前数据库的默认字符集和字符校验规则。 frm格式&#xff1a;该文件是用来保存每个表的元数据信息的&…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI&#xff08;美国&#xff09; 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码&#xff0c;点击登录。登录成功&#xff0c;如下 3、和ChatGPT对话 开始…

Llama-2大模型本地部署研究与应用测试

最近在研究自然语言处理过程中&#xff0c;正好接触到到大模型&#xff0c;特别是在年初chatgpt引来的一大波AIGC热潮以来&#xff0c;一直都想着如何利用大模型帮助企业的各项业务工作&#xff0c;比如智能检索、方案设计、智能推荐、智能客服、代码设计等等&#xff0c;总得感…

四信5G智慧交通方案

5G是第五代移动通信技术的简称&#xff0c;是具有高速率低时延和大连接特点的新一代宽带移动通信技术&#xff0c;是实现智慧交通中的“车、路、人、环境”等交通要素互联互通的网络基础设施。相比以往的移动通信网络&#xff0c;5G网络以一种灵活部署的架构提供10Gbps以上的带…

Python中的API构建指南:在Flask中进行API开发

原文&#xff1a;Python中的API构建指南&#xff1a;在Flask中进行API开发 - 知乎 如何实现从一个软件与另一个软件的通信交互&#xff1f;就像我们的APP&#xff0c;如何实现微信支付、苹果支付&#xff1f; 其实&#xff0c;我们只需要一个API。 API&#xff08;应用程序编…

4G模组EC20 网卡udhcpc获取IP但是没有设置IP

使能网卡&#xff1a; ifconfig usb0 up dhcp获取ip&#xff0c;虽然没有报error&#xff0c;但是很显然没有设置进配置 获取ip命令&#xff1a;udhcpc -i usb0 非正常现象&#xff1a; 正常现象&#xff1a; 解决方法&#xff1a; &#xff08;1&#xff09;rootfs 创建文件夹…

Qt应用开发(基础篇)——富文本浏览器 QTextBrowser

一、前言 QTextBrowser类继承于QTextEdit&#xff0c;是一个具有超文本导航的富文本浏览器。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655 滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 文…

保姆级使用vmware安装Ubuntu-server版

保姆级VMware安装Ubuntu20服务器版 文章目录 保姆级VMware安装Ubuntu20服务器版前期准备一、安装vmware二、下载Ubuntu镜像 VMware安装Ubuntu201. 启动Workstation Pro或者Workstation Player,进入软件后新建一个虚拟机2. 进入引导界面选择默认的即可3. 点击下一步即可4. 选择操…

AIGC人工智能涉及三十六职业,看看有没有你的职业(二)

文章目录 如何生成IP盲盒 设计儿童节海报 制作商用矢量插画 设计徽章 图片融合 后缀参数 Stylize 风格化 赛博朋克头像 中国风瓷娃娃 生成线稿 制作时尚音乐唱片封面 T恤图案设计-告白气球 引领时尚潮流的服装设计之旅 独一无二的包包奇迹 手机壳设计探险 如何生…

Flink源码之Checkpoint执行流程

Checkpoint完整流程如上图所示&#xff1a; JobMaster的CheckpointCoordinator向所有SourceTask发送RPC触发一次CheckPointSourceTask向下游广播CheckpointBarrierSouceTask完成状态快照后向JobMaster发送快照结果非SouceTask在Barrier对齐后完成状态快照向JobMaster发送快照结…

Linux:权限

目录 一、shell运行原理 二、权限 1.权限的概念 2.文件访问权限的相关设置方法 三、常见的权限问题 1.目录权限 2.umsk(权限掩码) 3.粘滞位 一、shell运行原理 1.为什么我们不是直接访问操作系统&#xff1f; ”人“不善于直接使用操作系统如果让人直接访问操作系统&a…

【网络安全】防火墙知识点全面图解(三)

本系列文章包含&#xff1a; 【网络安全】防火墙知识点全面图解&#xff08;一&#xff09;【网络安全】防火墙知识点全面图解&#xff08;二&#xff09;【网络安全】防火墙知识点全面图解&#xff08;三&#xff09; 防火墙知识点全面图解&#xff08;三&#xff09; 39、什…

vscode 与 C++

序 具体流程的话&#xff0c;官方文档里都有的&#xff1a;C programming with Visual Studio Code 浏览器下载一个mingw64&#xff0c;解压&#xff0c;配置环境变量vscode里安装c相关的插件没了 第一步只看文字&#xff0c;可能有点抽象&#xff0c;相关视频&#xff1a; …

git介绍+集成到IDEA中+使用gitee

目录 git介绍 本地工作流程 IDEA集git 添加到暂存区 添加到本地仓库 gitee使用 添加到远程仓库 git介绍 git是一个开源的分布式版本控制工具&#xff0c;效率高。可以记录历史代码&#xff0c;多人代码共享 知识小点&#xff1a; 集中式版本控制&#xff1a;使用中央存…

RabbitMQ集群搭建和测试总结_亲测

RabbiMQ简介 RabbitMQ是用Erlang开发的&#xff0c;集群非常方便&#xff0c;因为Erlang天生就是一门分布式语言&#xff0c;但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3)镜像模式(把需要的队列…

【力扣每日一题】2023.8.26 汇总区间

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个有序数组&#xff0c;让我们把数组内的元素汇总区间&#xff0c;也就是说有一串数字是连续的&#xff0c;比如是 1 2 3 4…