让我在这里解释一个现实世界的情况。
我运行网站 https://www.liloo.ro我想为它启用 HSTS(+HSTS 预加载)。
问题是为了提交给preload list 主域 必须使用 HSTS header 进行响应。
让我更准确地说: 为了将站点提交到预加载列表并满足要求,第一个重定向必须到主域的 https 版本。
在我的例子中,我不能直接从 http 重定向到 https + www -> 我必须先从 http 重定向到 https(在这里提供主域名 HSTS header ),然后再次重定向到 https + www
这造成了一个巨大的重定向稀释 SEO 问题(更不用说链接重定向并不理想的事实)。
因此,无论我怎么看,我要么必须放弃 HSTS 预加载列表,要么使用链式重定向。这两个选项看起来都不理想。
唯一可能的解决方法可能是预加载列表要求中的某些内容,但我不太明白它的含义:
If you are serving a redirect, that redirect must have the HSTS header, not the page it redirects to.
据我所知,在进行重定向时无法提供 HSTS header 之类的东西……但也许我错了。 任何想法如何解决这个问题? ...或者我应该完全放弃 HSTS 预加载列表,因为我的网站只有 www?
此时我不能只从 www 切换到非 www...我知道这将是“简单”的解决方案。
任何想法 - 非常感谢。 我注意到这个线程 Adding HSTS http headers on domain root during redirect to www subdomain in web.config ...但我怀疑它是否能解决问题(+ 我正在使用 nginx)
最佳答案
我真的很感谢你发布这个,因为我有完全相同的问题,即 http://DOMAIN directly 重定向到 https://www.DOMAIN,合并到 HTTPS 的重定向和到 www 子域的重定向。
I know it would have been the "easy" solution.
注意有reasons使用像 www 这样的子域,就像 discussed 一样已经有好几次了,所以这个选择是完全可以理解的。
但是,HSTS 没有办法(至少现在还没有)将这两种重定向结合起来:它只能直接转发到 HTTPS。我想如果 HSTS 预加载站点检测到这不是普通 HTTP 服务器本身所做的不是,那么强制执行“307 内部重定向”到 HTTPS 是不允许的。 (据我所知,此要求并未在 hstspreload.org 上明确说明,但只能通过实际尝试设置 HSTS 预加载才能找到。)
我无法完整回答您的问题,但我可以就您提出的几点提供更多信息:
If you are serving a redirect, that redirect must have the HSTS header, not the page it redirects to.
请注意来自 hstspreload.org 的确切(当前)报价:
If you are serving an additional redirect from your HTTPS site, that redirect must still have the HSTS header (rather than the page it redirects to).
这与以下几点有关:
As far as I know there is no way to serve such thing as a HSTS header when doing a redirect ...
HTTP 重定向响应也完全有可能具有 HSTS header 。这仅意味着 HTTP 重定向响应还包含一个带有适当参数的 Strict-Transport-Security header 字段。例如,使用 SWI-Prolog 作为 HTTP 服务器,您可以像这样发出这样的响应:
?- http_status_reply(moved('https://stackoverflow.com'), current_output,
[strict_transport_security('max-age=63072000; includeSubdomains')], Code).
产量:
HTTP/1.1 301 Moved Permanently Date: Sun, 12 Feb 2017 10:04:55 GMT Location: https://stackoverflow.com Strict-Transport-Security: max-age=63072000; includeSubdomains Content-Length: 366 Content-Type: text/html; charset=UTF-8 etc.
请注意,只有在 已经 使用 TLS 时才允许使用此 header 字段(否则,攻击者可能会通过未经身份验证的连接强制将流量传输到不同的端口!)。事实上, header 绝不能出现在 HTTP→HTTPS 重定向中,因为它使用未经身份验证的连接,如果它(错误地)确实出现在普通 HTTP 上,客户端必须忽略它。
现在是您问题的真正要点:
This poses a huge redirect dilution SEO problem (not to mention the fact that chained redirects are not ideal).
我完全同意链式重定向远非理想,并且似乎没有办法解决这个问题,像我们这样的(常见!)设置,至少目前不是。
但是,我个人希望额外重定向的影响不会对您网站的排名产生太大影响:理论上,一旦搜索引擎看到您的网站在 HSTS 预加载列表中,它应该关心的只是 HTTPS它的版本(因为这也是支持 HSTS 预加载的浏览器会做的!)。因此,您最终只有一个重定向,即 https://DOMAIN→https://www.DOMAIN,这应该与您当前的相当可比情况。至少那是我有点幼稚的希望。在此重定向中,确保包含 HSTS header ,因为这是进入预加载列表的要求。当然,具体的配置细节取决于您的具体 Web 服务器。
另外请注意,即使您已将其放入 HSTS 预加载列表中,您也无法恢复原始重定向链。这是因为 Continued requirements 部分指出:
You must make sure your site continues to satisfy the submission requirements at all times.
关于ssl - HSTS 预加载列表 - www 站点可能出现的 SEO 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052047/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail