RunHaiku 4.5repeat 1
Single on HTTP 301 vs 308
claude-haiku-4-5-20251001__single__research-http-redirects__r1
Score
0.917
- Cost
- $0.096
- + $0.067 judging
- Latency
- 54.7s
- setup 0.1s, grading 4.8s
- Turns
- 21
- Tool calls
- 20
- Subagents
- 0
- Tokens in / out
- 228k / 4.8k
- 199,898 read from cache
Did the design run?
- Run completed: heldharness.run-completedThe environment was built, the architecture returned and grading finished, none of them throwing.
- No API failures: heldharness.apiNo model call failed at the API.
- Every call ended: heldharness.calls-endedEvery call ended with a result, or was stopped by the run's own limits.
- No harness tool denied: heldharness.harness-toolsThe sandbox guard never denied a harness tool, nor a tool the session itself offered.
- Tool servers connected: heldharness.mcp-connectedEvery tool server the harness gave a call was connected when the session started.
- No foreign tool servers: heldharness.mcp-hermeticNo call loaded a tool server the harness did not give it.
- Builtin tools: heldharness.builtin-toolsA check recorded with the run.
- Structured replies arrived: heldharness.structured-outputEvery call that asked for structured output and ran to the end got it.
- No silent fallbacks: heldharness.not-degradedNo phase fell back on a default (an empty plan, a default winner) instead of its output.
- Judge answered: heldharness.judgeAt least one grading call returned a usable verdict.
- Each call was shown the right tools: heldsingle.toolsThe agent was shown exactly the task’s tools, none missing and none extra.
Phases
Drawn from the phase records: timing and cost per call, no tool calls or messages.
| Phase | Duration | Cost | Turns | Tools | Model |
|---|---|---|---|---|---|
| Main | 54.7s | $0.096 | 21 | 20 | claude-haiku-4-5-20251001 |
The call-by-call replay is not published for this run. Traces are large, so the repository keeps 9 of this run set’s 900 and leaves the rest out; the score, phases and final answer on this page come from the committed run record.
Runs you can replay
- A gate that blocked the right moveGated-execute · Haiku 4.5
- Three proposals beat one agentPropose-select · Haiku 4.5
- A verifier that earned its keepPlan-execute-verify · Sonnet 5.5
- A revision that did not helpPlan-execute-verify · Haiku 4.5
- The control, missing a stepSingle · Haiku 4.5
Record this cell yourself: npm run bench -- run --strategies single --tasks research-http-redirects --models claude-haiku-4-5-20251001 --repeats 1
Score breakdown
- passStates that 301 is "Moved Permanently" and 308 is "Permanent Redirect", and that both indicate the target resource has been assigned a new permanent URI.1.00weight 0.17
met, backed by verified evidence E1, E2. “**HTTP 308 (Permanent Redirect)** also indicates that the target resource has been permanently moved to a new URI”
- passStates that a client following a 308 must not change the request method: a POST is repeated as a POST, with its body.1.00weight 0.25
met, backed by verified evidence E4, E5. “the client must send a POST with the same body to the new location”
- passStates that when following a 301 a user agent MAY change the request method from POST to GET (for historical reasons), which is the behaviour 308 exists to rule out.1.00weight 0.25
met, backed by verified evidence E3. “clients (particularly browsers) are permitted to change the request method from POST to GET when following a 301 redirect”
- passStates that both 301 and 308 responses are heuristically cacheable, i.e. a cache may reuse them by default unless the method definition or explicit cache controls say otherwise.1.00weight 0.17
met, backed by verified evidence E6, E7. “both 301 and 308 responses are **heuristically cacheable** by default”
- partialStates that both codes are currently specified in RFC 9110 (HTTP Semantics), and that 308 was originally defined in RFC 7538, which RFC 9110 obsoletes.0.50weight 0.17
partial, backed by verified evidence E8, E9. “is now included in RFC 9110 (HTTP Semantics), Section 15.4.9”
Penalties
No penalties were applied.
Scorer metadata
- corpus
- {"version":2,"snapshot":"2026-10-01","hash":"25fbed79c4f7f9e1b850436e0e4872f8e25dd80142f3177231c456f21817b817","documents":8}
- opened documents
- ["rfc9110","mdn-status-301","mdn-status-308","rfc7538","mdn-redirections"]
- opened by role
- {"primary":["rfc9110"],"secondary":["mdn-status-301","mdn-status-308","mdn-redirections"],"superseded":["rfc7538"]}
- displayed share
- {"rfc7538":1,"mdn-status-308":1,"rfc9110":0.0363,"mdn-status-301":1,"rfc7231":0.0048,"mdn-status-307":0.1087,"mdn-redirections":0.6857}
- cited count
- 4
- verified count
- 4
- hallucinated count
- 0
- citation integrity
- 1
- hallucinated urls
- []
- evidence block
- true
- evidence block repaired
- false
- evidence count
- 10
- verified quote count
- 10
- verified quote rate
- 1
- evidence
- [{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"HTTP 301 indicates the target resource has been permanently moved to a new URI","quote":"The 301 (Moved Permanently) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"HTTP 308 indicates the target resource has been permanently moved to a new URI","quote":"The 308 (Permanent Redirect) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"For historical reasons, clients MAY change the request method from POST to GET for 301","quote":"For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 308 (Permanent Redirect) status code can be used instead.","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc7538.html","claim":"HTTP 308 does not allow changing the request method from POST to GET","quote":"This status code is similar to 301 (Moved Permanently) ([RFC7231], Section 6.4.2), except that it does not allow changing the request method from POST to GET.","verified":true,"document":"rfc7538"},{"url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308","claim":"With 308, the request method and body will not be modified by the client","quote":"The request method and the body will not be modified by the client in the redirected request.","verified":true,"document":"mdn-status-308"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"Both 301 and 308 responses are heuristically cacheable","quote":"A 301 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"308 response is also heuristically cacheable","quote":"A 308 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"HTTP 301 is specified in RFC 9110 Section 15.4.2","quote":"15.4.2. 301 Moved Permanently","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc7538.html","claim":"HTTP 308 is specified in RFC 9110 Section 15.4.9 and was created to provide permanent redirect without method changes","quote":"Section 6.4.7 of [RFC7231] states that it does not define a permanent variant of status code 307; this specification adds the status code 308, defining this missing variant (Section 3).","verified":true,"document":"rfc7538"},{"url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Redirections","claim":"308 was created specifically as the permanent variant of 307","quote":"308 was created to remove the ambiguity of the behavior when using non-GET methods.","verified":true,"document":"mdn-redirections"}]
- judge unverified quotes
- 0
- judge verdicts
- [{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8","E9"]}},{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8","E9"]}},{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8"]}}]
- judge failures
- 0
- grounded weight share
- 1
Final answer
Now I have enough information to provide a comprehensive answer. Let me compile the findings.
Answer
HTTP status codes 301 and 308 are both permanent redirect codes, but they differ significantly in how they handle request methods and request bodies.
What Each Code Means
HTTP 301 (Moved Permanently) indicates that the target resource has been permanently moved to a new URI. It suggests that future references to the resource should use one of the new URIs provided in the Location header. Search engines and other crawlers will update their records accordingly.
HTTP 308 (Permanent Redirect) also indicates that the target resource has been permanently moved to a new URI and that future references should use the enclosed URIs. The key difference lies in how clients handle the redirect.
Request Method and Body Handling
The fundamental difference between 301 and 308 lies in how clients treat the request method and body:
301 Moved Permanently: For historical reasons, clients (particularly browsers) are permitted to change the request method from POST to GET when following a 301 redirect. This means if you POST data to a URL that returns 301, the client may convert that to a GET request to the new location, losing the request body in the process.
308 Permanent Redirect: With 308, the request method and body must not be changed by the client. If the original request was a POST with a body, the client must send a POST with the same body to the new location. This removes the ambiguity that exists with 301 and was the primary reason 308 was created—to serve as a permanent variant of 307 (which similarly does not allow method changes, but is temporary).
Cacheability
Both status codes have the same caching behavior: both 301 and 308 responses are heuristically cacheable by default. This means they can be cached without explicit cache control headers, unless otherwise indicated by the method definition or explicit cache controls.
Current Specifications
- HTTP 301 is specified in RFC 9110 (HTTP Semantics), Section 15.4.2, and was originally defined in RFC 7231.
- HTTP 308 was introduced in RFC 7538 (April 2015) and is now included in RFC 9110 (HTTP Semantics), Section 15.4.9. RFC 7538 was created specifically to define the missing permanent variant of status code 307.
The key reason 308 was created is explained in RFC 7538: while 307 (Temporary Redirect) provides a clear specification that the method must not change, HTTP lacked a corresponding permanent redirect with this same guarantee. RFC 7538 filled this gap by adding 308 as the permanent counterpart to 307, with the same strict method preservation requirements.
{"evidence": [{"claim": "HTTP 301 indicates the target resource has been permanently moved to a new URI", "quote": "The 301 (Moved Permanently) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "HTTP 308 indicates the target resource has been permanently moved to a new URI", "quote": "The 308 (Permanent Redirect) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "For historical reasons, clients MAY change the request method from POST to GET for 301", "quote": "For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 308 (Permanent Redirect) status code can be used instead.", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "HTTP 308 does not allow changing the request method from POST to GET", "quote": "This status code is similar to 301 (Moved Permanently) ([RFC7231], Section 6.4.2), except that it does not allow changing the request method from POST to GET.", "url": "https://www.rfc-editor.org/rfc/rfc7538.html"}, {"claim": "With 308, the request method and body will not be modified by the client", "quote": "The request method and the body will not be modified by the client in the redirected request.", "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308"}, {"claim": "Both 301 and 308 responses are heuristically cacheable", "quote": "A 301 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "308 response is also heuristically cacheable", "quote": "A 308 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "HTTP 301 is specified in RFC 9110 Section 15.4.2", "quote": "15.4.2. 301 Moved Permanently", "url": "https://www.rfc-editor.org/rfc/rfc9110.html"}, {"claim": "HTTP 308 is specified in RFC 9110 Section 15.4.9 and was created to provide permanent redirect without method changes", "quote": "Section 6.4.7 of [RFC7231] states that it does not define a permanent variant of status code 307; this specification adds the status code 308, defining this missing variant (Section 3).", "url": "https://www.rfc-editor.org/rfc/rfc7538.html"}, {"claim": "308 was created specifically as the permanent variant of 307", "quote": "308 was created to remove the ambiguity of the behavior when using non-GET methods.", "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Redirections"}]}Provenance of the numbers on this page
- run set
- scaffold-or-scale-v1
- models
- Haiku 4.5, Sonnet 5.5, Opus 5.5
- effort
- high
- repeats
- 2
- fixtures
- replay
- runs
- 900 / 900
- strategy cost
- $354.44
- judge cost
- $9.19
- wall clock
- 9h 48m
- git
- fce5807b2d
Cost excludes judge calls, which are tracked separately so a scoring model never flatters or penalises an architecture. Every figure on this site is read from results/ at build time.