前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tomcat服务启动,但是无法访问网站_java获取request的所有参数

tomcat服务启动,但是无法访问网站_java获取request的所有参数

作者头像
全栈程序员站长
发布于 2022-09-30 13:11:55
发布于 2022-09-30 13:11:55
1.3K0
举报

大家好,又见面了,我是你们的朋友全栈君。

废话不说,真接上代码。

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestProperty(“Content-Length”, “0”);

中的第二句没有起作用(发出去的http头里,未含有Content-Length字段)。

但是这个代码在android平台上跑的时候,第二句是起了作用的。

为了找出原因,真接跟到源代码中看:

public void setRequestProperty(String key, String value) {

if (connected)

throw new IllegalStateException(“Already connected”);

if (key == null)

throw new NullPointerException (“key is null”);

if (isExternalMessageHeaderAllowed(key, value)) {

requests.set(key, value);

}

}

private boolean isExternalMessageHeaderAllowed(String key, String value) {

checkMessageHeader(key, value);

if (!isRestrictedHeader(key, value)) {

return true;

}

return false;

}

private boolean isRestrictedHeader(String key, String value) {

if (allowRestrictedHeaders) {

return false;

}

key = key.toLowerCase();

if (restrictedHeaderSet.contains(key)) {

/*

* Exceptions to restricted headers:

*

* Allow “Connection: close”.

*/

if (key.equals(“connection”) && value.equalsIgnoreCase(“close”)) {

return false;

}

return true;

} else if (key.startsWith(“sec-“)) {

return true;

}

return false;

}

由上面代码可以看出,一个属性能不能加到request中,由allowRestrictedHeaders和restrictedHeaderSet决定的。如果key在restrictedHeaderSet,而且allowRestrictedHeaders为false时,这个key的值是不能加到request中的。

继续来看restrictedHeaderSet和allowRestrictedHeaders是哪里来的。在静态初始化代码中发现allowRestrictedHeaders是由安全管理器的返回值决定的。

restrictedHeaderSet的内容是由restrictedHeaders数组决定的。

allowRestrictedHeaders = ((Boolean)java.security.AccessController.doPrivileged(

new sun.security.action.GetBooleanAction(

“sun.net.http.allowRestrictedHeaders”))).booleanValue();

if (!allowRestrictedHeaders) {

restrictedHeaderSet = new HashSet(restrictedHeaders.length);

for (int i=0; i < restrictedHeaders.length; i++) {

restrictedHeaderSet.add(restrictedHeaders[i].toLowerCase());

}

} else {

restrictedHeaderSet = null;

}

数组的声明如下:

private static final Set restrictedHeaderSet;

private static final String[] restrictedHeaders = {

/* Restricted by XMLHttpRequest2 */

//”Accept-Charset”,

//”Accept-Encoding”,

“Access-Control-Request-Headers”,

“Access-Control-Request-Method”,

“Connection”, /* close is allowed */

“Content-Length”,

//”Cookie”,

//”Cookie2″,

“Content-Transfer-Encoding”,

//”Date”,

“Expect”,

“Host”,

“Keep-Alive”,

“Origin”,

// “Referer”,

// “TE”,

“Trailer”,

“Transfer-Encoding”,

“Upgrade”,

//”User-Agent”,

“Via”

};

由此可以看出Content-Length,Host,Transfer-Encoding等都是加不进去的。

但这是为什么呢?又应该如何解决呢?

于是搜索了下。

找到下面两篇。

http://stackoverflow.com/questions/6056125/why-does-content-length-http-header-field-use-a-value-other-than-the-one-given-i/6056230#6056230

http://lxy2330.iteye.com/blog/1882836

大概原因就是出于安全考虑,这些字段尽量不要被改动。sun就做了这一套安全机制。

解决方法是在JVM启动时加入sun.net.http.allowRestrictedHeaders属性为true。

按第二篇里的做法,是失败的。

试着的JVM启动参数里面加,但失败了。

于是我就直接在程序里面加了。如下面代码。然后就OK了。

