Browser
17 Feb 2025
1 min read
tags: Network 同源政策 CORS Browser

同源政策 Same-Origin Policy

Why

防止CSRF 誇站請求偽造(Cross-site request forgery) :

利用了 web 中用戶身分驗證的一個漏洞:簡單的身分驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求本身是用戶自願發出的。

Rules

  • 相同協議(protocol)
  • 相同網域(domain)
  • 相同端口(port)

Method

==CORS==

幾乎不太可能跟要接的 API 在同一 domain 下,所以為了讓不同源之間可以傳輸資料,又有另外一個規範叫 CORS。

CORS 把請求分為兩種,簡單請求跟預檢(preflight)請求。

Server 必須在 Response 的 Header 裡面加上 Access-Control-Allow-Origin 的設定。

  • 簡單請求
    要滿足所有判斷條件,最容易分辨的是沒有自定義 Header,而且又是 GET 。
GET https://api.users.com/user/1 HTTP/1.1
  • 預檢(preflight)請求

瀏覽器會先送出 HTTP 的 OPTIONS 方法,確認 Server 的 Response 是否有 Access- Control-Allow-Origin ,確認有之後才會把我們的請求送出。

OPTIONS 是一個 HTTP/1.1 方法,這個方法用來確認來自伺服器進一步的資訊,重複執行不會造成任何影響


const xhr = new XMLHttpRequest()
xhr.open("POST","http://api") //用post方法發請求到api網址
  xhr.addEventListener('readystatechange', function(e) {
    if (e.target.readyState === 4 && e.target.status === 200) {
      //....

    } else if (e.target.readyState === 4) {
      //....
    }
  });
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.send();

參考資料

Network同源政策CORSBrowser
Published on 17 Feb 2025
Updated on 17 Feb 2025