Delphi Berlin Rest接口POST行为错误 从Delphi XE10西雅图升级到柏林后,我的REST界面不再正常工作。 POST请求返回302找到的重定向。

Delphi Berlin Rest接口POST行为错误 从Delphi XE10西雅图升级到柏林后,我的REST界面不再正常工作。 POST请求返回302找到的重定向。,rest,delphi,redirect,post,Rest,Delphi,Redirect,Post,在西雅图,将发布一个指向重定向url的新帖子,并创建资源 在柏林,找到的302用GET应答,结果是现有资源的列表被i.s.o.id返回 网络跟踪: 西雅图 柏林 示例代码 302处理在早期的HTTP协议规范中是不明确的。许多web浏览器和HTTP库通过重复与GET相同的请求来响应302响应。有些没有。HTTP 1.1记录了这种模糊性,并定义了303和307响应代码,以解决何时切换到GET和何时不切换到的模糊性,但并非所有人都支持这些响应代码。现在,为什么Embarcadero会将他们的302处理

在西雅图,将发布一个指向重定向url的新帖子,并创建资源

在柏林,找到的302用GET应答,结果是现有资源的列表被i.s.o.id返回

网络跟踪:

西雅图 柏林 示例代码
302
处理在早期的HTTP协议规范中是不明确的。许多web浏览器和HTTP库通过重复与
GET
相同的请求来响应
302
响应。有些没有。HTTP 1.1记录了这种模糊性,并定义了
303
307
响应代码,以解决何时切换到
GET
和何时不切换到的模糊性,但并非所有人都支持这些响应代码。现在,为什么Embarcadero会将他们的
302
处理方式从西雅图改为柏林,大家都在猜测,但新的行为在技术上并没有错,只是模棱两可。您是否可以更改REST服务器来发送<代码> 307 <代码>?如果不是,请考虑使用Dyy的<代码> TIdHTTP < /代码>。它有一个默认禁用的
hoTreat302Like303
标志,因此响应
302
发送的新请求将使用与前一个请求相同的HTTP方法。@Remy Lebeau,感谢您提供的信息。我无法控制服务器。我发现他们更改了
System.Net.HttpClient.Win
中的
TWinHTTPClient.DoProcessStatus
过程。他们添加了代码,以便在GET中更改代码301>303的帖子<代码>西雅图没有该代码。
No.     Time           Source                Destination           Protocol Length Info
  1 0.000000       192.168.1.99          159.253.0.125         TCP      66     62766→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
  2 0.019867       159.253.0.125         192.168.1.99          TCP      66     80→62766 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 SACK_PERM=1 WS=128
  3 0.020024       192.168.1.99          159.253.0.125         TCP      54     62766→80 [ACK] Seq=1 Ack=1 Win=66560 Len=0
  4 0.032015       192.168.1.99          159.253.0.125         HTTP/XML 920    POST /api/specific_price_rules/?ws_key=_______MY_SECRET_WEB_KEY________ HTTP/1.1 
  5 0.049632       159.253.0.125         192.168.1.99          TCP      60     80→62766 [ACK] Seq=1 Ack=867 Win=7680 Len=0
  6 0.278089       159.253.0.125         192.168.1.99          HTTP     407    HTTP/1.0 302 Found 
  7 0.278426       159.253.0.125         192.168.1.99          TCP      60     80→62766 [FIN, ACK] Seq=354 Ack=867 Win=7680 Len=0
  8 0.278480       192.168.1.99          159.253.0.125         TCP      54     62766→80 [ACK] Seq=867 Ack=354 Win=66304 Len=0
  9 0.279197       192.168.1.99          159.253.0.125         TCP      54     62766→80 [ACK] Seq=867 Ack=355 Win=66304 Len=0
 10 0.279327       192.168.1.99          159.253.0.125         TCP      54     62766→80 [FIN, ACK] Seq=867 Ack=355 Win=66304 Len=0
 11 0.282931       192.168.1.99          159.253.0.125         TCP      66     62767→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
 12 0.303173       159.253.0.125         192.168.1.99          TCP      60     80→62766 [ACK] Seq=355 Ack=868 Win=7680 Len=0
 13 0.303307       159.253.0.125         192.168.1.99          TCP      66     80→62767 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 SACK_PERM=1 WS=128
 14 0.303416       192.168.1.99          159.253.0.125         TCP      54     62767→80 [ACK] Seq=1 Ack=1 Win=66560 Len=0
 15 0.329188       192.168.1.99          159.253.0.125         HTTP/XML 984    POST /api/specific_price_rules/?ws_key=_______MY_SECRET_WEB_KEY________?url=specific_price_rules%2F&ws_key=_______MY_SECRET_WEB_KEY________ HTTP/1.1 
 16 0.346802       159.253.0.125         192.168.1.99          TCP      60     80→62767 [ACK] Seq=1 Ack=931 Win=7808 Len=0
 17 0.772415       159.253.0.125         192.168.1.99          HTTP/XML 1193   HTTP/1.1 201 Created 
 18 0.823564       192.168.1.99          159.253.0.125         TCP      54     62767→80 [ACK] Seq=931 Ack=1140 Win=65536 Len=0
 19 2.792272       159.253.0.125         192.168.1.99          TCP      60     80→62767 [FIN, ACK] Seq=1140 Ack=931 Win=7808 Len=0
 20 2.792381       192.168.1.99          159.253.0.125         TCP      54     62767→80 [ACK] Seq=931 Ack=1141 Win=65536 Len=0
 21 2.792460       192.168.1.99          159.253.0.125         TCP      54     62767→80 [FIN, ACK] Seq=931 Ack=1141 Win=65536 Len=0
 22 2.809253       159.253.0.125         192.168.1.99          TCP      60     80→62767 [ACK] Seq=1141 Ack=932 Win=7808 Len=0
