Http服务基础原理
http服务相关解释
http : Hyper Text Transfer Protocol, 80/tcp
超文本传输协议,基于tcp传输协议的80端口传输
html: Hyper Text Markup Language 超文本标记语言,编程语言.(和普通文本不同的是带各种标签使得浏览器能够解析成特定样式)
MIME: 多用途互联网邮件扩展 /etc/mime.types
格式: major/minor text/plain text/html
每个值包括一级 类型和二级类型,预定义的类型,也可自定义类型
http协议介绍
http/0.9 原型版本,只有一个命令GET 服务器只能回应HTML格式字符串,不能回应别的格式
http/1.0 支持cache MIME,method
每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭.如果还要请求其它资源,就必须再次新建一个TCP连接
支持返回多种类型的数据,而不仅仅是HTML格式字符串
服务器一般是以文件后缀名来设置返回数据类型,如果没有文件后缀名服务器就会首先获取一下返回文件的文件类型
http/1.1
引入了持久连接,即建立一个TCP连接后默认不关闭,可以被多个http请求复用,如果在一定时间内客户端没有发送任何请求再断开TCP连接.
引入了管道机制,即在同一个TCP连接中,客户端可以同时发送多个HTTP请求
在同一个TCP连接里,所有的数据通信都是按照次序进行的,服务器只能顺序处理回应,前面的回应慢,就会造成许多请求排队.造成对头堵塞
http/2.0
头信息和数据体都是二进制,称为头信息帧和数据帧
复用TCP连接,在一个连接里,客户端和服务器可以同时发送多个请求或者回应而且可以不按照顺序一一对应
引入头信息压缩机制(header compression),头信息使用gzip或compress压缩 后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个 表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
HTTP工作机制
工作机制:
http请求:http request
http响应:http response
一次http事务:请求<-->响应
Web资源:web resource
一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资 源都要单独请求.因此,一个“Web 页面”通常并不是单个资源,而是一组资源的集合
提高HTTP连接性能
并行连接:通过多条TCP连接发起并发的HTTP请求
持久连接:keep-alive,长连接,重用TCP连接,以消除连接和关闭的时延,以事 务个数和时间来决定是否关闭连接
管道化连接: 通过共享TCP连接发起并发的HTTP请求
复用的连接: 交替传送请求和响应报文(实验阶段)
串行连接(一个TCP连接对应一个HTTP请求)
并行连接(同时建立多个TCP连接,每个TCP连接承载一个HTTP请求)
持久连接(多个HTTP请求共用一个TCP连接)
管道化持久连接(在同一个TCP连接中同时并发的发起多个HTTP请求)
URI 统一资源标识符,由URL和URN组成
URN 统一资源名称 (资源的名称)
URL 统一资源定位符 服务器资源的唯一访问路径
Web访问响应模型
1.单进程IO模型
启动一个进程处理用户请求,而且一次只能处理一个,多个请求被串行响应
2.多进程IO模型
并行启动多个进程,每个进程响应一个连接请求
3.IO复用模型
多线程模型:一个进程生成N个线程,每线程响应一个连接请求
事件驱动:一个进程处理N个请求
4.复用的多进程IO模型
启动M个进程,每个进程响应N个连接请求,同时接收M*N 个请求
HTTP协议首部
首部的分类:
通用首部: 请求报文和响应报文两方都会使用的首部
Date: 报文的创建时间
Connection:连接状态,如keep-alive, close
Via:显示报文经过的中间节点(代理,网关)
Cache-Control:控制缓存,如缓存时长
MIME-Version:发送端使用的MIME版本
Warning:错误通知
请求首部: 从客户端向服务器端发送请求报文时使用的首部.补充了请求的附 加内容、客户端信息、请求内容相关优先级等信息
Accept:通知服务器自己可接受的媒体类型
Accept-Charset: 客户端可接受的字符集
Accept-Encoding:客户端可接受编码格式,如gzip
Accept-Language:客户端可接受的语言
Client-IP: 请求的客户端IP
Host: 请求的服务器名称和端口号
Referer:跳转至当前URI的前一个URL
User-Agent:客户端代理,浏览器版本
响应首部:从服务器端向客户端返回响应报文时使用的首部.补充了响应的 附加内容,也会要求客户端附加额外的内容信息
实体首部:针对请求报文和响应报文的实体部分使用的首部.补充了资源内 容更新时间等与实体有关的的信息
Allow: 列出对此资源实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Encoding:对主体执行的编码
Content-Language:理解主体时最适合的语言
Content-Length: 主体的长度
Content-Location: 实体真正所处位置
Content-Type:主体的对象类型,如text
缓存相关:
ETag:实体的扩展标签
Expires:实体的过期时间
Last-Modified:最后一次修改的时间
扩展首部
Cookie解释
使用 Cookie 的状态管理Cookie 技术通过在 请求和响应报文中写入 Cookie 信息来控制客户端的状态.Cookie 会根据从服 务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端 保存Cookie.当下次客户端再往该服务器发送请求时,客户端会自动在请求报 文中加入 Cookie 值后发送出去.服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
HTTP请求处理的详细过程
在浏览器中输入网址到展示出网页的整个流程
1.浏览器通过UDP协议向DNS服务器发送请求,把浏览器地址栏中主机名转换成对应的IP地址
2.客户端通过ARP协议发送广播消息通过获取到的服务器的IP地址得到服务器的MAC地址
3.有了目标主机的IP地址和MAC地址后,通过TCP协议就可以封装第一个SYN的同步标志位数据包发送给服务端
4.经过TCP三次握手之后,客户端和服务端成功建立一个连接会话
5.浏览器封装http请求报文传给TCP,由TCP对数据报文进行切包,把一个一个的数据包通过tcp连接传输给服务端
6.服务端对接收到的请求报文进行解析,并获取请求的资源以及方法等相关信息,对请求进行处理
7.访问资源 服务器根据报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源或者动态运行后生成的资源
8.构建响应报文 主要包含响应状态码 响应首部 响应主体
9.发送响应报文
10.记录事务日志
Http服务基础原理的更多相关文章
- DNS服务基础原理介绍
FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名) FQDN=主机名.域名 根域 . 顶级域名 .com .n ...
- 【一起学源码-微服务】Hystrix 源码一:Hystrix基础原理与Demo搭建
说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一个系列文章讲解了Feign的源码,主要是Feign动态 ...
- OpenStack的基础原理
OpenStack的基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其 ...
- linux web服务基础知识,dns
#web服务基础知识c/s 客户端/服务器b/s 浏览器/服务器 nginx > web server 服务端浏览器 > web client 客户端 #dns解析 ...
- Hadoop基础原理
Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...
- APPcrawler基础原理解析及使用
一.背景 一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有ANR,页面错误等问题,在monkey测试过程中,实现了脱离Ca ...
- zz《分布式服务架构 原理、设计与实战》综合
这书以分布式微服务系统为主线,讲解了微服务架构设计.分布式一致性.性能优化等内容,并介绍了与微服务系统紧密联系的日志系统.全局调用链.容器化等. 还是一样,每一章摘抄一些自己觉得有用的内容,归纳整理, ...
- Web服务基础介绍
Web服务基础介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正常情况下的单次web服务访问流程 博主推荐阅读: https://www.cnblogs.com/yinzh ...
- 云小课|MRS基础原理之MapReduce介绍
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...
随机推荐
- Fiddler 安装与配置
可以直接访问官网下载安装包 https://www.telerik.com/download/fiddler ,安装后需要配置浏览器的代理服务器为 Fiddler: 以谷歌浏览器为例:[设置]---[ ...
- js给原型增加新属性和方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python 多返回值
多返回值: def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j return g fs.append(f( ...
- asp.net利用存储过程分页代码
-最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination ), -- 表名 ) = '*', -- 需要返回的列 )='', -- 排序的字段名 , -- ...
- lxml基础
节点操作: from lxml import etree # 1.创建Element对象,参数即节点名称 root = etree.Element('root') print(root) # < ...
- Unix api
● 线程 进程的所有信息都被自己的线程共享,包括代码.全局内存.堆.栈.文件描述符. 线程拥有自己的信息,包括线程ID.一组寄存器值.栈.调度优先级和策略.信号屏蔽字.errno变量以及线程的私有数据 ...
- ML.NET教程之客户细分(聚类问题)
理解问题 客户细分需要解决的问题是按照客户之间的相似特征区分不同客户群体.这个问题的先决条件中没有可供使用的客户分类列表,只有客户的人物画像. 数据集 已有的数据是公司的历史商业活动记录以及客户的购买 ...
- 试水Spring Cloud Hystrix
Spring Cloud Hystrix是一个容错库,它实现了断路器模式,使得当服务发生异常时,会自动切断连接,并将请求引导至预设的回调方法. 服务端 在Spring Tool Suite的文件菜单中 ...
- python中的过滤fliter
movie_people = ['sb_alex', 'sb_wupeiqi', 'hello'] def filter_test(array): ret = [] for p in array: i ...
- [No0000138]软件开发基础知识
1. 本文目的 本文目的在于,介绍软件开发的各种基础知识 以实现,看了之后,对于软件开发的很多领域的基础知识有所了解 如此在进行后续的真正的软件开发时,遇到各种细节知识,才会明白由来和背景知识 第 1 ...