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 ...
随机推荐
- linux下mysql 文件导入导出
最近在做mysql的数据导入导出得到的一些经验,记录下. 1.首先要开通导入导出的功能,需要设置一个mysql的配置 可以在 my.conf 文件的最后增加配置项 secure-file-priv=' ...
- 【Scikit】实现Multi-label text classification代码模板
Refer to: https://stackoverflow.com/a/10527953 code: # -*- coding: utf-8 -*- import numpy as np from ...
- 如何用Baas快速在腾讯云上开发小程序-系列4:实现客户侧商品列表、商品详情页程序
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/431172001487671163 来源:腾云阁 h ...
- Elasticsearch 学习之不停止服务,完成升级重启维护操作
我们可以设置集群的平衡参数来暂时禁用掉平衡,具体步骤如下: 1.如果可能的话,先暂停掉数据新增和更新操作,这样会提高集群恢复的时间: 2.禁用集群分片平衡操作,直到告诉集群可以恢复平衡操作为止,禁用配 ...
- thinkphp5---如何使用公共类
在进行项目开发的时候,有很多的类是前后台以及其他模块都会使用的,例如验证码,上传类,密码加密的类等以及一些其他的第三方类库,如何在项目中提取这些公共的类呢? 具体方法: 例如:我在这里定义上传的类,里 ...
- R和Tableau平行坐标图
R平行坐标图 library(lattice)data(iris)parallelplot( ~ iris[1:4], iris, groups = Species, horizontal.a ...
- 多线程局部变量之threading.local()用法
假如,开了十个线程并且做同样的一件事,他们需要带着自己的数据进来,完成事情后带着自己的数据出去.如果是并发,同时进来,他们的数据就会混乱. 一般情况,我们加锁就可以了,一个人先进来,先加锁,另一个人过 ...
- N!
求N! Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N ...
- .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用
Windows Service(服务) 是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...
- 蚂蚁金服缘何自研Service Mesh?
2018年,微服务方兴未艾,Service Mesh(服务网格)又快速崛起.有观点认为,2018年可被称之为“Service Mesh元年”,在未来两年中,Service Mesh将迎来爆发式增长,成 ...