无状态

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协议吧通信内容加密后经网络隧道传输,

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

转载于:https://www.cnblogs.com/myal/p/10445376.html

HTTP协议03-http特点及请求方式相关推荐

  1. 【Postman】Postman的请求方式

    前言 分享一些自己学习的笔记. 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步.谢谢! 一.Http协议支持 8种请求方式 HTTP请求方式: HTTP 1.0 定义了三种请求方法:GE ...

  2. 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期

    HTTP 协议之请求格式 HTTP协议官网:其中有http协议原文https://www.w3.org/Protocols/ 请求格式的结构: 请求头:请求方式.请求的地址和HTTP 协议版本 请求行 ...

  3. CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码

    CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码 WEB-HTTP协议 1-请求方式 2-302跳转 3.cookie 4.基础认证 5.响 ...

  4. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  5. HTTP详解(请求方式)

    原文地址:HTTP协议详解(真的很经典) 作者:308938969 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发 ...

  6. 全面分析前端的网络请求方式

    一.前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本参数(url,请求方式) 请求参数.请求参数类型 设置请求头 获取响应的方式 获取响应头.响应状态.响 ...

  7. 聊聊 HTTP 常见的请求方式

    在互联网已经渗透了生产.生活各个角落的今天,人们可以登录微信语音聊天,可以随手"扫"到各种功能的二维码,可以通过方便快捷的无人超市购物--这种互联网领域的跨越式发展,不仅满足了人们 ...

  8. PHP的表单获取与HHTP请求方式

    PHP获取表单数据的方法 PHP获取表单数据的方法主要有GET.POST和REQUEST三种方式. 注意,提交表单的方法只有POST和GET两种.POST和GET都可以向Web服务器传输数据. GET ...

  9. java rest风格传参_SpringMVC的REST风格的四种请求方式总结

    一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. 它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 3. ...

最新文章

  1. 深度学习NCHW和NHWC数据格式(由三维数据转换成一维数据的遍历方式)
  2. 高端ERP软件市场漫谈:崇洋无罪 自重有理
  3. 数据结构——最短路径之Dijkstra算法(与最小生成树的prime算法很像,建议一起看)
  4. mysql为什么选innodb_为什么现在的MySQL都要使用innoDB引擎-Go语言中文社区
  5. 竟然如此简单!C++实现完全随机加密、解析库,并附上完整代码分析
  6. python 循环加速_CPU靠边站!使用cuDF在GPU加速Pandas
  7. 【绪论】——声呐概述
  8. 推荐10款 好用的 Jquery 评分插件
  9. Java中的线程协作之Condition
  10. 两个MYSQL数据同步的SHELL脚本
  11. 2016年PMP项目管理知识体系精髓总结
  12. 【原创】开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式
  13. java POI导出excel性能优化
  14. 密码(图解密码技术)_第二章_Enigma密码机
  15. sql根据身份证号获取年龄和性别(Oracle+hive)
  16. linux格式化分区进程,Linux 硬盘格式化、分区、挂载、卸载、删除分区,Linux重新调整分区...
  17. H5端input标签通过手机软键盘进行搜索,并关闭软键盘
  18. 从零到英雄:资产商店发行人的故事
  19. Ubuntu安装多用户免密登录Jupyterhub
  20. 分析社交电商运营模式_电商代运营

热门文章

  1. EventBus简单分析
  2. Arduino超声波测距程序
  3. [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置
  4. 数据之路 Day8 Numpy包
  5. ORACLE同步数据库之,自动生成sequence 文件
  6. 【PMP】知识点总结20170528
  7. 向下钻取按钮位置设置
  8. gearman mysql udf
  9. 一些C实现的数学函数实现(估算)
  10. 在ActionBar显示ShareActionProvider分享文本,点击可以打开进行分享(19)