HTTP/1.1-HTTP/2.0-HTTP/3.0-HTTPS
HTTP/1.1
网上关于HTTP/1.1的讨论多是基于RFC2616文档,而IETF已更新了HTTP/1.1并将其分为六个部分,使协议变得更简单易懂,对老版本RFC2616中模糊不清的部分做了解释
- RFC7230-消息语法与路由
- RFC7231-语义与路由
- RFC7232-条件请求
- RFC7233-范围请求
- RFC7234-缓存
- RFC7235-认证
RFC7230-消息语法与路由
客户端/服务器 消息发送
HTTP是一种在传输层或会话层上交换消息的无状态的请求/响应协议,HTTP使用URI来定位资源和资源间的关系,通常请求会包含请求行,请求首部和请求体,下面的例子是在"http://www.example.com/hello.txt"上进行的GET请求
客户端请求:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com Accept-Language: en, mi
服务器响应:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Hello World! My payload includes a trailing CRLF.
RFC7231-语义与路由
安全方法
如果请求方法语义上是只读的,那么它被认为是安全的,根据之前定义,GET,HEAD,OPTIONS,TRACE是安全的
幂等方法
如果多个相同的请求方法对服务器的效果与单个请求对服务器的效果相同,则该请求方法是幂等的,根据定义PUT,DELETE与安全方法是幂等的
可缓存方法
当请求方法的响应允许被缓存以供未来复用时,该请求方法是可缓存的。通常,不依赖当前或权威响应的安全方法被认为是可缓存的,本规范定义GET,HEAD,POST为可缓存的,虽然大多数缓存实现只支持GET和HEAD
GET
GET是主要的信息取回机制,客户端可以将GET语义改变为"范围请求",请求被选定representation的一部分
HEAD
HEAD与GET方法几乎一样,但其响应中没有消息体,通常被用于测试连接性,可访问性和最近修改情况
POST
POST通常被用于提交表单,发布消息以及创建资源,添加数据到资源已存在的representation上,当有多个资源在源服务器上被创建时,源服务器应该发送201响应
POST请求的响应只有包含explicit freshness information(4.2.1 of [RFC7234])的时候才被定义为可缓存的,然而POST缓存并没有被广泛实现,当源服务器希望客户端能够缓存POST的结果以供之后的GET使用时,源服务器可能发送包含Content-Location且其值为POST的有效请求URI相同的200响应
HTTPS
RFC2818:HTTP Over TSL
HTTP与HTTPS不同
- HTTPS需要CA(Certificate Authority,数字证书认证机构) 申请证书,免费的很少
- HTTP默认80端口;HTTPS默认443端口
- HTTP使用http标识符;HTTPS使用https标识符
- HTTP是明文传输;HTTPS是加密传输
- HTTP响应比HTTPS快,因为HTTPS还需要TSL握手,所以HTTPS更耗费服务器资源
HTTP/1.1与HTTP/2.0
HTTP/1.1默认开启Connection: keep-alive,支持长连接(持久连接)和请求Pipelining,可以在一个TCP连接上发送多个HTTP请求与响应。
- HTTP/1.x是基于文本解析的,HTTP/2.0是基于二进制解析的
- HTTP/2.0采用多路复用,很好的解决了浏览器限制同一个域名下的请求数量的问题
- HTTP/2.0采用Header压缩,HTTP/1.x的header携带大量信息且重复,HTTP/2.0的通信双方各执一份header fields缓存,减少了传输大小与重复header的传输
- HTTP/2.0服务端推送减少了请求次数,减少请求次数
附录
面试问答
GET和POST有什么区别
答:
- GET参数通过URL传递,POST放在Request body中
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
- GET是安全的且是幂等的,POST则不是
- GET产生的URL地址可以被Bookmark,而POST不可以
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求只能进行url编码,而POST支持多种编码方式
HTTP/1.x与HTTP/2.0区别
答:
- HTTP/2.0基于二进制解析,而HTTP/1.x仅支持文本解析
- HTTP/2.0支持多路复用
- HTTP/2.0支持服务端推送
- HTTP/2.0支持Header压缩
参考链接
- RFC
- HTTP/1.1 rfc(7230-7237) 中文翻译
- 都 2019 年了,还问 GET 和 POST 的区别
- HTTP 与 HTTPS 的区别
- HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
- 一文读懂 HTTP/2 及 HTTP/3 特性
HTTP/1.1-HTTP/2.0-HTTP/3.0-HTTPS的更多相关文章
- 创建或打开解决方案时提示"DotNetCore.1.0.1-SDK.1.0.0.Preview2-003131-x86"错误的解决方案
提示"DotNetCore.1.0.1-SDK.1.0.0.Preview2-003131-x86"错误的解决方案: 1.检查是否有C:\Program Files (x86)\d ...
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法
今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...
- 字符串数组初始化0 与memset 0 效率的分析
转自:http://www.xuebuyuan.com/1722207.html 结合http://blog.sina.com.cn/s/blog_59d470310100gov8.html来看. 最 ...
- bootstrap2.0与3.0的区别
在阅读这篇bootstrap2.0与3.0的区别的文章之前,大家一定要先了解什么是响应式网站设计?推荐大家看看这篇"教你快速了解响应式网站设计" . 我觉得bootstrap的可视 ...
- centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解
centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...
- ASP.Net MVC3安全升级导致程序集从3.0.0.0变为3.0.0.1
开发环境一般引用的是本机 C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies下的System.Web.Mvc.dll,当 ...
- R语言中的logical(0)和numeric(0)以及赋值问题
logical(0) 不等于 numeric(0).两者都不等于NULL值,即is.null(logical(0))和is.null(numeric(0))返还值都是FALSE.这很有意思,说明长度为 ...
- Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. Please use Android Tools>Fix project Properties.
重装操作系统之后,或者破坏了Android的开发环境之后,需要重新配置好Android的开发环境.但是配置好后,导入原有的项目时,报错: Android requires compiler compl ...
- Windows 8(虚拟机环境)安装.NET Framework3.5(includes .NET 2.0 and 3.0)
按照这篇文章:http://blogs.technet.com/b/aviraj/archive/2012/08/04/windows-8-enable-net-framework-3-5-inclu ...
- 解决 DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 在VS2015 Update3 安装失败的问题
今天抽空升级VS2015 Update3. 在安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe 时报错了,看了错误日志 显示: 看到我标红的两个地方,那么 ...
随机推荐
- PDFCrop裁剪PDF文档使用方法
使用VISIO画图,然后生成PDF文档插入到LaTeX文档中,会出现黑边框的问题.通过对PDF文件进行裁剪可以去掉黑边框,之前我是通过Acrobat进行裁剪,后来激活失效了..只好找其他方法.今天发现 ...
- warning: accessed via instance reference
提示如图: 先简单翻译一下: 静态成员***通过实例对象访问 显示通过类实例而不是类本身调用方法和属性. 现有一个类Test,有静态方法methods和静态属性fields. 对于静态变量或方法,推荐 ...
- nfs服务安装部署测试
nfs:网络文件系统作用:某个文件或目录共享,使其它用户可以通过网络访问此共享目录或文件.***特别注意共享的目录权限1.使用nfs需要先安装 yum install -y nfs-utils rpc ...
- 阶段3 2.Spring_08.面向切面编程 AOP_4 spring基于XML的AOP-配置步骤
resources下新建bean.xml文件 xmlns:aop 先配置IOC aop 通知类就是logger.id配置为logAdvice表示日志的通知 梳理流程 首先我们在这有个Service它需 ...
- Win32 编程 基础
Win32 程序开发的流程 message based, event driven Win32程序是message based, event driven.也就是说Win32程序的运行是依靠外部 ...
- word2vec原理浅析
1.word2vec简介 word2vec,即词向量,就是一个词用一个向量来表示.是2013年Google提出的.word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型( ...
- form 源码刨析
def clean_name(self) value = self.cleaned_data.get('name') if "金-瓶-梅" not in value: raise ...
- 交换机安全学习笔记 第二章 MAC地址泛洪攻击
本文为书中相关知识的摘要,由于书中以思科设备为配置依据,所以笔记中补充了华为.H3C设备的相关配置.华为设备配置参考华为S2352EI 产品版本:V100R005C01文档版本:02. H3C配置参 ...
- JavaScript中:地址引用的特性,导致静态初始值被修改
问题分类 JavaScript,值引用,地址引用 问题描述 开发过程中,服务端将静态配置数据从mysql数据库中读取到内存中,方便调用. 在实现流派功能时,需从数据库中读取流派种类数据到内存中,由于其 ...
- Jackson快速入门
1.Jackson的简单用法 2.Jackson框架的高阶应用 3.Jackson不支持Java8 Date解决方法 https://www.cnblogs.com/mkxzy/p/7091381.h ...