void
HttpStateData::processSurrogateControl(HttpReply *reply)
{
-#if USE_SQUID_ESI
-
if (request->flags.accelerated && reply->surrogate_control) {
- HttpHdrScTarget *sctusable =
- httpHdrScGetMergedTarget(reply->surrogate_control,
- Config.Accel.surrogate_id);
+ HttpHdrScTarget *sctusable = httpHdrScGetMergedTarget(reply->surrogate_control, Config.Accel.surrogate_id);
if (sctusable) {
if (EBIT_TEST(sctusable->mask, SC_NO_STORE) ||
/* The HttpHeader logic cannot tell if the header it's parsing is a reply to an
* accelerated request or not...
- * Still, this is an abtraction breach. - RC
+ * Still, this is an abstraction breach. - RC
*/
if (sctusable->max_age != -1) {
if (sctusable->max_age < sctusable->max_stale)
httpHdrScTargetDestroy(sctusable);
}
}
-
-#endif
}
int
return 0;
- default: /* Unknown status code */
- debugs (11, DBG_IMPORTANT, "WARNING: Unexpected http status code " << rep->sline.status);
+ default:
+ /* RFC 2616 section 6.1.1: an unrecognized response MUST NOT be cached. */
+ debugs (11, 3, HERE << "Unknown HTTP status code " << rep->sline.status << ". Not cacheable.");
return 0;
if (!parsed && readBuf->contentSize() > 5 && strncmp(readBuf->content(), "HTTP/", 5) != 0 && strncmp(readBuf->content(), "ICY", 3) != 0) {
MemBuf *mb;
HttpReply *tmprep = new HttpReply;
- tmprep->sline.version = HttpVersion(1, 0);
- tmprep->sline.status = HTTP_OK;
- tmprep->header.putTime(HDR_DATE, squid_curtime);
+ tmprep->setHeaders(HTTP_OK, "Gatewaying", NULL, -1, -1, -1);
tmprep->header.putExt("X-Transformed-From", "HTTP/0.9");
mb = tmprep->pack();
newrep->parse(mb, eof, &error);
if (!parsed && error > 0) { // unrecoverable parsing error
debugs(11, 3, "processReplyHeader: Non-HTTP-compliant header: '" << readBuf->content() << "'");
flags.headers_parsed = 1;
- newrep->sline.version = HttpVersion(1, 0);
+ newrep->sline.version = HttpVersion(1,0);
newrep->sline.status = error;
HttpReply *vrep = setVirginReply(newrep);
entry->replaceHttpReply(vrep);
readBuf->consume(header_bytes_read);
}
+ /* Skip 1xx messages for now. Advertised in Via as an internal 1.0 hop */
+ if (newrep->sline.protocol == PROTO_HTTP && newrep->sline.status >= 100 && newrep->sline.status < 200) {
+
+#if WHEN_HTTP11
+ /* When HTTP/1.1 check if the client is expecting a 1xx reply and maybe pass it on */
+ if (orig_request->header.has(HDR_EXPECT)) {
+ // TODO: pass to the client anyway?
+ }
+#endif
+ delete newrep;
+ debugs(11, 2, HERE << "1xx headers consume " << header_bytes_read << " bytes header.");
+ header_bytes_read = 0;
+ if (reply_bytes_read > 0)
+ debugs(11, 2, HERE << "1xx headers consume " << reply_bytes_read << " bytes reply.");
+ reply_bytes_read = 0;
+ ctx_exit(ctx);
+ processReplyHeader();
+ return;
+ }
+
flags.chunked = 0;
if (newrep->sline.protocol == PROTO_HTTP && newrep->header.hasListMember(HDR_TRANSFER_ENCODING, "chunked", ',')) {
flags.chunked = 1;
if (!vary) {
entry->makePrivate();
+ if (!fwd->reforwardableStatus(rep->sline.status))
+ EBIT_CLR(entry->flags, ENTRY_FWD_HDR_WAIT);
goto no_cache;
-
}
entry->mem_obj->vary_headers = xstrdup(vary);
strVia.clean();
}
-#if USE_SQUID_ESI
if (orig_request->flags.accelerated) {
/* Append Surrogate-Capabilities */
- String strSurrogate (hdr_in->getList(HDR_SURROGATE_CAPABILITY));
- snprintf(bbuf, BBUF_SZ, "%s=\"Surrogate/1.0 ESI/1.0\"",
- Config.Accel.surrogate_id);
+ String strSurrogate(hdr_in->getList(HDR_SURROGATE_CAPABILITY));
+#if USE_SQUID_ESI
+ snprintf(bbuf, BBUF_SZ, "%s=\"Surrogate/1.0 ESI/1.0\"", Config.Accel.surrogate_id);
+#else
+ snprintf(bbuf, BBUF_SZ, "%s=\"Surrogate/1.0\"", Config.Accel.surrogate_id);
+#endif
strListAdd(&strSurrogate, bbuf, ',');
hdr_out->putStr(HDR_SURROGATE_CAPABILITY, strSurrogate.termedBuf());
}
-#endif
/** \pre Handle X-Forwarded-For */
if (strcmp(opt_forwarded_for, "delete") != 0) {
http_state_flags stateFlags)
{
const int offset = mb->size;
- HttpVersion httpver(1, 0);
+ HttpVersion httpver(1,1);
mb->Printf("%s %s HTTP/%d.%d\r\n",
RequestMethodStr(aRequest->method),
aRequest->urlpath.size() ? aRequest->urlpath.termedBuf() : "/",
deleteThis("HttpStateData::abortTransaction");
}
-#if DEAD_CODE
-void
-httpBuildVersion(HttpVersion * version, unsigned int major, unsigned int minor)
-{
- version->major = major;
- version->minor = minor;
-}
-#endif
-
HttpRequest *
HttpStateData::originalRequest()
{