无状态

HTTP是一种不保存状态,既无状态协议。HTTP自身不对请求和响应之间的通信状态进行保存,也就是说不做持久化处理。这是为了更快处理大量事务,确保协议的可伸缩性。

随着web的不断发展,无状态也导致业务处理变得棘手,比如用户登录购物网站,在跳转到该网站其他页面后也要保存登录这个状态。不然请求不知道是哪个用户发出的。因此,引入了cookie技术。

持久连接

HTTP协议初始版本中,每进行一次HTTP通信就要断开一次TCP连接。随着HTTP的普及,文档包含图片的情况多了起来,如果使用浏览器浏览一个包含多张图片的HTML页面时,在发送请求访问HTML页面资源的同时,也会请求HTML页面包含的其他资源因此,每次请求都会造成无畏的TCP连接建立和断开,增加通信量的开销

通过持久连接解决了上述的TCP连接问题。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

请求头部字段Connection,值为keep-alive(HTTP/1.1默认持久连接)

管线化

因为持久连接的出现,使得管线化方式发送请求成为可能。以前发送请求后需等待并受到相应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。也就是并行发送多个请求。

编码提升传输率

当需要传输的内容过大时,可以通过内容编码功能,保持实体信息原样压缩。内容编码后的实体由客户端接受并负责解码。

Accept-Encoding 这个字段定义了内容编码格式

常用的内容编码有以下几种:

gzip:GNU zip压缩方式

compress:unix系统的标准压缩

deflate:zlib压缩

identity:不进行编码

多种数据的多部分对象集合

简单来说就是在请求或者响应的报文中有多个类型的数据,比如图片,文本,视频,就需要使用到多部分对象集合。

使用多部分对象集合时,首部需要加上Content-Type字段(不同后缀的文件,有不同值,感兴趣可以百度下)

multipart/form-data:在web表单文件上传时使用

multipart/byteranges:响应报文包含了多个范围的内容时使用

boundary:用来划分多部分对象集合指明的各类实体

在boundary的指定的每个实体前需要加上--,在最后指定实体的末尾需要加上--

大致使用方式:

Content-Type:上传或响应使用不同的值;boundary=指定各类实体

--指定各类实体

比如文本

--指定各类实体

比如图片

--指定各类实体--

获取部分内容的范围请求

有点类似断点续传的功能,通过范围请求可以只下载请求范围内的实体数据。比如一个1W字节大小的图片,使用范围请求5001-10000字节内的资源。

通过首部字段Range来指定资源的byte范围

Range:bytes=5001-10000

Range:bytes=5001-   从5001字节之后全部的

Range:bytes=0-3000,5000-7000  多重范围请求

针对范围请求,会返回状态码为206的响应报文

多重范围请求,响应会在首部字段Content-Type标明,multipart/byteranges(也就是上面的响应是多部分对象集合时)后返回响应报文

如果服务器端无法响应范围请求,则会返回状态码20 OK和完整的实体内容

接下来是请求方法:

1)GET:获取资源

GET方法用来请求访问已被URI识别的资源。制定的资源经服务器端解析后返回响应内容。

2)POST:传输实体主体

POST方法用来传输实体的主体(向服务器提交数据)

GET和POST的区别

首先,功能不同,根据HTTP协议的规范来说,GET是用来查询,不会对服务器资源进行更改的。POST可能改变服务器资源。当然这全看开发根不根据规范来了。

然后,提交数据方式不同。安全性也不一样。GET方法提交的数据,是直接通过?拼接在url后面的。因为浏览器可能会记下,而且被抓包什么的话,明文传输直接能看到。POST方法提交的数据是通过表单提交的。从url上是看不到,较为安全。

最后,是大小限制。HTTP协议其实并没有限制大小。但GET方法是通过URL拼接来传输的。而浏览器是有对URL进行长度限制的。所以GET会有数据大小限制。而POST没有。

3)PUT:传输文件

PUT方法用来传输文件,就像FTP协议的文件上传一样。要求在请求报文的主体中包含文件内容。然后保存到请求URI指定的位置。

ps:不知道是框架还是安全原因,我做的接口测试的项目中上传文件用的都是POST方法

4)HEAD:获得报文首部

