我正在构建一些webby魔法并使用Apache来支持我们的tomcat服务器,将请求转发到端口8080上的tomcat.我有一个问题,使用Apache和mod_proxy来转发请求.看起来客户端(Web应用程序)发送HTTP 100-continue,Apache以417 Expectation Failed响应.
当我将Apache从图片中取出并在端口8080上直接向tomcat发送请求时,请求成功并且客户端被发送200 OK.
我的Apache配置如下:
ServerName abcproxy DocumentRoot/apps/apache-content/default
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript text/xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
ExpiresActive on
ExpiresDefault "access 0 seconds"
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPreserveHost On
CustomLog /apps/ocp-logs/apache/abcproxy.log combined
Run Code Online (Sandbox Code Playgroud)
谁知道我哪里出错了?
lam*_*cck 29
Apache有一个已知且未解决的Expect标题问题,请参阅错误46709和错误47087.
问题是某些客户端设置了Expect标头,并且只在PUT或POST数据之前发送请求标头.这允许服务器在客户端发送请求主体(PUT或POST数据)之前响应错误/重定向/安全违规.这是一个值得称赞的目标,但显然,客户端不会等到它得到响应并且只是推出请求的主体,这会导致417错误.
如果您可以控制.NET客户端,则可以将ServicePointManager.Expect100Continue属性设置为false,以覆盖此行为.
如果您只能控制服务器,看起来您可以为这些客户端强制使用HTTP 1.0(可能基于用户代理字符串),或者在请求的早期使用mod_header强制取消设置Expect标头.
要使用mod_headers尽早从请求中删除Expect标头,请使用以下config配置:
<IfModule mod_headers.c>
RequestHeader unset Expect early
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为客户端实际上并没有等待"100 Continue"响应,并且就像没有设置Expect标头一样.
归档时间: |
|
查看次数: |
16933 次 |
最近记录: |