System.setProperty(“sun.net.http.allowRestrictedHeaders”, “true”);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195197.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月10日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
当Tomcat遇上Netty(续集)
从下往下看,接收请求的时候走的确实是tomcat,然后通过spring cloud gateway的过滤器链,走到了一个叫作 NettyWriteResponseFilter的过滤器。
彤哥
2020/05/28
2.2K0
HttpClient问题汇总
由于业务需要在调用第三方SDK时需要设置host请求头为对方的域名,在测试时发现代码设置后依然无法生效。查找资料后发现是从JDK6的6u23版本开始就对HTTP的部分请求头做了限制,如下:
雨临Lewis
2023/04/17
5820
android学习笔记----记录get、post方式提交以及抓包和乱码问题
然后在浏览器输入:http://localhost:8080/login/login.jsp
砖业洋__
2023/05/06
4340
android学习笔记----记录get、post方式提交以及抓包和乱码问题
ksoap2:实现gzip压缩发送request data
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52484312
10km
2019/05/25
4310
从零开始的内存马分析——如何骑马反杀(三)
第三天,你看着windowsConfig.jsp,config.jsp,心里想着,可算抓到你了,这回要把你全部,全部都属于我,可是,当你正兴高采烈逐步分析的时候,却发现,自己的数据早已沦陷。。。
亿人安全
2022/12/22
1.5K0
从零开始的内存马分析——如何骑马反杀(三)
从零开始手写Tomcat的教程4节---Tomcat默认连接器
注意: 本节所讲的连接器是指Tomcat 4中的默认连接器,虽然该连接器已经弃用,被另一个运行速度更快的连接器—Coyote—取代,但它仍然是一个不错的学习工具
大忽悠爱学习
2022/05/10
8990
从零开始手写Tomcat的教程4节---Tomcat默认连接器
Spring cloud zuul的SendResponseFilter做了什么
Spring cloud zull 的SendResponseFilter主要工作是将代理请求获取的reponse写入当前response,发送回客户端。以下是源代码:
java达人
2019/03/08
2.5K0
Spring cloud zuul的SendResponseFilter做了什么
网络请求框架OkHttp3全解系列 - (三)拦截器详解1:重试重定向、桥、缓存(重点)
在本系列的上一篇文章中,我们走读了一遍okhttp的源码,初步了解了这个强大的网络框架的基本执行流程。
胡飞洋
2020/07/23
2.9K0
网络请求框架OkHttp3全解系列 - (三)拦截器详解1:重试重定向、桥、缓存(重点)
代码示例 | 断点续传(大文件的下载)后台功能实现
长连接:socket、urlconnection、http、okhttp、httpclient
码神联盟
2020/02/14
3.2K0
代码示例 | 断点续传(大文件的下载)后台功能实现
okhttp之五个拦截器的介绍
前面我们对 okhttp的RealCall.execute()流程做了介绍,在文末有提到五个自带的拦截器,本文就来介绍五个拦截器主要的工作。
103style
2022/12/19
1.5K0
request获取请求参数_request.getquerystring()
I achieve the POST request in Android and upload a picture to service successful.
全栈程序员站长
2022/10/01
1.7K0
JAVA是HttpURLConnection进行多线程文件下载
在开发中,需要实现一个文件下载的方法,对下载时间有一点要求,对于小文件来说,问题不大,单线程下载既可;
JQ实验室
2022/09/06
6750
HttpURLConnection设置host请求头无效
由于业务需要在调用第三方SDK时需要设置host请求头为对方的域名,在测试时发现代码设置后依然无法生效。查找资料后发现是从JDK6的6u23版本开始就对HTTP的部分请求头做了限制,如下:
雨临Lewis
2022/11/22
2.6K0
JAVA https双向验证案例,和生成keyStore文件的方法,https单向认证博文参考地址
简单说下:https=http+ssl。因此在代码中就是在http的基础 上先初始化ssl证书的所有信息,二者事由很明显的界限的,在代码中都有讲解。
全栈程序员站长
2022/08/09
1.3K0
mysql使用set类型_java修改request请求参数
I am trying to send multiple images to server but,so I am storing all the images in one arraylist,but after that when I need to send to server,it shows error near line ,,………………….
全栈程序员站长
2022/09/30
1.1K0
mysql使用set类型_java修改request请求参数
OkHttp接受response返回的gzip压缩数据时的坑
众所周知,在 HTTP 传输时是支持 gzip 压缩的,客户端发起请求时在请求头里增加 Accept-Encoding: gzip,服务端响应时在返回的头信息里增加 Content-Encoding: gzip,这表示传输的数据是采用 gzip 压缩的。默认情况下,传输内容是不压缩的,采用 gzip 压缩后可以大幅减少传输内容大小,这样可以提高传输速度,减少流量的使用。
知识浅谈
2021/10/26
3.9K0
聊聊nginx与tomcat的5xx
本文主要讲述一下nginx与tomcat的502、504、503错误及其常见的产生原因。
code4it
2018/09/17
2.7K0
Java实现Http的Post、Get、代理访问请求
Java实现Http的访问请求。包含基本的Get访问、Post访问。Post包含使用代理模式访问
似水的流年
2018/01/14
1.9K0
聊聊spring cloud gateway的RemoveHopByHopHeadersFilter
本文主要研究一下spring cloud gateway的RemoveHopByHopHeadersFilter
code4it
2018/09/17
1.7K0
okhttp——BridgeInterceptor
okhttp的网络请求采用interceptors链的模式。每一级interceptor只处理自己的工作,然后将剩余的工作,交给下一级interceptor。本文将主要阅读okhttp中的BridgeInterceptor,了解它的作用和工作原理。
Oceanlong
2019/05/15
1.4K0
推荐阅读
相关推荐
当Tomcat遇上Netty(续集)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档