http协议原理知识

HTTP(Hyper Text Transfer Protocol,超文本传输协议)

HTTP协议是应用层的一种协议,是一种C/S架构服务,基于TCP/IP协议来通信,监听在TCP的80端口上。下面就开始介绍HTTP协议的相关内容,在开始之前先简单的介绍一下端口类型、TCP协议的功能和状态、Socket通信时的系统调用。

一、常见的端口类型

  • 众所周知:

0~1023:管理员才有权限使用,永久地分配给某应用使用。

  • 注册端口:

1024~41951:只有一部分被注册,分配原则上非特别严格。

  • 动态端口或私有端口:

41952~65535:这些端口是客户端平时使用最多的

在linux中,可以通过 /proc/sys/net/ipv4/ip_local_port_range 文件来定义临时端口的起始数字和结束数字。

二、TCP协议的功能

  • 连接建立

    主要是指TCP/IP的三次握手来建立连接

  • 将数据打包成段

这主要是实在网络传输过程中的MTU(最大传输单元)决定的,数据必须打包成段才可以传送

  • 确认、重传以及超时
  • 排序

数据打包成段后,需要按序列号排序来发送,保证数据的连贯性

  • 流量控制

通过滑动窗口来进行流量的控制。

  • 拥塞控制

解决拥塞控制的办法是:采用慢启动和拥塞避免算法结合使用来控制拥塞

三、TCP的状态

常见的TCP状态有:CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED。tcp协议通过tcp状态来标记当前处于通信过程的哪个阶段。

四、socket 通信机制

Socket是IPC通信的一种方式,用于实现在同一主机或者不同主机之间的通信。socket通信在domain中实现,所谓的 domain 是识别一个socket的方法(socket地址格式)。

1、常见的domain:

  • Unix Domain: 基于socket机制实现同一主机不同进程间通信的一种方式;AF_UNIX, AF_LOCAL,地址是一个路径名(文件)
  • IPv4 Domain: AF_INET, 基于socket机制借助于ipv4协议实现不同主机(也可以是同一主机)上的进程间通信的机制; 地址是32位的ipv4地址+16位的端口号
  • IPv6 Domain: AF_INET6, 地址是128位的Ipv6地址+16位的端口号

2、socket的类型:

  • TCP:流式socket,SOCK_STREAM      提供可靠、双向、面向字节流
  • UDP:数据报式socket, SOCK_DGRAM

3、相关的系统调用:

  • socket( ): 创建一个新的socket
  • bind( ):绑定于一个套按字地址和端口上
  • listen( ): 监听套接字
  • accept( ): 接收连接请求
  • connect( ): 发起连接请求
  • close( ): 关闭连接
  • read( ):从套接字向缓冲区读入数据
  • write( ): 从缓存区向套接字中写入数据

客户端和服务端建立TCP会话的系统调用如下:(图片来自于《HTTP权威指南》书籍)

下面正式开始介绍HTTP协议的相关内容:

五、web资源

HTTP协议实现的是客户端可以向服务端获得资源,称为web资源。在 HTTP1.0 协议中引入了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展),使得我们请求的资源不再只是文本资源了。

1、常见资源类型:使用MIME来标记

  • text/html    html文本
  • text/plain    纯文本
  • image/jpeg    jpeg格式的图片
  • image/gif    gif格式的图片
  • vedio/mpeg4    mpeg4格式的视频
  • application/vnd.ms-powerpoint     一些应用程序

2、资源名称:URI(Uniform Resource Identifier,统一资源标识)

实际上,我们使用最多的是URL(统一资源定位符),用来描述一个特定服务器上某资源的特定位置,分为三部分:

例如:http://www.magedu.com:80/download/bash-4.3.1-1.rpm

  • scheme(方案):http://
  • 服务器地址:www.magedu.com:80
  • 特定服务器上的资源:/download/bash-4.3.1-1.rpm

六、常见的HTTP的方法

