{"record":{"id":"b77dd4ed7441b1bb","repo":"XTLS/Xray-core","slug":"unsupported-uplink-data-placement","errorCode":null,"errorMessage":"unsupported uplink data placement: ","messagePattern":"unsupported uplink data placement: ","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"infra/conf/transport_method.go","lineNumber":371,"sourceCode":"\n\tswitch c.XPaddingMethod {\n\tcase \"\":\n\t\tc.XPaddingMethod = \"repeat-x\"\n\tcase \"repeat-x\", \"tokenish\":\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported padding method: \" + c.XPaddingMethod)\n\t}\n\n\tswitch c.UplinkDataPlacement {\n\tcase \"\":\n\t\tc.UplinkDataPlacement = splithttp.PlacementAuto\n\tcase splithttp.PlacementAuto, splithttp.PlacementBody:\n\tcase splithttp.PlacementCookie, splithttp.PlacementHeader:\n\t\tif c.Mode != \"packet-up\" {\n\t\t\treturn nil, errors.New(\"UplinkDataPlacement can be \" + c.UplinkDataPlacement + \" only in packet-up mode\")\n\t\t}\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported uplink data placement: \" + c.UplinkDataPlacement)\n\t}\n\n\tif c.UplinkHTTPMethod == \"\" {\n\t\tc.UplinkHTTPMethod = \"POST\"\n\t}\n\tc.UplinkHTTPMethod = strings.ToUpper(c.UplinkHTTPMethod)\n\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}","sourceCodeStart":353,"sourceCodeEnd":389,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/infra/conf/transport_method.go#L353-L389","documentation":"SplitHTTPConfig.Build() validates \"uplinkDataPlacement\" in a switch at transport_method.go:362-372. Empty defaults to PlacementAuto (\"auto\"); accepted values are the splithttp placement constants: \"auto\", \"body\", \"cookie\", \"header\". Any other string appends to this error. Placement is case-sensitive.","triggerScenarios":"\"uplinkDataPlacement\": \"Header\" (wrong case), \"headers\", \"BODY\", or any unrecognized value in splithttp transportSettings.","commonSituations":"Case typos; guessing values; configs from generators targeting a different XHTTP version.","solutions":["Use one of: \"auto\", \"body\", \"cookie\", \"header\" (lowercase)","Omit the field to accept \"auto\""],"exampleFix":"// before\n\"uplinkDataPlacement\": \"Header\"\n// after\n\"uplinkDataPlacement\": \"header\"","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"func validUplinkDataPlacement(p string) bool {\n\tswitch p {\n\tcase \"\", \"auto\", \"body\", \"cookie\", \"header\":\n\t\treturn true\n\t}\n\treturn false\n}","tryCatchPattern":null,"preventionTips":["Placement values are lowercase and case-sensitive","Omit the field for auto"],"tags":["config","splithttp","uplink","validation"],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}