关于Chrome支持http header最大长度限制的讨论
Created by Wang, Jerry, last modified on Nov 09, 2016
我們在前端訪問ABAP的server的時候,通過OData協議訪問一個API的時候,URL中能不能帶單引號呢? 我們遇到一個bug,
(1) 在IE里url帶了單引號:https://jerry.neo.ondemand.com/dps/odata.svc/Context?KaTeX parse error: Expected 'EOF', got '&' at position 14: orderby=title&?filter=appUrl%20eq%20%‘CustomerEngagementCenter’%20and%20product%20eq%20’SAP_HYBRIS_CLOUD’%20and%20version%20eq%20’1611’%20and%20(system%20eq%20null%20or%20system%20eq%20’’)%20and%20locale%20eq%20’en-US’
(2) 在Chrome沒有單引號: https://jerry.neo.ondemand.com/dps/odata.svc/Context?KaTeX parse error: Expected 'EOF', got '&' at position 14: orderby=title&?filter=appUrl%20eq%20%27CustomerEngagementCenter%27%20and%20product%20eq%20%27SAP_HYBRIS_CLOUD%27%20and%20version%20eq%20%271611%27%20and%20(system%20eq%20null%20or%20system%20eq%20%27%27)%20and%20locale%20eq%20%27en-US%27
結果就是帶單引號的URL不能被ABAP Server處理,直接是HTTP 400錯誤。所以我想問下,是不是按照OData的協議URL里是不能帶單引號的?
我試了下,在Chrome里,地址欄敲’i042416’, 單引號會自動被encode成%27:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MYYRguMs-1628157524704)(https://user-images.githubusercontent.com/5669954/50440083-891cf500-092f-11e9-8915-e858aa5fc9a5.png)]
后臺成功收到:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6NlJrFUh-1628157524705)(https://user-images.githubusercontent.com/5669954/50440084-891cf500-092f-11e9-8710-1b5780d58d88.png)]
IE的話,不會 自動encode:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YvttvCrs-1628157524707)(https://user-images.githubusercontent.com/5669954/50440085-891cf500-092f-11e9-865f-b14a086d945e.png)]
Server端還是能接到,只是不能正常顯示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZXzhvlL1-1628157524708)(https://user-images.githubusercontent.com/5669954/50440087-89b58b80-092f-11e9-8c61-ab25a5baa2b7.png)]
昨天的問題,找到了,居然是IE對HTTP Request的header大小沒有做限制,我們這個case里,Referer是個很長的鏈接。 我們的NGINX對header的buffer設置只有1K,所以直接就報400錯誤了,把buffer調大就解決了。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UVrshQhT-1628157524709)(https://user-images.githubusercontent.com/5669954/50440088-8a4e2200-092f-11e9-9af5-e60f61d7d6b9.png)]
Referer很長,那換成Chrome不是一樣很長么?Chrome就沒問題?
Chrome的Referer只有主要的domain信息
IE會帶上所有的參數:
這樣就能解釋通了。
我剛才測試發現Chrome對http get的header length沒有限制:
我在ABAP server直接把接到的referer3 field的value echo回去:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Zho9geWm-1628157524713)(https://user-images.githubusercontent.com/5669954/50440091-8ae6b880-092f-11e9-9a12-a0784df6d6ec.png)]
在Chrome postman里拼再長的length,ABAP Server一樣能收到并且返回給Chrome
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NlljDx1S-1628157524715)(https://user-images.githubusercontent.com/5669954/50440092-8b7f4f00-092f-11e9-9f53-28d2742c6f80.png)]
Test url
http://jerry:50054/sap/bc/abap/zjerry
It is impossible to manually set header Referer in Postman.
總結
以上是生活随笔為你收集整理的关于Chrome支持http header最大长度限制的讨论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 期货oi指标什么意思,持仓量指标
- 下一篇: SAP UI5的calendar 日历控