在这里的方法可以理解为服务端和客户端之间的通信的API,也可以理解为函数。(博主自己的理解)

  • GET:向服务器发送资源申请,请求获得资源
  • HEAD:向服务器发送资源申请,请求获得资源,服务器只返回请求资源的首部信息
  • PUT:基于HTML表单向服务器提交数据,服务器通常需要存储此数据(位置一般为关系型数据库)
  • POST:与GET相反,向服务器端发送资源,服务器通常需要存储此资源(位置一般为文件系统)
  • DELETE:删除URL指向的资源
  • TRACE:跟踪一次请求所经过的代理服务器,防火墙,网关等
  • OPTIONS:探测服务器端对请求的URL多支持的请求方法

七、HTTP状态码:(常见的)

所谓的状态码就是一些状态信息的编号,来表示各种不同的状态信息。

1、1xx:信息状态码,在HTTP 1.1协议中引入的

2、2xx:成功状态码

  • 200:OK 请求没有问题,实体的主体部分包含了所请求的资源
  • 201:CREATED 用于创建服务器所请求的资源

3、3xx:重定向类的状态码

  • 301:Moved Permanently 永久重定向,在请求的URL被删除时,相应的Location首部中应该包含资源现在所处的URL
  • 302: Found, 临时重定向,会在响应报文中使用“Location: 新位置”
  • 304: Not Modified 客户端可以通过所包含的请求首部,使其请求变为有条件的。

4、4xx:客户端类的错误

  • 403:Forbidden 用于说明请求陪服务器拒绝了。
  • 404:Not Found 用于说明服务器无法找到所请求的URL
  • 405:Method Not Allowed 发起的请求中带有所请求的URL不支持的方法时,会使用此状态码。

5、5xx:服务器类的错误

  • 500:Internal Server Error 服务器内部错误
  • 502:Bad Gateway 作为代理或网关使用的服务器从请求相应链的下一条链路上收到了一条伪相应。
  • 503:Service Unavailable 说明服务器现在无法为请求提供服务,暂不可用。

八、一次Web资源请求的具体过程(服务器的角度)

  • 建立连接:接受一个客户端的连接
  • 接收请求:从网络中读取一条HTTP的请求报文
  • 处理请求:对请求报文进行解释,并采取行动
  • 访问资源:访问报文中指定的资源
  • 构建响应:创建带有正确正确首部的HTTP响应的报文
  • 发送响应:将响应发送回客户端
  • 记录日志:将已完成的事物有关的内容记录到一个日志文件中去

大致流程如下图:(图片来源与《HTTP权威指南》书籍)

九、web服务器的I/O结构

  • 单进程模型:一个进程串行响应一个请求
  • 多进程模型:个进程响应一个用户请求实现并发的效果,prefork 模型
  • 复用I/O机制:

    一个进程生成多个线程,每个线程响应一个用户请求,worker 模型

多个线程,每个线程响应多个用户请求,event 模型

十、httpd相关的特性

httpd在这里指的是 apache 这个实现http协议的开源工具。apache历史悠久,在如今同类工具中使用率在50%左右。常见的还有 ngnix,lighttpd,gws等。

1、httpd的特性:

  • 高度模块化:core + modules
  • DSO: Dynamic Shared Object,可以实现动态的加载模块
  • MPM:Multipath Processing Module

统称,事实上有多个实现:

prefork: 每个进程响应一个用户请求,预先生成多个空闲进程;

worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;

event: 启动多个线程,每个线程响应N个请求;靠 event-driven这个事件驱动来实现。

2、httpd的功能特性:

  • 丰富用户认证:基本认证和摘要认证
  • CGI:原生支持perl CGI
  • 虚拟主机:基于端口、IP、主机名实现虚拟主机
  • 反向代理
  • 负载均衡
  • 用户站点
  • 路径别名:支持路径别名
  • 支持第三方模块:依赖于钩子函数(HOOK)来实现

十一、HTTP协议的首部

1、常见的首部类型有:

  • 通用首部
  • 请求首部
  • 响应首部
  • 实体首部
  • 扩展首部:非标准首部,可由程序员自行创建

2、具体说明

(1)通用首部

这是客户端个服务端都可以使用的首部。

通用的信息性首部:

在HTTP/1.0 中引入了第一个允许HTTP应用程序缓存对象本地副本的首部,这样就不需要总是直接从源服务端获取了。所以出现了缓存首部。

(2)请求首部

请求首部只是定义在请求报文中的首部。用来说明是谁在发送什么请求,请求来源何处等。服务端可以根据请求首部给出最好的响应。

