《HTTP - 跨域》


本文參考

  HTTP訪問控制(CORS)

 

一:什么是跨域?

  - 所謂跨域, 瀏覽器為了保護網站安全而建立的一種保護策略,既瀏覽器的同源策略

  - 意味着使用這些API的Web應用程序只能從加載應用程序的同一個域請求HTTP資源。

 

二: 什么情況下會觸發跨域問題?

  - 域不同 (比如用 www.baidu.com 請求 www.zhihu.com)

  - 端口不同 (比如 127.0.0.1:80 請求 127.0.0.1:81)

  - 協議不同 (http://xxxx.com 請求 https://xxxx.com)

  - 在瀏覽器發現不同后,會由瀏覽器發起一個跨域的HTTP請求

 

三:如何跨域?

  - 跨域資源共享( CORS )機制允許 Web 應用服務器進行跨域訪問控制,從而使跨域數據傳輸得以安全進行

  - 現代瀏覽器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 請求所帶來的風險

 

四:JSONP 跨域

  - jsonp的核心則是動態添加<script>標簽來調用服務器提供的js腳本

 

五:CORS 跨域資源共享

  - 功能

    - 跨域資源共享標准新增了一組 HTTP 首部字段,允許服務器聲明哪些源站通過瀏覽器有權限訪問哪些資源。

    - 另外,對那些可能對服務器數據產生副作用的 HTTP 請求方法(特別是 GET 以外的 HTTP 請求)

      - 瀏覽器必須首先使用 OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。

      - 服務器確認允許之后,才發起實際的 HTTP 請求。

      - 在預檢請求的返回中,服務器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關數據)。

 

  - 簡單請求

    - 某些請求不會觸發 CORS 預檢請求。本文稱這樣的請求為“簡單請求”。

    - 若請求滿足所有下述條件,則該請求可視為“簡單請求”:

      -  使用下列方法之一:

        - GET

        - HEAD

        - POST 

    - 流程

      - 

 

   預檢請求

    - 與前述簡單請求不同,“需預檢的請求”要求必須首先使用 OPTIONS   方法發起一個預檢請求到服務器,以獲知服務器是否允許該實際請求。

    - "預檢請求“的使用,可以避免跨域請求對服務器的用戶數據產生未預期的影響

    - 當請求滿足下述任一條件時,即應首先發送預檢請求:

      -  使用了下面任一 HTTP 方法:

        - PUT

        - DELETE

        - CONNECT

        - OPTIONS

        - TRACE

        - PATCH 

    - 流程

      - 

 

  - HTTP 響應字段

    -  Access-Control-Allow-Origin: <origin> | *

      - origin 參數的值指定了允許訪問該資源的外域 URI。對於不需要攜帶身份憑證的請求,服務器可以指定該字段的值為通配符,表示允許來自所有域的請求。

    -  Access-Control-Allow-Methods: <method>[, <method>]*

      - 首部字段用於預檢請求的響應。其指明了實際請求所允許使用的 HTTP 方法。

      - 注意,簡單請求,這個字段的設置是無意義的

    - Access-Control-Allow-Headers: <field-name>[, <field-name>]*

      - 首部字段用於預檢請求的響應。其指明了實際請求中允許攜帶的首部字段。

      - 注意,簡單請求,這個字段的設置是無意義的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM