Cors Proxy 该不该自动重定向
Client 通过 CorsProxy 请求了一个页面
CorsProxy 收到请求后,自己去重新请求目标页面
目标页面返回了 302 重定向
CorsProxy 收到后自动消化了这个重定向
但是在处理 Location 的时候,这个 Location 的 URL 包含一个空格
CorsProxy 抛错
场景是这样的,那么这里有2个问题。
1) 为什么 CorsProxy 自动跳转的时候会抛错,而浏览器自动跳转的时候不会抛错?
这个和框架实现原理有关。严格的来说,URL 里是不允许有空格的,但是如果对空格解码,解码出来的还是空格。
浏览器在这方面的要求不是很严格,而 RestTemplate 对这个要求很严格。
坑爹的是,RestTemplate 只会抛一个 400 bad request 错误。
后来我尝试着用别的框架去调用这个地址才看到了详细的错误内容,然后才意识到是 Location 里的 URL 里包含一个空格!
2) 为什么 RestTemplate 会自动去做重定向?该不该做?
其实在大部分场景中,框架和浏览器自动处理重定向是有好处的。难不成你 Javascript 的 Ajax 请求中每次都要手动处理重定向?这个太麻烦了!
可我的这个 CorsProxy 和一般的 Web 接口不同,我不应该内部消化,我只是一个转发者,我要把数据原封不动地抛回去!
所以我标题中的答案就很清楚了,CorsProxy 不该内部消化重定向。
RestTemplate