1. 程式人生 > >關於Chrome支援http header最大長度限制的討論

關於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:

clipboard1

後臺成功收到:
clipboard2

IE的話,不會 自動encode:

clipboard3

Server端還是能接到,只是不能正常顯示:

clipboard4

昨天的問題,找到了,居然是IE對HTTP Request的header大小沒有做限制,我們這個case裡,Referer是個很長的連結。 我們的NGINX對header的buffer設定只有1K,所以直接就報400錯誤了,把buffer調大就解決了。

clipboard5

Referer很長,那換成Chrome不是一樣很長麼?Chrome就沒問題?

Chrome的Referer只有主要的domain資訊
clipboard6

IE會帶上所有的引數:

clipboard7

這樣就能解釋通了。
我剛才測試發現Chrome對http get的header length沒有限制:
我在ABAP server直接把接到的referer3 field的value echo回去:

clipboard8

在Chrome postman裡拼再長的length,ABAP Server一樣能收到並且返回給Chrome

clipboard9

Test url

http://jerry.wdf.sap.corp:50054/sap/bc/abap/zjerry
It is impossible to manually set header Referer in Postman.

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":