Բրաուզերները կարող են ուղարկել ձևի տվյալները միայն 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 ֆիլտրերի բաժիններում։
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