Я разрабатываю приложение MFC.При запуске он извлекает содержимое XML-файла с нашего веб-сайта.Он делал это без проблем в течение многих лет, но в последнее время мы получаем 400 ошибок "Bad Request".Код сводится к следующему:
#include "afxinet.h"
void TestWebAccess(const CString& sPathname)
{
CInternetSession iSess;
int nType = INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_RELOAD;
CStdioFile* pFile = iSess.OpenURL(sPathname, 1, nType);
DWORD dwStatusCode = 0;
BOOL bOK = ((CHttpFile*)pFile)->QueryInfoStatusCode(dwStatusCode);
if (bOK && dwStatusCode == 400) {
TRACE("400 ERROR: %s\n", sPathname);
}
}
Эта ошибка не возникает каждый раз, просто случайно каждые несколько попыток.Это исключает множество возможных объяснений, как и любая проблема в путевом имени - приложение каждый раз передает одни и те же данные, но только иногда получает ошибку.
Ухватившись за соломинку, я перехватил активность пакетов с помощью WinDump,Вот отрывок из успешного запуска, за которым следует плохой:
--- хорошо ---
IP (tos 0x0, ttl 128, id 22607, offset 0, flags [DF], proto: TCP (6), length: 162, bad cksum 0 (->c092)!) 10.0.0.3.52244 > 66.96.149.17.80: P 1:123(122) ack 1 win 65535
..GET /WebDL2/upgrades_70_TEST.xml HTTP/1.1
IP (tos 0x20, ttl 50, id 33347, offset 0, flags [DF], proto: TCP (6), length: 40) 66.96.149.17.80 > 10.0.0.3.52244: ., cksum 0x3898 (correct), 1:1(0) ack 123 win 29200
IP (tos 0x20, ttl 50, id 33348, offset 0, flags [DF], proto: TCP (6), length: 485) 66.96.149.17.80 > 10.0.0.3.52244: P 1:446(445) ack 123 win 29200
..HTTP/1.1 200 OK
--- плохо ---
IP (tos 0x0, ttl 128, id 22674, offset 0, flags [DF], proto: TCP (6), length: 155, bad cksum 0 (->c056)!) 10.0.0.3.52258 > 66.96.149.17.80: P 1:116(115) ack 1 win 65535
..GET /WebDL2/upgrades_70_TEST.xml HTTP/1.1
IP (tos 0x20, ttl 50, id 33318, offset 0, flags [DF], proto: TCP (6), length: 40) 66.96.149.17.80 > 10.0.0.3.52258: ., cksum 0xca8a (correct), 1:1(0) ack 116 win 29200
IP (tos 0x20, ttl 50, id 33319, offset 0, flags [DF], proto: TCP (6), length: 469) 66.96.149.17.80 > 10.0.0.3.52258: P 1:430(429) ack 116 win 29200
..HTTP/1.1 400 Bad Request
Я только немного знаю о TCP и не понимаю всего этого.Есть ли что-то в этом втором запросе, который заслуживает ошибку 400?
Другие примечания по проблеме:
Если я извлеку этот код в отдельное автономное приложение,проблема не бываетЭто происходит (иногда), если я вызываю этот код из нашего приложения, в начале InitInstance.
Нет проблем с вставкой целевого URL в браузер - xml-страница никогда не перестает работатьчтобы прийти.
О проблеме сообщили пользователи на местах, запустив предыдущую версию нашего приложения.Что заставляет меня думать, что на сервере может произойти что-то неожиданное, а не какие-либо недавние изменения в нашем коде.
Ошибка не только в этом конкретном XML-файле - я пробовал их несколько, все они ведут себя одинаково.
Сервер является хостом общественного достояния (netfirms.com), поэтому я не контролирую его и не могу экспериментировать с ним.И до сих пор их техническая поддержка была разновидностью «ты пытался отключить это».Они не видят никаких проблем на их конце.
Я нахожусь в конце моего остроумия.У нас был день выхода нашего нового релиза после более чем года разработки, и вдруг это произошло.Я благодарен за любые идеи.
- Джим
Спасибо за ответ.Полегче на меня, ладно?Мне никогда не приходилось смотреть на это раньше.Вот еще один хороший и плохой кусок, с дополнительной информацией.
--- good ---
IP (tos 0x0, ttl 128, id 23479, offset 0, flags [DF], proto: TCP (6), length: 155, bad cksum 0 (->bd31)!) 10.0.0.3.57929 > 66.96.149.17.80: P 1:116(115) ack 1 win 65535
0x0000: 0000 ca11 2233 0025 64a1 6f2b 0800 4500 ...."3.%d.o+..E.
0x0010: 009b 5bb7 4000 8006 0000 0a00 0003 4260 ..[.@.........B`
0x0020: 9511 e249 0050 6b28 f0d4 8fd1 31c9 5018 ...I.Pk(....1.P.
0x0030: ffff e201 0000 4745 5420 2f57 6562 444c ......GET./WebDL
0x0040: 322f 7570 6772 6164 6573 5f37 305f 5445 2/upgrades_70_TE
0x0050: 5354 2e78 6d6c 2048 5454 502f 312e 310d ST.xml.HTTP/1.1.
IP (tos 0x20, ttl 50, id 32642, offset 0, flags [DF], proto: TCP (6), length: 40) 66.96.149.17.80 > 10.0.0.3.57929: ., cksum 0x5bab (correct), 1:1(0) ack 116 win 29200
0x0000: 0025 64a1 6f2b 0000 ca11 2233 0800 4520 .%d.o+...."3..E.
0x0010: 0028 7f82 4000 3206 e7b9 4260 9511 0a00 .(..@.2...B`....
0x0020: 0003 0050 e249 8fd1 31c9 6b28 f147 5010 ...P.I..1.k(.GP.
0x0030: 7210 5bab 0000 0000 cd54 f0b3 r.[......T..
IP (tos 0x20, ttl 50, id 32643, offset 0, flags [DF], proto: TCP (6), length: 485) 66.96.149.17.80 > 10.0.0.3.57929: P 1:446(445) ack 116 win 29200
0x0000: 0025 64a1 6f2b 0000 ca11 2233 0800 4520 .%d.o+...."3..E.
0x0010: 01e5 7f83 4000 3206 e5fb 4260 9511 0a00 ....@.2...B`....
0x0020: 0003 0050 e249 8fd1 31c9 6b28 f147 5018 ...P.I..1.k(.GP.
0x0030: 7210 dd6f 0000 4854 5450 2f31 2e31 2032 r..o..HTTP/1.1.2
0x0040: 3030 204f 4b0d 0a44 6174 653a 2053 756e 00.OK..Date:.Sun
0x0050: 2c20 3130 204d 6172 2032 3031 3920 3032 ,.10.Mar.2019.02
--- bad ---
IP (tos 0x0, ttl 128, id 23474, offset 0, flags [DF], proto: TCP (6), length: 171, bad cksum 0 (->bd26)!) 10.0.0.3.57928 > 66.96.149.17.80: P 1:132(131) ack 1 win 65535
0x0000: 0000 ca11 2233 0025 64a1 6f2b 0800 4500 ...."3.%d.o+..E.
0x0010: 00ab 5bb2 4000 8006 0000 0a00 0003 4260 ..[.@.........B`
0x0020: 9511 e248 0050 d41f f5a8 1b81 c914 5018 ...H.P........P.
0x0030: ffff e211 0000 4745 5420 2f57 6562 444c ......GET./WebDL
0x0040: 322f 7570 6772 6164 6573 5f37 305f 5445 2/upgrades_70_TE
0x0050: 5354 2e78 6d6c 2048 5454 502f 312e 310d ST.xml.HTTP/1.1.
IP (tos 0x20, ttl 50, id 33346, offset 0, flags [DF], proto: TCP (6), length: 40) 66.96.149.17.80 > 10.0.0.3.57928: ., cksum 0xc7a5 (correct), 1:1(0) ack 132 win 30016
0x0000: 0025 64a1 6f2b 0000 ca11 2233 0800 4520 .%d.o+...."3..E.
0x0010: 0028 8242 4000 3206 e4f9 4260 9511 0a00 .(.B@.2...B`....
0x0020: 0003 0050 e248 1b81 c914 d41f f62b 5010 ...P.H.......+P.
0x0030: 7540 c7a5 0000 0000 4778 f4ff u@......Gx..
IP (tos 0x20, ttl 50, id 33347, offset 0, flags [DF], proto: TCP (6), length: 469) 66.96.149.17.80 > 10.0.0.3.57928: P 1:430(429) ack 132 win 30016
0x0000: 0025 64a1 6f2b 0000 ca11 2233 0800 4520 .%d.o+...."3..E.
0x0010: 01d5 8243 4000 3206 e34b 4260 9511 0a00 ...C@.2..KB`....
0x0020: 0003 0050 e248 1b81 c914 d41f f62b 5018 ...P.H.......+P.
0x0030: 7540 8572 0000 4854 5450 2f31 2e31 2034 u@.r..HTTP/1.1.4
0x0040: 3030 2042 6164 2052 6571 7565 7374 0d0a 00.Bad.Request..
0x0050: 4461 7465 3a20 5375 6e2c 2031 3020 4d61 Date:.Sun,.10.Ma