HEAD方法和GET方法一样。只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等

5)DELETE:删除文件

DELETE方法用来删除文件

6)OPTIONS:询问支持的方法

OPTIONS方法用来查询针对请求的URI制定的资源支持的方法

7)TARCE:追踪路径

TRACE方法是让web服务器端讲之前的请求通信返回给客户端的方法。客户端通过TRACE方法可以查询发出去的请求是怎样被加工修改/篡改的。因为请求想要直接到目标服务器可能通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。

但是,TRACE方法本来就不常用,而且容易引起跨站追踪攻击。通过就更不会用到了。

8)CONNECT:要求用隧道协议连接代理

CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议吧通信内容加密后经网络隧道传输,

注意区分大小写,要用大写字母

HTTP协议03-http特点及请求方式的更多相关文章

  1. http协议中常见的状态码以及请求方式,http协议的组成

    请求状态码: 2xxx:表示请求成功,例如200. 3xxx:表示请求被重定向,表示完成请求,需要进一步操作,例如 302. 4xxx:表示请求错误,例如:404,资源没有找到. 5xxx:表示服务器 ...

  2. ctfhub技能树—web前置技能—http协议—请求方式

    打开靶机环境(每次打开都要30金币,好心疼啊) 题目描述为"请求方式" HTTP的请求方式共有八种 1.OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向 ...

  3. http协议----->http请求方式,post,get

    4.http请求方式有七种(http请求是想web资源请求数据) Post get head options delete trace put 常用:GET POST POST例如form表单提交,G ...

  4. HTTP 请求方式: GET和POST的比较(转)

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...

  5. jQuery中的Ajax几种请求方式

    1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) : 请求的HTML页的URL地址. data (M ...

  6. IOS 网络请求方式

    iOS开发中的网络请求   今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...

  7. HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

    什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request ...

  8. HTTP 请求方式: GET和POST的比较

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...

  9. http: URL、请求方式

    URL:统一资源定位符,可以从互联网得到和访问资源,是标准资源的位置 结构包括协议.服务器名称(IP地址).端口(有的服务器需要).路径.文件名 协议:告诉浏览器如何处理打开的文件,常用的就是http ...

随机推荐

  1. logging 模块 与 logging 固定模块

    import logging # 1. 控制日志级别# 2. 控制日志格式# 3. 控制输出的目标为文件logging.basicConfig(filename='access.log', forma ...

  2. C JAVA你可能不知道的那些编程细节

    关于printf的格式化字符 %* *与其它占位符结合使用, *将首先被一个 int 变量值代替后再被格式化. 如 printf("%.*s.", 2, "Hello&q ...

  3. vue.cli 中使用 less 来写css样式

    vue-cli 的webpack中已配置了less,但 package.json 中没有选项,为了方便开发中使用,需安装一下: 安装方式一: npm install less less-loader ...

  4. node 中 安装 yarn

    Yarn是Facebook最近发布的一款依赖包安装工具.Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管理工具 快速安装 //在NPM 中安装npm install -g yarn MacOS ...

  5. LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用

    Ø  前言 LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并.取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> ...

  6. electron-vue:Vue.js 开发 Electron 桌面应用

    相信很多同学都知道 Electron 可以帮助开发人员使用前端技术开发桌面客户端应用,今天介绍的 electron-vue 框架是一套基于 Vue.js 开发 Electron 桌面应用的脚手架,该项 ...

  7. PHP的核心配置详解

    1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...

  8. sqlserver 备份脚本

    BACKUP DATABASE 数据库名称  TO DISK='d:\3333.bak' ---根据时间生成文件名 --将SQL脚本赋值给变量declare @SqlBackupDataBase as ...

  9. [C++]数组处理相关函数(memcpy/memset等)

    头文件:string.h或者memory.h [1]void *memcpy(void *dest, const void *src, size_t n);//数组元素拷贝 功能:从源src所指的内存 ...

  10. Git学习之连接GitHub远程仓库

    在看此教程之前电脑上应该已安装好git,并且配置好基本信息,Git新手请从头开始. 第1步:创建SSH Key 在用户主目录下(Mac系统是在用户主目录下,可通过命令ll -a查看,Windows下自 ...