回答
收藏
分享
举报
http通信的版本协商
提问于2020-09-22 21:55

浏览 3.7k

请问,浏览器和服务器在进行http通信的时候,具体使用http1.0 http1.1还是http2是怎么协商的?

多谢

已修改于2023-03-17 02:11



写下您的回答
发表回答
全部回答(2)

按点赞数排序

按时间排序

感谢陶辉老师详细的回复。 那就是对于HTTP1.0和HTTP1.1,具体使用哪个版本是服务器决定的。客户端没有选择的权力,极端的情况下如果浏览器不支持http1.0,那么就没有办法和服务器进行通信了?

赞同

0

回复举报

回答于2020-09-23 09:09



回复云原生
回复
陶辉回复了
一般支持1.1的组件都是向下兼容1.0的,你举例的情况不会有问题

0

回复举报

回答于2020-09-23 01:40



回复陶辉
回复

对于HTTP1.0和HTTP1.1,没有协商之说,由服务器直接按其支持的协议在status line的http version返回,例如:

HTTP/1.0 200 OK\r\n

对于HTTP/2的协商,有两种方案:

1、方案1叫做h2c,它是指不基于TLS/SSL协议,直接通过HTTP Header升级协议。目前基本无人按这个规范使用,你可以参考我的这节视频课内容:《h2c:在TCP上从HTTP/1升级到HTTP/2》,注意,前面是超链接,目前论坛对超链接显示有些问题,可直接点击

2、使用TLS插件ALPN,在ClientHello消息中尝试升级到HTTP/2,目前99%都在使用这种方式,请参考:《h2:在TLS上从HTTP/1升级到HTTP/2

赞同

0

回复举报

回答于2020-09-23 08:59



回复陶辉
回复
baru回复了
陶老师,一般请求不是客户端发起的嘛?客户端发起的时候status line的http version带的什么?忘了怎么看了

0

回复举报

回答于2020-10-21 02:54



回复baru
回复
陶辉回复了
比如访问首页时,是这样的:GET /index.html HTTP/1.1\r\n

0

回复举报

回答于2020-10-21 06:19



回复陶辉
回复
凌潇回复了
陶老师,请教一下:如果使用nginx作为反向代理实施证书卸载并开启服务端http2。是否server支持http2就走h2,server不支持http2就走h2c?服务端升级http2会不会存在反复解析后又加密回去导致效率低下、长链接导致负载不均衡等问题?盼答复,谢谢!

0

回复举报

回答于2021-06-09 07:38



回复凌潇
回复
更多回复
提问者
云原生
这家伙很懒还未留下介绍~
15
文章
4
问答
5
粉丝
相关问答

有2个解决方案:

1、基于CORS,即Cross-Origin Resource Sharing,解决浏览器端的安全策略问题。又可以细分为2种,一种叫复杂请求,也就是上面dongchch的答案,对于OPTIONS请求的处理,当然后面的proxy_pass是无关的。一种叫简单请求,直接添加Access_Control_Allow-Origin头部就可以了,浏览器会处理的。

具体你可以参见我的这一课:《如何合法的跨域》https://time.geekbang.org/course/detail/100026801-98913

2、用反向代理解决。你可以直接用proxy_set_header等指令,用Nginx代理时模拟非跨域的客户端,访问实际的应用服务器,并修改应用服务器响应中的域名即可。

点赞 0
浏览 3.8k

一般http1.1 用max-age, http1.0 用expires,还和浏览器的设置有关,另外浏览器,对expires,max-age 的遵守也不一致。

点赞 0
浏览 4.2k