No.     Time           Source                Destination           Protocol Length Info
  1 0.000000       192.168.1.99          159.253.0.125         TCP      66     50854→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
  2 0.028660       159.253.0.125         192.168.1.99          TCP      66     80→50854 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 SACK_PERM=1 WS=128
  3 0.028816       192.168.1.99          159.253.0.125         TCP      54     50854→80 [ACK] Seq=1 Ack=1 Win=66560 Len=0
  4 0.159076       192.168.1.99          159.253.0.125         HTTP/XML 920    POST /api/specific_price_rules/?ws_key=_______MY_SECRET_WEB_KEY________ HTTP/1.1 
  5 0.177091       159.253.0.125         192.168.1.99          TCP      60     80→50854 [ACK] Seq=1 Ack=867 Win=7680 Len=0
  6 0.252763       159.253.0.125         192.168.1.99          HTTP     407    HTTP/1.0 302 Found 
  7 0.252764       159.253.0.125         192.168.1.99          TCP      60     80→50854 [FIN, ACK] Seq=354 Ack=867 Win=7680 Len=0
  8 0.253495       192.168.1.99          159.253.0.125         TCP      54     50854→80 [ACK] Seq=867 Ack=355 Win=66304 Len=0
  9 0.253633       192.168.1.99          159.253.0.125         TCP      54     50854→80 [FIN, ACK] Seq=867 Ack=355 Win=66304 Len=0
 10 0.256926       192.168.1.99          159.253.0.125         TCP      66     50857→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
 11 0.270249       159.253.0.125         192.168.1.99          TCP      60     80→50854 [ACK] Seq=355 Ack=868 Win=7680 Len=0
 12 0.274200       159.253.0.125         192.168.1.99          TCP      66     80→50857 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1452 SACK_PERM=1 WS=128
 13 0.274327       192.168.1.99          159.253.0.125         TCP      54     50857→80 [ACK] Seq=1 Ack=1 Win=66560 Len=0
 14 0.277184       192.168.1.99          159.253.0.125         HTTP     423    GET /api/specific_price_rules/?ws_key=_______MY_SECRET_WEB_KEY________?url=specific_price_rules%2F&ws_key=_______MY_SECRET_WEB_KEY________ HTTP/1.1 
 15 0.294220       159.253.0.125         192.168.1.99          TCP      60     80→50857 [ACK] Seq=1 Ack=370 Win=6912 Len=0
 16 0.511007       159.253.0.125         192.168.1.99          HTTP/XML 597    HTTP/1.1 200 OK 
 17 0.561407       192.168.1.99          159.253.0.125         TCP      54     50857→80 [ACK] Seq=370 Ack=544 Win=66048 Len=0
 18 2.510340       159.253.0.125         192.168.1.99          TCP      60     80→50857 [FIN, ACK] Seq=544 Ack=370 Win=6912 Len=0
 19 2.510429       192.168.1.99          159.253.0.125         TCP      54     50857→80 [ACK] Seq=370 Ack=545 Win=66048 Len=0
 20 2.510533       192.168.1.99          159.253.0.125         TCP      54     50857→80 [FIN, ACK] Seq=370 Ack=545 Win=66048 Len=0
 21 2.526591       159.253.0.125         192.168.1.99          TCP      60     80→50857 [ACK] Seq=545 Ack=371 Win=6912 Len=0
procedure TForm1.Button8Click(Sender: TObject);
var
  aNode, aCNode, aCCNode: IXMLNode;
  i, j: integer;
  aXml, s: string;
begin
  Button8.Enabled := False;
  try
    RESTRequest1.ResetToDefaults;
    RESTRequest1.Params.Clear;
    RESTClient1.BaseURL := sWebAddress;
    RESTRequest1.Resource := Edit1.Text;
    RESTClient1.Authenticator := nil;
    SimpleAuthenticator1.UserNameKey := '';
    SimpleAuthenticator1.UserName := '';
    RESTRequest1.ResourceSuffix := '?ws_key=' + sWebkey;
    RESTRequest1.ClearBody;
    RESTRequest1.AddBody(Memo1.Text, ctTEXT_XML);
    RESTRequest1.Method := rmPost;
    RESTRequest1.Execute;
    Memo2.Lines.Clear;
    Memo2.Lines.Add(RESTResponse1.Content);
  except
    on E: Exception do
    begin
      Memo2.Lines.Clear;
      Memo2.Lines.Add('Exception class name = ' + E.ClassName);
      Memo2.Lines.Add('Exception message = ' + E.Message);
    end;
  end;
  Button8.Enabled := True;
end;