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

按点赞数排序
按时间排序
对于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
0
回答于2021-06-09 07:38
有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代理时模拟非跨域的客户端,访问实际的应用服务器,并修改应用服务器响应中的域名即可。
一般http1.1 用max-age, http1.0 用expires,还和浏览器的设置有关,另外浏览器,对expires,max-age 的遵守也不一致。
微信公众号
加入微信群