使⽤Chrome访问https⽹站时报错【net::
ERR_HTTP2_PROTOCOL_。。。
该问题已解决
问题描述:
内部调试和验收环境⽤http协议,stg,⽣产环境⽤https协议;
stg和⽣产环境上Flask项⽬在没有修改代码的情况下重启后偶尔会出现访问异常的情况(内部调试和验收环境不存在)。
异常时访问接⼝,Flask⽇志正常,Nginx⽇志也正常。
IE,⽕狐均可正常访问到,唯独⾕歌浏览器访问报错:
(falied) net::ERR_HTTP2_PROTOCOL_ERROR
部署环境:
centos
通过docker部署python flask项⽬;
容器 : Nginx,Flask项⽬,Redis,Mysql;
stg,⽣产环境⽤https协议;
内部调试和验收环境⽤http协议。
⽹上搜索了解到可能存在的问题
nginx和网关怎么配合使用
2.⾕歌浏览器本⾝问题;
3.http版本定义问题;
⽹上查询可能问题如下:
proxy_max_temp_file_size:这是每个请求能⽤磁盘上临时⽂件最⼤⼤⼩。这些当上游响应太⼤不能装配到缓冲区时被创建。但是我的nginx配置本⾝是有这项的,故排除这个原因:
2.⾕歌浏览器本⾝问题
没能认证
3.修改后端Nginx的http版本
注:nginx默认版本是1.1。指定为2.0版本
响应变成502
502 Bad Gateway是指错误⽹关,⽆效⽹关;在互联⽹中表⽰⼀种⽹络错误。表现在WEB浏览器中给出的页⾯反馈。
含义:这通常并不意味着上游服务器已关闭(⽆响应⽹关/代理),⽽是上游服务器和⽹关/代理使⽤不⼀致的协议交换数据。
鉴于互联⽹协议是相当清楚的,它往往意味着⼀个或两个机器已不正确或不完全编程。
以上处理⽅式都未能解决问题
问题解决思路如下:
1.查看正常和异常情况下⽕狐浏览器的response返回数据是否存在差异。
⾕歌异常情况下,⽕狐的访问返回:
⾕歌正常访问情况下,⽕狐的访问返回:
观察到:返回头中content-type:的值不同。
2.抓包
response header出现⾮法字符:illegal characters found in header name
application/json:Content-Type 被对调导致
3.查看代码
代码重构后的response返回是:[{'Content-Type', 'application/json'}]
⽽继承类中的数据类型是:[("Content-Type", "text/html; charset=utf-8")]
到原因:重构的类型定义成了集合类型,集合的特点是⽆序⽆重复,因为⽆序,所以再每次重启服务时,取值都会随机取,导致前后顺序颠倒。⾕歌访问报错。
从中发现⽕狐,IE和⾕歌对https response返回的处理机制不同,导致响应头部错误时,⽕狐和IE将错误放弃,设为初始值。⽽⾕歌直接抛出错误。
http和https处理机制是否不同??
集合和元组的区别
·集合是包含若⼲元素的列表,元素⽆序且⽆重复元素
·元组是有序列表,元素不能修改
可变有序
列表☑ ☑
元组×☑
集合☑ ×

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。