Ֆիլտրեր

All lectures for AM purposes
1 уровень , 588 лекция
Открыта

Բրաուզերները կարող են ուղարկել ձևի տվյալները միայն HTTP-մեթոդ GET կամ HTTP-մեթոդ POST, բայց ոչբրաուզերային հաճախորդները կարող են նաև օգտագործել HTTP-մեթոդები PUT, PATCH և DELETE։ Servlet API-ն պահանջում է, որ ServletRequest.getParameter*() մեթոդները ապահովեն մուտք ձևի դաշտերին միայն HTTP-մեթոդ POST-ի համար։

spring-web մոդուլը տրամադրում է FormContentFilter για HTTP-մեթոդների PUT, PATCH և DELETE հարցումների որսումը, որոնց բովանդակության տիպը application/x-www-form-urlencoded է, ձևի տվյալները հարցման մարմնում ընթերցելու և ServletRequest փաթաթելու համար, որպեսզի ապահովի մուտք ձևի տվյալներին ServletRequest.getParameter*() մեթոդների միջոցով։

Ուղարկված վերնագրեր

Երբ հարցումը անցնում է պրոքսի սերվերների միջով (օրինակ՝ բեռնվածության բաշխիչ), հոսթը, պորտը և սխեման կարող են փոփոխվել, և դա դժվարացնում է ճիշտ հոսթ, պորտ և սխեմա ուղված հղումներ ստեղծելը հաճախորդի տեսանկյունից։

RFC 7239 սպեցիֆիկացիան սահմանում է Forwarded HTTP-վերնագիր, որը պրոքսի սերվերները կարող են օգտագործել սկզբնական հարցման մասին տեղեկատվություն տրամադրելու համար։ Կան նաև ոչ ստանդարտ վերնագրեր, ներառյալ X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto, X-Forwarded-Ssl և X-Forwarded-Prefix։

ForwardedHeaderFilter -ը սերվլետ ֆիլտր է, որը փոփոխում է հարցումը, որպեսզի ա) փոփոխի հոսթը, պորտը և սխեման Forwarded վերնագրերի հիման վրա, և բ) հեռացնի այդ վերնագրերը, որպեսզի բացառի դրանց հետագա ազդեցությունը։ Ֆիլտրը գործում է հարցման փաթաթման հետ, ուստի այն պետք է տեղադրված լինի մյուս ֆիլտրերի, ինչպիսիք են RequestContextFilter-ը, որ աշխատեն փոխված, ոչ թե օրիգինալ հարցման հետ։

Կան նախազգուշացումներ փոխանցված վերնագրերի համար, քանի որ հավելվածը չի կարող իմանալ, արդյոք վերնագրերը ավելացվել են պրոքսի սերվերի կողմից, ինչպես ենթադրվում է, թե վտանգավոր հաճախորդի կողմից։ Այդ պատճառով վստահության սահմաններում պրոքսի սերվերը պետք է կարգավորվի արտաքինից եկող ոչ վստահելի Forwarded վերնագրերը հեռացնելու համար։ Կարող եք նաև կարգավորել ForwardedHeaderFilter պարամետրով removeOnly=true, և այդ դեպքում այն կհանվի, բայց չի օգտագործի վերնագրերը։

Ասինխրոն հարցումների և սխալի փոխադրման աջակցության համար այս ֆիլտրը պետք է համապատասխանի DispatcherType.ASYNC, ինչպես նաև DispatcherType.ERROR։ Եթե օգտագործում եք AbstractAnnotationConfigDispatcherServletInitializer-ը Spring Framework-ից, ապա բոլոր ֆիլտրերը ավտոմատ կերպով գրանցվում են ցանկացած փոխադրման տեսակների համար։ Բայց եթե ֆիլտր գրանցում եք web.xml-ի միջոցով կամ Spring Boot-ում FilterRegistrationBean միջոցով, ապա անպայման ակտիվացրեք DispatcherType.ASYNC և DispatcherType.ERROR DispatcherType.REQUEST-ի հետ։

Մակերեսային ETag

ShallowEtagHeaderFilter ֆիլտրը ստեղծում է "մակերեսային" ETag՝ կանխելով պատասխանման բովանդակությունը և դրա համար հաշվարկելով MD5-հեշը։ Հետագայում հաճախորդի ուղարկած հարցման դեպքում, ֆիլտրն անում է նույնը, բայց համեմատում է հաշվարկած արժեքը If-None-Match վերնագրի հետ և, եթե դրանք հավասար են, վերադարձնում է 304 (NOT_MODIFIED)։

Այս ռազմավարությունը խնայում է ցանցի թողունակությունը, բայց ոչ պրոցեսորի ռեսուրսները, քանի որ յուրաքանչյուր հարցման համար անհրաժեշտ է լրիվ պատասխան հաշվարկել։ Վերոնշյալ այլ ռազմավարությունները, որոնք ցուցադրվում են կառիչի մակարդակով, թույլ են տալիս խուսափել հաշվարկներից։

Այս ֆիլտրը ունի writeWeakETag պարամետր, որն ապահովում է ֆիլտրը գրելու ոչ խիստ ETag-ներ, նման հետևյալներին՝ W/"02a2d595e6ed9a0b24f027f2b63b134d6" (ինչպես սահմանված է RFC 7232, բաժին 2.3-ում)։

Ասինխրոն հարցումների աջակցման համար այս ֆիլտրը պետք է համապատասխանվի DispatcherType.ASYNC-ին, որպեսզի ֆիլտրը կարողանա հետաձգել մշակումը և հաջողված ձևով ձագել ETag մինչ վերջին ասինխրոն փոխադրման ավարտումը։ Եթե օգտագործում եք AbstractAnnotationConfigDispatcherServletInitializer Spring Framework-ից, ապա բոլոր ֆիլտրերը ավտոմատ կերպով գրանցվում են բոլոր փոխադրման տեսակների համար։ Բայց եթե ֆիլտր գրանցում եք web.xml-ի միջոցով կամ Spring Boot-ում FilterRegistrationBean միջոցով, ապա կարգավորեք DispatcherType.ASYNC-ի համընթացում։

CORS

Spring MVC-ն ապահովում է CORS-ի կոնֆիգուրացիայի մանրամասն աջակցություն կառիչների համար օգտագործելով անոտացիաները, սակայն եթե օգտագործում եք Spring Security, խորհուրդ է տրվում հիմնվել ներկառուցված CorsFilter-ի վրա, որը պետք է տեղադրվի Spring Security ֆիլտրերի շղթայի դիմաց։

Մանրամասն տեղեկությունների համար տեսնել CORS և CORS ֆիլտրերի բաժիններում։

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