HTTP的详细介绍

目录

一、HTTP 相关概念

二、HTTP请求访问的完整过程

1、 建立连接

2、 接收请求

3、 处理请求

3.1 常见的HTTP方法

3.2 GET和POST比较

4、访问资源

5、构建响应报文

6、发送响应报文

7、记录日志

三、HTTP安装组成

1、常见http 服务器程序

2、apache介绍和特点

2.1 apache 功能:

2.2 apache特性:

3、MPM multi-processing module 工作模式


一、HTTP 相关概念

  • 互联网:是网络的网络,是所有类型网络的母集

  • 因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。

  • 万维网:WWW(world wide web)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库,使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(超链技术),具有提供分布式服务的特点。万维网是一个分布式的超媒体系统,是超文本系统的扩充,基于B/S架构实现

  • URL:万维网使用统一资源定位符(Uniform Resource Locator)来标志万维网上的各种文档,并使每个文档在整个因特网的范围内具有唯一的标识符URL。URL描述了你需要资源的具体位置在什么地方。

  • HTTP:为解决"用什么样的网络协议来实现整个因特网上的万维网文档”这一难题,就要使万维网客户程序(以浏览器为主,但不限于浏览器)与万维网服务器程序之间的交互遵守严格的协议,即超文本传送协议(HyperText Transfer Protocol)。HTTP是处于应用层的协议,使用TCP传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP(80/TCP)和 HTTPS(443/TCP)的传输协议,但因特网还有其他的网络应用系统(如:FTP、SMTP等等)。

HTTP 已经演化出了很多版本,它们中的大部分都是向下兼容的

  1. HTTP/0.9:已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。
  2. HTTP/1.0:这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。
  3. HTTP/1.1:引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,能很好地配合代理服务器工作。还支持管道方式机制,即在同一个TCP连接里面,客户端可以同时发送多个请求,以便降低线路负载,提高传输速度。
  4. HTTP/2.0:完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。引入了头信息压缩机制,使用gzip或compress压缩后再发送。支持服务端推送,允许服务器未经请求,主动向客户端发送资源。
  • HTML:为了解决"怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接”这一问题,万维网使用超文本标记语言(HyperText Markup Language),使得万维网页面的设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,并且能够在自己的主机品目上将这些页面显示出来。HTML与txt一样,仅仅是是一种文档,不同之处在于,这种文档专供于浏览器上为浏览器用户提供统一的界面呈现的统一规约。且具备结构化的特征,这是txt所不具备的强制规定。

二、HTTP请求访问的完整过程

  1. 建立连接

  2. 接收请求

  3. 处理请求

  4. 访问资源

  5. 构建响应报文

  6. 发送响应报文

  7. 记录日志

1、 建立连接

接收或者拒绝连接请求

2、 接收请求

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

Web访问响应模型(Web I/O)

  • 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求

  • 复用I/O结构:启动一个进程,同时响应N个连接请求

  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

3、 处理请求

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

常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

3.1 常见的HTTP方法

HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。

每条 HTTP 请求报文都包含一个方法, 告诉服务器要执行什么动作,包括:获取一个页面,运行一个网关程序,删除一个文件等。

最常用的获取资源的方法是 GET、POST、PUT。

HTTP 方法描述
GET   对服务器资源获取的简单请求
PUT向服务器提交数据,以修改数据
DELETE删除服务器上的某些资源
POST  用于发送包含用户提交数据的请求
HEAD  请求页面的首部,获取资源的元信息

3.2 GET和POST比较

GET 方法

  • 从指定的服务器上获得数据
  • GET请求能被缓存
  • GET请求会保存在浏览器的浏览纪录里
  • GET请求有长度的限制
  • 主要用于获取数据
  • 查询的字符串会显示在URL后缀中,不安全

POST 方法

  • 提交数据给指定服务器处理
  • POST请求不能被缓存
  • POST请求不会保存在浏览器的浏览纪录里
  • POST请求没有长度限制
  • 查询的字符串不会显示在URL中,比较安全

