如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>.这不起作用,因为查询字符串不具有无限长度.
我有点不解......
我在两台服务器上安装了机架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-For和X-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) 我正在编写一个关于我的应用程序密钥更新的程序.每隔一年左右,系统管理员将执行此程序.
在我的应用程序中,有一个对称密钥用于在将某些数据存储到数据库之前对其进行加密.此密钥存储在Java密钥库中.
当应用程序必须以加密方式在数据库中存储某些数据时,从配置文件中读取要使用的密钥别名,使用此密钥别名从Java密钥库读取密钥,使用密钥对数据进行加密并存储数据库中的所有内容:密钥别名,初始化向量和加密数据,全部用分号分隔.
所以使用另一个密钥的过程很简单:
但我不知道任何可以在Java密钥库中创建对称密钥的命令行工具.java keytool实用程序只能创建密钥对.
是否有命令行工具在Java密钥库中生成对称密钥,还是应该开发自己的工具?
目前我们使用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,但看起来密钥是强制性的.