你这个问题涉及的知识,值得分享下: 用 303 的原因是,默认的 302 或者 301(永久跳转)是不会改变请求方法的,也就是你在发送 DELETE 请求的时候,如果是 DELETE,那么跳转的时候还是会用 DELETE,但是如果你想跳的是个页面那么明显需要用 GET。这时候就需要用 303,303 就是为此而生。refer: https://zh.wikipedia.org/wiki/HTTP_303
再说没刷新的问题:
前端发送的请求有两种方式,浏览器发送或者 JS 发送。是浏览器发送的话,默认是会在新页面给你渲染的,所以肯定会刷新,即便你没有 redirect,只是 render。
如果是 JS 发送的话,因为是异步的,所以是不会自己去刷新页面的,就需要你自己去刷新,通过更改 window.location.href
看起来确实很简洁,但是跟 mvc 的职责划分不太吻合。类似<model>_options
这样的方法出现在 helper 中看起来更合理。
redirect_to :index
? 不应该是这样吗 redirect_to action: 'index'
@ecloud 我想你表达的应该是在不同的浏览器窗口打开同一个 web 应用。你的表述中有一个问题:
当 rails 验证的时候会用最后产生的 authenticity_token 验证
Rails 并不是用最后一个生成的 token,而且你不同的窗口中的打开的应用对应了不同的 session,而 session 存了不同的 token 用于请求的验证。
@warmwind 感觉你中间有一句话说得不够明确,会导致误解:
“而 server 端就可以比较这两处的是否一致来做出判断,判断请求的来源是否可靠,” 「因为第三方是无法知道 session 中的 token 的」
主要是最后一句「因为第三方是无法知道 session 中的 token 的」。第三方在这里应该指的是另外一个站点。这句话的陈述没错,一个不同的站点肯定不可能知道另外一个站点的 session 数据的。即使是同一个站点的 frontend side 也是没法知道本站点的 session 数据的。但是跟我们要想搞明白的 Rails CSRF 的细节没关系。
其实关键在于,发往服务器的请求中的 token,要么是模版渲染的时候从 session 中读取的,要么是 JS 从本站点的 meta tag 中读取的。那么对于第三方站点上的脚本,这其中的任何一个它都没法拿到,所以这样才防止了 CSRF 攻击。
面试是这样的,运气成分很大。你不知道面你的人是个什么样的人。但是如果跟面你的人谈不拢最好不去了。毕竟跟一个谈不拢的人一起工作是很痛苦的
哈哈,我顶你!别他妈在我面前谈你的理想。
试用期一个月一千?
在预发布版本里面,这个问题已经被修复了。所以目前这个问题只存在于 stable 的版本文档。 https://github.com/rails/rails/blob/db7edd81062648281d1e50c8ff9ebfafac5a9c3d/actionview/lib/action_view/helpers/asset_url_helper.rb#L384
@Rei 嗯,谢谢回复啦。我下来给文档提个 change request。
确实这个事情,最好的方式还是加后缀。
能解释下,为什么 freeze 了能提高性能?
内容是精彩的,排版是相当挫的
我的问题已经解决了,解决方案很简单,那就是将
proxy_set_header X-Forwarded-Host $host; 改为
proxy_set_header X-Forwarded-Host $host:81;
注意报错的时候说的是,“HTTP Origin header" 和 "request.base_url" 不匹配,其中“HTTP Origin header"是你 call 这个请求时候的除了去掉 path 部分的东西,就类似“http://localhost:3000/users"
那么 Origin:http://localhost:3000
而 request.base_url 这个值是根据 nignx 的配置算出来,所以如果你不配置 port 的话,他就没有 port。这个就是我遇到的错误的原因。所以我加上了 port 就好了。
@liukun_lk 还有种可能性,就是 rake assets:precompile 没能成功,public 的 assets 未更新,同时并没有生成新的 md5hash 列表,这样的话,就算 unicorn 重启了,Rails helper 找到的还是老版本的文件。
@liukun_lk 嗯,unicorn 没有真正重启,这个应该是比较确定的一个事儿了。
@cly 谢谢你的评论。很耐心也很细心。 抱歉这么久才来回复你的评论。 你的结论是正确的,我得到的错误是因为 JS 代码中有其他问题而报的错。正如官方文档所说,放在子目录下是完全支持的。 希望这个帖子能帮助到以后遇到同样问题的人。
我遇到了类似的问题,只是我的问题是我改了 nginx 的监听端口为 81,所以跟 base_url 不匹配了。还在探索中,有方案后在次更新
我入行就是他们的技术老大带的,技术很牛,人很好啊。 氛围也是很 nice 的,还经常一起打 war3。所以,如果你想去,那就别犹豫了。
难道要懂 C#,我擦,没戏了
我猜是你的 migration 没跑吗?而且你这个 get 会调用代码,所以会产生数据库调用,然后出错,这个是可能发生的
时薪多少讲讲
没看到什么报错呢? 我也遇到了 clang 报错,不过我 upgrade 了 freetds 就好了。系统是 Mac OS
灰常不错,内容丰富。用起来挺流畅的。 只是像是专栏里面的文章是不是没必要每个文章上面都显示作者啊。感觉费空间,没必要。当然如果一个专栏有多个作者的话,就另当别论了
文明的第一步就是不要让别人难堪,所以啊,大家少说些敏感词。 Ruby 都精通了吗? Rails 都吃透了吗? 都成 fulllllllstack 了吗? 如果没有,那有什么资格说些敏感词呢,对不
最近报了一个流利说的一个课程,练口语,感觉棒棒哒!
这帖子好冷清,虽然工资低了点,但是拥抱远程啊!
@u1453357893 怎么都没有继续 update?怎么解决的?什么问题呢?
谢谢提醒,怎么忘了这点了。看到错误信息都没想到去看看有没有 rescue,愚钝了。