4、访问资源

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

5、构建响应报文

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:

描述了响应主体MIME类型的Content-Type首部

描述了响应主体长度的Content-Length

实际报文的主体内容

2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径

3)MIME类型: Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型

与资源管理起来

  • 魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时

  • 显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型

  • 类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"

6、发送响应报文

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

7、记录日志

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

三、HTTP安装组成

http 服务基于 C/S 结构

1、常见http 服务器程序

  • httpd apache,存在C10K(10K connections)问题

  • nginx 解决C10K问题lighttpd

  • tomcat .jsp 应用程序服务器

  • IIS .asp 应用程序服务器

  • jetty 开源的servlet容器,基于Java的web容器

  • Resin CAUCHO公司,支持servlets和jsp的引擎

  • webshpere:IBM公司

  • weblogic:BEA,Oracle

  • jboss:RedHat,IBM

  • oc4j:Oracle

HTTP服务器市场占有率统计: Netcraft | Leader in Phishing Detection, Cybercrime Disruption and Website Takedown

2、apache介绍和特点

2.1 apache 功能:

  • 提供http协议服务

  • 多个虚拟主机:IP、Port、FQDN

  • 用一台物理服务器搭建多个网站,百度 jd 淘宝

  • CGI:Common Gateway Interface,通用网关接口,支持动态程序

  • 反向代理

  • 负载均衡

  • 路径别名

  • 丰富的用户认证机制:basic,digest

  • 支持第三方模块

2.2 apache特性:

  • 高度模块化:core + modules

  • DSO:Dynamic Shared Object 动态加载/卸载

  • MPM:multi-processing module 多路处理模块

总结

功能多,稳定,处理静态资源优秀

3、MPM multi-processing module 工作模式

prefork:多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求

Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

  • 优点:稳定
  • 缺点:慢,占用资源,不适用于高并发场景

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。

  • 优点:相比prefork 占用的内存较少,可以同时处理更多的请求
  • 缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

event:事件驱动模型(worker模型的变种),CentOS8 默认模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

event MPM是Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型. 属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP连接)

  • 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放
  • 缺点:没有线程安全控制

httpd-2.4:event 稳定版,centos7 以后默认

httpd-2.2:event 测试版,centos6 默认

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

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

相关文章

Idea中使用git将多次提交记录合并成一次提交记录

一、查看Idea中的提交记录 查看Idea中的提交记录,我们希望将新增了bbb.txt、新增了ccc.txt、新增了ddd.txt,这三次提交记录合并成一次提交记录。 二、使用Interactively Rebase from Here进行合并 2.1、把鼠标放在新增了bbb.txt这次提交记录上并右键单击 把鼠标放…

文件上传漏洞--Upload-labs--Pass17--条件竞争

一、条件竞争原理(结合代码审计) 1、首先进行代码审计,查看源代码。 我们可知,将文件上传至服务器后,不会被立即删除,而是做短暂的停留,中间会有一小部分时间差,这部分时间差是代码…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月21日,星期三

每天一分钟,知晓天下事! 2024年2月21日 星期三 农历正月十二 1、 央行:5年期LPR下调25个基点至3.95%。100万元房贷30年少还5.2万元。 2、 民航局等四部门明确:到2025年,机场噪声污染防控标准体系基本建成。 3、 应急…

云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)

在当今的云服务市场中,阿里云、腾讯云、华为云和百度智能云都是领先的云服务提供商,他们都提供了全套的云数据库服务,其中 Redis属于RDS 之后第二被广泛应用的服务,本次测试旨在深入比较这四家云服务巨头在Redis云数据库性能方面的…

相机图像质量研究(25)常见问题总结:CMOS期间对成像的影响--过曝、欠曝

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

欲速则不达,慢就是快!

引言 随着生活水平的提高,不少人的目标从原先的解决温饱转变为追求内心充实,但由于现在的时间过得越来越快以及其他外部因素,我们对很多东西的获取越来越没耐心,例如书店经常会看到《7天精通Java》、《3天掌握XXX》等等之类的书籍…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-23-处理select下拉框-下篇

