小编cbl*_*ard的帖子

我如何处理HTTP GET查询字符串长度限制仍然想要RESTful?

http://www.boutell.com/newfaq/misc/urllength.html中所述,HTTP查询字符串的长度有限.它可能受客户端(Firefox,IE,...),服务器(Apache,IIS,...)或网络设备(应用防火墙......)的限制.

今天我用搜索表单来解决这个问题.我们开发了一个包含很多字段的搜索表单,这个表单作为GET请求发送到服务器,因此我可以将结果页面添加为书签.

我们有很多字段,我们的查询字符串长度为1100字节,我们有一个防火墙可以丢弃超过1024字节的HTTP GET请求.我们的系统管理员建议我们使用POST,这样就没有限制.

当然,POST会起作用,但我真的觉得搜索是一个GET而不是POST.所以我想我会检查我们的字段名称,以确保查询字符串不会太长,如果我不能,我会务实并使用POST.

但RESTful服务的设计是否存在缺陷?如果我们在GET请求中的长度有限,我该如何将大对象发送到RESTful Web服务?例如,如果我有一个基于文件进行计算的程序,我想提供这样的RESTful Web服务:http://compute.com?content=<base64 file>.这不起作用,因为查询字符串不具有无限长度.

我有点不解......

rest http

74
推荐指数
5
解决办法
5万
查看次数

如何在像nginx这样的代理后面登录rails log中的真实客户端ip

问题

我在两台服务器上安装了机架1.4.5的导轨3.2.15.第一台服务器是服务静态资产的nginx代理.第二台服务器是服务于rails应用程序的独角兽.

在Rails中,production.log我总是看到nginx IP地址(10.0.10.150),而不是我的客户端IP地址(10.0.10.62):

Started GET "/" for 10.0.10.150 at 2013-11-21 13:51:05 +0000
Run Code Online (Sandbox Code Playgroud)

我希望在日志中拥有真正的客户端IP.

我们的设置

HTTP头X-Forwarded-ForX-Real-IP被正确地建立在nginx的,我已经定义10.0.10.62设置为不是可信的代理服务器地址config.action_dispatch.trusted_proxies = /^127\.0\.0\.1$/config/environments/production.rb,这要归功于另一个答案.我可以检查它是否正常工作,因为我在应用程序控制器中记录它们:

app/controllers/application_controller.rb:

class ApplicationController < ActionController::Base
    before_filter :log_ips

    def log_ips
        logger.info("request.ip = #{request.ip} and request.remote_ip = #{request.remote_ip}")
    end
end
Run Code Online (Sandbox Code Playgroud)

production.log:

request.ip = 10.0.10.150 and request.remote_ip = 10.0.10.62
Run Code Online (Sandbox Code Playgroud)

调查

在调查时,我看到它Rails::Rack::Logger负责记录IP地址:

def started_request_message(request)
  'Started %s "%s" for %s at %s' % [
    request.request_method,
    request.filtered_path,
    request.ip, …
Run Code Online (Sandbox Code Playgroud)

ruby logging reverse-proxy nginx ruby-on-rails-3

26
推荐指数
3
解决办法
1万
查看次数

是否有命令行工具在Java密钥库中生成对称密钥?

我正在编写一个关于我的应用程序密钥更新的程序.每隔一年左右,系统管理员将执行此程序.

在我的应用程序中,有一个对称密钥用于在将某些数据存储到数据库之前对其进行加密.此密钥存储在Java密钥库中.

当应用程序必须以加密方式在数据库中存储某些数据时,从配置文件中读取要使用的密钥别名,使用此密钥别名从Java密钥库读取密钥,使用密钥对数据进行加密并存储数据库中的所有内容:密钥别名,初始化向量和加密数据,全部用分号分隔.

所以使用另一个密钥的过程很简单:

  1. 使用另一个别名在Java Keystore中生成新的对称密钥
  2. 更改配置文件以使用此新密钥别名

但我不知道任何可以在Java密钥库中创建对称密钥的命令行工具.java keytool实用程序只能创建密钥对.

是否有命令行工具在Java密钥库中生成对称密钥,还是应该开发自己的工具?

java key-management

5
推荐指数
1
解决办法
1万
查看次数

是否可以在java Manifest文件中使用SHA1-Digest而无需实际使用密钥

目前我们使用jarsigner签署我们的jar.然后,我们为某些特定类显示一些SHA1-Digest值,以向外部审计员证明代码在发行版之间没有变化.

我们只依靠META-INF/xxx.SF文件来获取摘要信息,我们从不使用META-INF/xxx.DSA签名块文件.

由于我们只需要在代码中进行摘要计算,因此我想知道是否可以.SF使用某些java工具生成文件,而无需实际使用密钥.

我阅读http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html,但看起来密钥是强制性的.

java jar manifest jarsigner

4
推荐指数
1
解决办法
1万
查看次数