如何解决HTTP/2 流 1 没有完全关闭:PROTOCOL_ERROR
我的 nginx 中有这个配置:
location ~* ^/test(.*) {
add_header "Access-Control-Allow-Origin" $http_origin;
add_header "Access-Control-Allow-Credentials" "true";
# PLEASE NOT THIS ONE,IT IS SEPARATED BY NEWLINE
add_header "Access-Control-Allow-Headers" "Access-Control-Allow-Origin,Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Re
quested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,sid_internal,access_token,Referer";
add_header "Access-Control-Allow-Methods" "GET,POST,DELETE,OPTIONS,PATCH";
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" $http_origin;
add_header "Access-Control-Allow-Credentials" "true";
add_header "Access-Control-Allow-Methods" "GET,HEAD,PATCH";
# PLEASE NOT THIS ONE,IT IS SEPARATED BY NEWLINE
add_header "Access-Control-Allow-Headers" "Authorization,X-Requested-With,R
eferer";
return 204;
}
假设服务器名称是example.com
当我点击 https://example.com/test 时:
- 使用 Chrome 和 Opera 浏览器时,我发现 HTTP/2 流 1 没有完全关闭:PROTOCOL_ERROR
- 使用 Firefox,它可以完美运行
- 当我从 linux 终端执行 curl 时,我得到 HTTP/2 流 1 没有完全关闭:PROTOCOL_ERROR
但是,我通过删除 nginx 中的换行符分隔配置进行了一些修复,因此它变成了这样:
location ~* ^/test(.*) {
add_header "Access-Control-Allow-Origin" $http_origin;
add_header "Access-Control-Allow-Credentials" "true";
# PLEASE NOTE THIS ONE,NEWLINE REMOVED
add_header "Access-Control-Allow-Headers" "Access-Control-Allow-Origin,PATCH";
# PLEASE NOTE THIS ONE,NEWLINE REMOVED
add_header "Access-Control-Allow-Headers" "Authorization,Referer";
return 204;
}
更改 nginx 配置后,一切正常(在 chrome、opera 和我的 linux 终端中)
嗯,其实我的问题已经解决了。
但只是想知道,有人知道为什么第一个 nginx 配置(带有换行符的配置)会导致 PROTOCOL_ERROR ?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。