下图是请求的信息性首部:

Accept首部:

条件请求首部:

安全请求首部:

代理请求首部:

(3)响应首部

响应报文也有自己的首部集。目的是为了提供给客户端一些额外的信息。

下图是响应的信息性首部:

协商首部:

安全响应首部:

(4)实体首部

有很多首部可以用来描述HTTP报文的负荷。由于请求和响应的报文中都可能包含实体部分。所以,在这2种类型的报文中都可能出现这些首部。

实体首部提供了有关实体及其内容的大量信息,能够对资源的使用的各种有效的请求方法。

实体的信息性首部:

实体缓存首部:

内容首部:

至此,HTTP的相关理论知识,介绍完毕。更多详细介绍没课参考《HTTP权威指南》。

http协议原理知识,布布扣,bubuko.com

时间: 2024-10-16 18:10:02

http协议原理知识的相关文章

iptables原理知识

一.iptables的原理 iptables实际上是定义防火墙规则的工具,真正对数据报文处理的是内核中的netfilter模块.netfilter对报文的处理方式一般有:过滤,地址转换,连接追踪. 1.常用的数据报文格式的解释 防火墙实际上是对进出本机的各种报文进行控制,所以了解常见报文的结构(格式)可以精确的控制报文. 1)IP报文的格式 ip报文的结构如下图: 在这里与防火墙关系最大的是源地址.目标地址.协议.源地址指明报文的来源,目标地址说明报文的去处,协议指明传输层所使用的协议. 补充:

防冲撞协议原理实验报告

实验三  防冲撞协议原理实验 一.实验目的 通过本实验使学生了解 RFID 的防冲撞原理的实现方法,掌握时间槽.VICC 四种状态的含义以及状态的切换规律. 二.实验设备 TI TRF7960 读卡器一个.usb 连接线一条.电脑一台.HF RFID 实验 上位机软件.ISO15693标签若干张 三.实验知识预备及原理 1.VICC 状态 一个 VICC 可能处于以下 4 种状态中的一种: l  断电 l  准备 l  静默 l  选择 这些状态间的转换在图 6.22中有规定.断电.准备和安静状

深入理解HTTP协议、HTTP协议原理分析

深入理解HTTP协议.HTTP协议原理分析 目录(?)[+] http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 26

http协议原理

http协议原理      WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页.WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信.HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的.无状态的.面向对象的协议. HTTP协议的作用原理包括四个步骤: (1) 连接:Web浏览器与Web服务器建立连接,打开一个称为so

Android网络编程(一)HTTP协议原理

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley使用方法全解析 Android网络编程(四)从源代码解析volley Android网络编程(五)OkHttp2.x使用方法全解析 Android网络编程(六)OkHttp3使用方法全解析 Android网络编程(七)源代码解析OkHttp前篇[请求网络] Android网络编程(八)源代码解析OkHttp后篇[复用

TCP/IP协议原理与应用笔记17:IP编址之 IP地址简介(重点)

1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解主机的属性或者用途) (2)Address:在哪里,软件效率高. (3)Route(路由的标识):怎样到达 3. IP地址结构 (1)32 bit二进制地址 它模拟物理网的编址机制,如下示意图: (2)IP地址分类,如下: TCP/IP协议原理与应用笔记03:IP地址分类

【转】Unity资源管理原理知识(干货不嫌长)

最近unity 当需要频繁创建一个物体对象时,怎样减少内存. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的. 其实场景里所有静态的对象也有这么一个加载过程,只是Unity3D后台替你自动完

HTTPS传输协议原理

我们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进行加密,能保证客户端到服务器端的通信都在被保护起来,那么浏览器是如果实现的呢?下面让我们来介绍一下SSL基本的实现方法. 首先我们有两种基本的加解密算法类型:对称加密,非对称加密(公私钥加密),现在介绍一下这两种加密算法的特点: 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES等,示意图如下: 图1 对称加密 非对称加密:密钥

单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在51单片机的P0口工作在普通IO口模式下,为准双向IO口.而工作在第二功能状态下时,则为标准的双向IO口.由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路. 在第二功能状态下,51单片机P0口采用的是互补推挽的输出方式.何为互补推挽呢?下面是它的等效电路图. 当P0第二功能作为输出时