1.简介 上一篇中宏哥主要讲解和分享了一下,我们常见或者传统的select下拉框的操作,但是近几年又出现了了一种新的select下拉框,其和我们传统的select下拉框完全不一样,那么我们如何使用playwright对其进行定位操作了。宏哥今天就…

[word] 如何将word文本转换成表格? #知识分享#学习方法#媒体

如何将word文本转换成表格? 如何将word文本转换成表格?不管是Word入门新手还是老手,相信这个技巧会让你更加熟练Word,操作起来得心应手! 1.文本转换成表格 同样的要怎么把一堆凌乱的数据转换成表格呢?这里…

Java基础常用API(1)

文章目录 1:API 概述1.1 API概述和课程安排1.2 包和导包 2:Scanner2.1 Scanner基本使用2.2 练习(数据求和) 3:Random3.1 Random基本使用3.2 练习(猜数字游戏) 1:API 概述 1.1 API概述和课程安排 我们在讲解面向对象的时候&#…

NestJS入门6:日志中间件

前文参考: NestJS入门1 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger 1. 安装 nest g middleware logger middleware​ ​ ​ 2. lo…

嵌入式linux开发之LAN8720A网络驱动

网络硬件组成 OSI模型和TCP/IP模型的对比 嵌入式网络硬件分为两部分:MAC 和 PHY。 MAC(Medium Access Control)和PHY(Physical Layer)是计算机网络领域中常见的术语,通常用于描述数据链路层(…

java数据结构与算法刷题-----LeetCode503. 下一个更大元素 II

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 解题思路:时间复杂度和空间复杂度都是O(n) 此题是739题的衍生题…

Python学习-流程图、分支与循环(branch and loop)

十、流程图 1、流程图(Flowchart) 流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来。 好处: 1)代码的指导文档 2)有助…

Mountain Environment - Dynamic Nature

包含超过470个环境预制件,要运行HD或URP,将包导入到HD或URP项目中,然后在“HD和URP支持”文件夹中的资源中导入支持包。它将替换着色器、预制件和网格,以便它们可以与RP一起使用。另请检查该文件夹中的自述文件。 此包是: 100%扫描资产的大型图书馆,经过精心优化、分类和…

读书笔记之《查理芒格的智慧》:如何建立跨学科的思维模型?

《查理芒格的智慧—投资的格栅理论》作者是[美] 罗伯特哈格斯特朗Robert G. Hagstrom, 原作名: Investing: The Last Liberal Art,于2015年出版。 罗伯特哈格斯特朗Robert G. Hagstrom:美盛投资顾问公司首席投资策略师、董事总经理。本科与硕…

vue 常用库

vue-cropper 一个优雅的图片裁剪插件 dayjs Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样 NutUI-Bingo 基于 NutUI 的抽奖组件库,助力营销活动和小游戏场景。

”戏说“ 交换机 与 路由器

一般意义上说 老哥 这文章发表 的 东一榔头 西一锤 呵呵, 想到哪里就啰嗦到哪里 。 交换机: 其实就是在通道交换 路由器: 不光是在通道交换还要在协议上交换 下图你看懂了吗? (仅仅数据交换-交换机 协议…

实习日志20

1.找了很多sm3、sm4加密算法相关的库 1.1.sm4算法编码和解码可以在webstorm中直接执行 1.2.封装的真好,活字格里用不了一点 1.3.把sm3和sm4加密算法源码读透后剥离出来加入到活字格的资源管理器中即可使用 把调用函数改为活字格支持的普通函数 2.sm3加密改法 2.…

vue3组件通信方式汇总

前言:本文默认读者有JS基础和Vue基础,如果没有这个两个基础,可能阅读比较困难,建议先看下官方文档,当然,也欢迎评论交流😁 通信方式总结 常见搭配形式 一、props(使用频率最高&#…

PNPM 批量检查和更新项目依赖

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…