{"record":{"id":"d9f69b46e6c2a80d","repo":"XTLS/Xray-core","slug":"unsupported-seq-placement","errorCode":null,"errorMessage":"unsupported seq placement: ","messagePattern":"unsupported seq placement: ","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"infra/conf/transport_method.go","lineNumber":396,"sourceCode":"\n\tif c.UplinkHTTPMethod == \"GET\" && c.Mode != \"packet-up\" {\n\t\treturn nil, errors.New(\"uplinkHTTPMethod can be GET only in packet-up mode\")\n\t}\n\n\tswitch c.SessionIDPlacement {\n\tcase \"\":\n\t\tc.SessionIDPlacement = \"path\"\n\tcase \"path\", \"cookie\", \"header\", \"query\":\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported session placement: \" + c.SessionIDPlacement)\n\t}\n\n\tswitch c.SeqPlacement {\n\tcase \"\":\n\t\tc.SeqPlacement = \"path\"\n\tcase \"path\", \"cookie\", \"header\", \"query\":\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported seq placement: \" + c.SeqPlacement)\n\t}\n\n\tif c.SessionIDPlacement != \"path\" && c.SessionIDKey == \"\" {\n\t\tswitch c.SessionIDPlacement {\n\t\tcase \"cookie\", \"query\":\n\t\t\tc.SessionIDKey = \"x_session\"\n\t\tcase \"header\":\n\t\t\tc.SessionIDKey = \"X-Session\"\n\t\t}\n\t}\n\n\tif c.SessionIDTable != \"\" {\n\t\tif predefined, ok := splithttp.PredefinedTable[c.SessionIDTable]; ok {\n\t\t\tc.SessionIDTable = predefined\n\t\t}\n\t\troom := roomSize(len(c.SessionIDTable), c.SessionIDLength.From, c.SessionIDLength.To)\n\t\t// 2.1B possiblities should be enough\n\t\tif room.Cmp(big.NewInt(2<<30)) < 0 {","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/infra/conf/transport_method.go#L378-L414","documentation":"SplitHTTPConfig.Build() validates \"seqPlacement\" (sequence-number placement for packet-up uploads) at transport_method.go:391-397. Empty defaults to \"path\"; only \"path\", \"cookie\", \"header\", \"query\" pass; anything else is appended to the error. Keys for non-path placements get defaults at lines 427-434 (x_seq / X-Seq).","triggerScenarios":"\"seqPlacement\": \"PATH\", \"header-in-query\", \"body\", or any value outside the four allowed ones.","commonSituations":"Same-family typos as sessionIDPlacement; copying placement vocabulary from other splithttp fields with different enums.","solutions":["Use one of: \"path\", \"cookie\", \"header\", \"query\"","Omit the field to use the \"path\" default"],"exampleFix":"// before\n\"seqPlacement\": \"Path\"\n// after\n\"seqPlacement\": \"path\"","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"func validSeqPlacement(p string) bool {\n\tswitch p {\n\tcase \"\", \"path\", \"cookie\", \"header\", \"query\":\n\t\treturn true\n\t}\n\treturn false\n}","tryCatchPattern":null,"preventionTips":["Same enum as sessionIDPlacement; omit for path default"],"tags":["config","splithttp","packet-up","validation"],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}