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 时报错了,看了错误日志 显示: 看到我标红的两个地方,那么 ...
随机推荐
- Emacs Python 自动补全之 eglot
eglot 个人水平有限,自己的测试难免有不足甚至错误的地方.欢迎各位emacser 能前来留言交流. 首先eglot 是一个lsp-mode的集成环境.作者说这不仅仅是一个lsp工具.但是我从其说明 ...
- CentOS7环境下yum方式安装MySQL5.7
这篇博文主要是从网上摘抄的,做个记录,以后如果有同样的需求,可以直接翻自己的记录.感谢两位大神: https://www.cnblogs.com/luohanguo/p/9045391.html ht ...
- 网易云课堂_C++程序设计入门(下)_第11单元:工欲善其事必先利其器 - STL简介_第11单元 - 单元作业2:OJ编程 - list 与 deque
第11单元 - 单元作业2:OJ编程 - list 与 deque 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之 ...
- 布局复习---BFC
其实在一开始我是没有BFC的这个概念的,只是知道在浮动过后,后续的元素如果出现问题,就做我们常说的:overflow:hidden.其中的原因还是不甚了解.不是说以前老师没有讲解过,而是以前根本就没有 ...
- java:ER图,Springmvc:Mapper代理开发规范,PB(PowerDesigner数据库建模)
1.ER图(Entity Relationship Diagram实体关系图): 工具: ER-win Viso 矩形:实体对象 椭圆:属性 菱形:关系 2.Mapper代理的开发规范: 1.mapp ...
- jitamin配置(nginx设置)
server { listen 66; server_name 192.168.2.253; root "/var/www/jitamin/public"; location / ...
- CF1187E Tree Painting【换根dp】
题目传送门 题意 一棵$N$个节点的树,初始时所有的节点都是白色,第一次可以选择任意一个把它涂成黑色.接下来,只能把与黑色节点原来相连的白色节点涂成黑色(涂成黑色的点视为被删去,与其它节点不相连).每 ...
- Android基础内容提供者ContentProvider的使用详解(转)
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- python 并发编程 多线程 Thread对象的其他属性或方法
介绍 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. threading模块提供的一些方法: ...
- 从零开始学习GDI+ (三) 画笔与画刷