記解決一次“HTTP Error 400. The request URL is invalid”的錯誤

來源:互聯網
上載者:User

標籤:限制   cti   href   control   span   style   排除   google   cat   

今天將圖片服務切到使用了cdn的機器上面去,然後就部分圖片報如錯誤“HTTP Error 400. The request URL is invalid”

看到這種錯誤資訊,一般的開發人員心中可能會猜測到兩個原因

1.連結中有特殊字元

2.連結長度過長(似乎長度過長也不是這個錯,模糊不清,忘記了)

錯誤圖片的地址如下:http://{host}/SearchService.svc/rest/pic600x320/png/kv3hcxmnCmISVvFKojNBGpkN44MRx71vV4v7Qu7ikclbic2vX5Axnm8RxwhLoWyehsSz4J%C2%A72F6h4eQgvkrbzuKGR6y7sszK1KUY75RqxylZMumapwVQttfllaSPXwoRGEeVexDqjmMZSERPquL3uLZbv6Vxdx52nRDUW90SVVYeqkHZbx2w3T1coqt2v036tfaZ%C2%A72D8GBlPbIVJuhSFU5GA8116z8FkV4%C2%A72kDtsxSXy9XTFIziTToRpbQEkp7497O6q99

接下來就開始了按照我們所能遇見的錯誤原因進行排查

1.查看url,並沒有特殊字元(排除這個原因)

2.url咋一看確實很長,那我們刪除參數的一半長度再請求。結果是可以成功,然後通過不斷的加字元,發現長度超過339就報這個錯,而339後面也沒啥特殊字元,所以我們基本確定錯誤原因是應為url過長。

 接下來就是解決相關問題

然後就是各種百度,查看相關修改querystring長度限制的配置

然後就修改web.config

1.修改  httpRuntime 節點下面增加  maxQueryStringLength,maxRequestLength配置

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" maxQueryStringLength="2097151" maxUrlLength="2097151" maxRequestLength="2097151" relaxedUrlToFileSystemMapping="true" executionTimeout="36000" delayNotificationTimeout="36000" />

  2.修改system.webServer節點,如下

<security>      <requestFiltering allowDoubleEscaping="true" allowHighBitCharacters="true"  >        <requestLimits maxAllowedContentLength="2097151" maxQueryString="2097151" maxUrl="2097151" />      </requestFiltering>    </security>

滿懷期待的儲存,運行,錯誤依舊,好像並沒有什麼卵用

這個時候就開始納悶了,為啥不行,會不會沒有生效,想到這兒可能就有很多人像我一樣,想到了iis的全域設定,會不會該項設定不能被覆蓋,我們用的依舊是全部設定的值

不用猜測,查看一下就知道了(注意,查看的requestFiltering是位於 system.webServer下,不要看錯節點了)

  <section name="requestFiltering" overrideModeDefault="Allow"  />

如果是關閉的,overrideModeDefault的值是Deny,Allow表示我們該配置會以我們網站具體配置為準。

那麼一切都是正常的啊,為啥就是報錯呢?!

最後stackoverflow上面一個沒有被採納的回到引起了我的注意

連結 https://stackoverflow.com/questions/8447698/the-request-url-is-invalid-in-iis-7

大致意思是,請求還沒到iis,被作業系統幹掉了。

這個時候再google上面搜到另外一篇文章,連結到了微軟的光放支援人員

地址如下 https://support.microsoft.com/zh-cn/help/820129/http-sys-registry-settings-for-windows

兩篇文章的大意都是我們需要修改註冊表,綜合兩篇文章,大概修改是註冊表如下兩個值

 

 

 接下來就試一下,進入註冊表  CMD =》 regedit=》HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

右擊空白地區,選擇Dword值,

 

建立名稱 UrlSegmentMaxLength,值設定成2048,然後點擊ok

UrlSegmentMaxCount的設定同上,值也是Dword  2048,點擊ok.

修改完成只有重啟http服務才會生效

  1. 依次單擊“開始”、“運行”,鍵入 Cmd,然後單擊“確定”。
  2. 在命令提示字元處,鍵入 net stop http,然後按 Enter。
  3. 在命令提示字元處,鍵入 net start http,然後按 Enter。

然後重啟IIS。再試一下,ok了,不報錯了,完美解決,在解決問題的過長中,領導給予了不少支援,實際情況不像本文描述的這麼簡單平凡!

 

記解決一次“HTTP Error 400. The request URL is invalid”的錯誤

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.