websocket 中 request-line 中的URI编码问题

news/2024/7/7 21:46:33 标签: websocket, nginx, 400

首先,request-line组成如下:

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

在 rfc6455 规范的 5.1.2 Request-URI 中,有这样的描述:

The Request-URI is transmitted in the format specified in section 3.2.1. If the Request-URI is encoded using the "% HEX HEX" encoding [42], the origin server MUST decode the Request-URI in order to properly interpret the request. Servers SHOULD respond to invalid Request-URIs with an appropriate status code.

 规范中明确说了如果请求URI使用“%HEX-HEX”编码方式,服务器要能正确解码URI,其潜在的含义是,请求头中的URI可能编码,也可能不编码,因此在解析请求头的时候,必须对此做出判断。

但是,在我之前做 nginx 1.24 websocket 反向代理的时候,发现我的请求始终无法通过 nginx 到达服务器,nginx会直接给我报错 400,开始的时候我非常不解,改了很多次nginx的配置也无法解决问题,后来想到了一个办法,将nginx的日志级别开到debug,然后再实验的时候,发现nginx 日志里面输出了一条记录

client sent invalid request while reading client request line, client: 192.168.0.1, server: , request: "GET %2F%2Ftest HTTP/1.1"

终于将问题定位到了请求行,我发现这个请求头和用浏览器唯一的区别就是URI的编码。于是,我将URI编码取消 ,再次发送请求,这次终于成功通过了nginx的反向代理。

对此,我只能说,虽然规范规定了可以用URI编码,但是实际上,很多软件并没有重视这个问题。


http://www.niftyadmin.cn/n/5441838.html

相关文章

设计模式|工厂模式

文章目录 1. 工厂模式的三种实现2. 简单工厂模式和工厂方法模式示例3. 抽象工厂模式示例4. 工厂模式与多态的关系5. 工程模式与策略模式的关系6. 面试中可能遇到的问题6.1 **工厂模式的概念是什么?**6.2 **工厂模式解决了什么问题?**6.3 **工厂模式的优点…

【力扣刷题日记】597.好友申请I:总体通过率

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 597.好友申请I:总体通过率 表:FriendRequest 列名类型sender_idintsend_to_idintreq…

node.js常用命令及介绍

Node.js常用命令涵盖了从包的安装、管理到项目初始化的各个方面。以下是Node.js的一些常用命令及其详细解释: npm -v:查看npm的版本号。这个命令可以帮助你确认当前安装的npm的版本,以便于后续的操作和问题解决。 npm init:初始化…

linux系统--------------mysql数据库管理

目录 一、SQL语句 1.1SQL语言分类 1.2查看数据库信息 1.3登录到你想登录的库 1.4查看数据库中的表信息 1.5显示数据表的结构(字段) 1.5.1数据表的结构 1.5.2常用的数据类型: 二、关系型数据库的四种语言 2.1DDL:数据定义语言&am…

啥是大语言模型LLM

引言: 在人工智能的世界里,有一种技术正迅速改变我们与机器交流的方式——这就是大语言模型LLM(Large Language Model)。它们像是拥有海量知识库的超级智能,能够理解和生成人类语言。那么,大语言模型LLM到底…

中科弘云面视总结

中科院支持的一家公司。主要在做功能类似TVM的产品,用在国产硬件上。主要工作内容是开发类似于cudnn/cublas这一层的库。 岗位描述: 多进程了解吗? 分布式训练有哪两种方式? cuda的安装目录位于哪里? /usr/local/cuda 冯诺伊曼…

MySQL分库分表后的主键策略:跨越分布式难题,保持全局唯一ID的智慧实践

引言: 随着业务规模的不断扩大,单个MySQL数据库承载的数据量到达极限时,分库分表便成为一种常见的数据库水平扩展方案。然而,在分库分表后,如何妥善处理原本全局唯一的ID主键成为了一个必须面对的技术挑战。本文将深入…

动态规划专题之 斐波那契数

此系列是记录我看代码随想录的视频的感受 LC 509 按照动规五部曲来 dp数组以及下标的含义 dp[i]: 存储第i个斐波那契数的值 递推公式 先这么想,dp[i]是由哪些状态得到的?由dp[i-1]和dp[i-2]得到的,所以递推公式就是dp[i] dp[i-1] dp[i-…