javascript
cors spring_Spring,REST,Ajax和CORS
cors spring
假設您正在為客戶端開發基于JavaScript的項目,并且他通過其余的Web服務向服務器發出ajax請求,那么您可能會遇到一些麻煩,尤其是如果雙方都在單獨的域中。
實際上,出于安全原因,從一個域A到另一域B的Ajax請求未被授權。
幸運的是,W3C引入了所謂的CORS(跨源資源共享),它為服務器提供了更好地控制跨域請求的可能性。
為此,服務器必須在響應中添加HTTP標頭,以向客戶端指示允許的來源。
此外,如果使用自定義標頭,則出于安全考慮,瀏覽器將無法讀取它們,因此必須指定要公開的標頭。 因此,如果您無法在JavaScript代碼中檢索自定義的HTTP標頭值,則應閱讀下一步
標頭列表:
訪問控制允許來源
Access-Control-Allow-Origin: <origin> |?*origin參數指定可以訪問資源的URI。 瀏覽器必須執行此操作。 對于沒有憑據的請求,服務器可以將“ *”指定為通配符,從而允許任何源訪問資源。
訪問控制公開標頭
Access-Control-Expose-Headers: X-My-Header此標頭使服務器允許瀏覽器訪問的白名單標頭。 添加自定義標頭時,這非常有用,因為通過將它們添加到“ Access-Control-Expose-Headers”標頭中,可以確保瀏覽器將能夠讀取它們。
訪問控制最大年齡
Access-Control-Max-Age: <delta-seconds>該標頭指示可以將預檢請求的結果緩存多長時間。
訪問控制允許方法
Access-Control-Allow-Methods: <method>[, <method>]*指定訪問資源時允許的一種或多種方法。 這用于響應預檢請求。 上面討論了請求被預檢的條件。
訪問控制允許標題
Access-Control-Allow-Headers:?<field-name>[, <field-name>]*用于響應預檢請求,以指示發出實際請求時可以使用哪些HTTP標頭。
現在讓我們看看如何使用Spring添加此標頭
首先,我們需要創建一個實現Filter接口的類:
package hello; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component;public class CORSFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;HttpServletRequest request= (HttpServletRequest) req;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Allow-Headers", "x-requested-with");response.setHeader("Access-Control-Expose-Headers", "x-requested-with"); chain.doFilter(req, res);} }現在,我們只需要將過濾器添加到servlet上下文中:
@Configuration public class ServletConfigurer implements ServletContextInitializer {@Overridepublic void onStartup(javax.servlet.ServletContext servletContext) throws ServletException {servletContext.addFilter("corsFilter", new CORSFilter());} }所有人,您現在可以發出跨域請求并使用自定義的HTTP標頭!
翻譯自: https://www.javacodegeeks.com/2014/07/spring-rest-ajax-and-cors.html
cors spring
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的cors spring_Spring,REST,Ajax和CORS的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 安卓原生卡刷包(安卓原生卡刷)
- 下一篇: 哈希杰森
