抓包显示服务器返回结果为空,使用条件请求,服务器日志显示返回 200,但客户端接收为 304...

Rails6 中,一个控制器代码在遇到If-Modified-Since条件时,预期返回200但实际返回304。通过实例解析,探讨status值改变如何影响HTTP响应结果,寻求解决疑惑的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一段很简单的代码 (rails 6)

class HomeController < ApplicationController

def index

@subjects = Subject.all

if stale? @subjects

render plain:'stale', status:200

end

end

end

执行curl -i 'http://127.0.0.1:3000/' -H 'If-None-Match: W/"bfd6f8bb9d7c5c210ab13b06a5cfcde1"' -H 'If-Modified-Since: Thu, 02 Apr 2020 08:01:57 GMT' --compressed

由于 if-modified-since 时间早于@subjects中最大的 updated_at, 所以会执行render plain: 'stale', status: 200,IDE 中看到日志也是Completed 200 OK in 15ms

,断点执行 response.status 返回也是 200,但 curl 中的响应结果却是 304,如下

HTTP/1.1 304 Not Modified

X-Frame-Options: SAMEORIGIN

X-XSS-Protection: 1; mode=block

X-Content-Type-Options: nosniff

X-Download-Options: noopen

X-Permitted-Cross-Domain-Policies: none

Referrer-Policy: strict-origin-when-cross-origin

ETag: W/"bfd6f8bb9d7c5c210ab13b06a5cfcde1"

Last-Modified: Fri, 03 Apr 2020 02:06:29 GMT

Cache-Control: max-age=0, private, must-revalidate

X-Request-Id: a42b9511-1df3-490b-8230-f6400fa92d1b

X-Runtime: 0.515872

使用 charlse 抓包确实是 304。

但如果把render plain: 'stale', status: 200中的 status 改为 201 或其他值,同样的 curl 请求返回的结果就是设置的值。

想不通。求助大佬们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值