基於瀏覽器的http普通請求與ajax請求

來源:互聯網
上載者:User

發起一個http請求,可以通過瀏覽器,也可以通過程式去發起。通過程式去發起http請求(比如java中HttpURLConnection),只要是http層的東西都是能夠偽造的,當然大部分還是偽造header頭欄位。而通過瀏覽器去發起的http請求(包括ajax請求),一些常用的header欄位(比如:referer,User-Agent等)是瀏覽器幫我們設定的,在網頁裡面一般我們是沒法直接去重設他們的。不過可以通過一些方法間接去重設這些header欄位,我瞭解的主要有如下兩種方法:

1.以chrom瀏覽器為例,通過chrom的外掛程式過濾目的網址,然後對訪問這些網址的http請求重設header。參考外掛程式: https://github.com/chenyoufu/modify-http-headers

2.通過代理軟體fiddler,重設原始請求的header欄位

基於瀏覽器的http請求分為普通請求和ajax請求,普通請求都是同步執行的,ajax請求可以同步也可以非同步(預設非同步)。當這兩種請求到達服務端時候,我們可以通過x-requested-with這個header欄位加以區分。如果是普通請求沒有這個header,取到為null。如果是ajax請求,取到是XMLHttpRequest。

因為ajax請求header欄位是可以設定的,我們能否重設這個header,偽裝成普通請求呢。答案是沒法徹底重設的。如果我們自己設定了x-requested-with這個欄位,瀏覽器還是會去再設定一遍這個值。chrom和ie的做法是直接追加,即服務端列印的結果是:自訂的值,XMLHttpRequest。而Firefox是直接列印:XMLHttpRequest。

另外如果我們在ajax請求中自行設定referer這個header也是沒有效果的,瀏覽器會直接覆蓋你所設定的值。

-----------------------------------------------------------------------------------------------------------------------------------------------------

在一次做非常複雜的ajax應用時,如果一個會話已經逾時,但是此時再通過ajax請求,那麼ajax返回的則是一個登陸頁面的html,那這下就慘了,頁面上而已就亂了,那麼,能否在java端,如攔截器裡判斷客戶的的請求是否是ajax請求呢,經過查詢,能. 
   普通請求與ajax請求的報文頭不一樣,通過如下 

Java代碼   String requestType = request.getHeader("X-Requested-With");  
如果requestType能拿到值,並且值為XMLHttpRequest,表示用戶端的請求為非同步請求,那自然是ajax請求了,反之如果為null,則是普通的請求 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


AJAX請求和普通HTTP請求區別

兩者本質別:
AJAX通xmlHttpRequest象請求伺服器伺服器接受請求返資料實現重新整理互動
普通http請求通httpRequest象請求伺服器接受請求返資料需要頁面重新整理

 
AJAX請求


普通請求


AJAX要求標頭會多一個x-requested-with參數,值為XMLHttpRequest
String requestType = request.getHeader("X-Requested-With");  
 

以此為判斷依據

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.