ajax請求跨域問題

2021-09-29 10:31:40 字數 2402 閱讀 5674

跨域是值跨網域名稱.網域名稱:記憶網路電腦ip很難記,就給它取了乙個名字來記憶,這個名字就要網域名稱,網域名稱最終要被轉換為ip.

乙個系統訪問另乙個系統才會存在跨域,同系統訪問不存在跨.

跨域原因說明 示例

網域名稱不同 www.jd.com 與 www.taobao.com

網域名稱相同,埠不同 localhost:8080 與 localhost:8081

二級網域名稱不同 item.jd.com 與 miaosha.jd.com

如果網域名稱和埠都相同,但是請求路徑不同,不屬於跨域,如:

只要網域名稱(ip)和埠號有一樣不同,那麼都是跨域

http://localhost:8080 前端系統 傳送ajax取後端系統獲取資料

http://localhost:80 後端系統

跨域不一定會有跨域問題。

因為跨域問題是瀏覽器對於ajax請求的一種安全限制:乙個頁面發起的ajax請求,只能是於當前頁同網域名稱的路徑,這能有效的阻止跨站攻擊。

因此:跨域問題 是針對ajax的一種限制。

(1)利用script或者img這種標籤的特點 --jsonp方法

最早的解決方案,利用動態去填充script標籤可以跨域的原理實現。

--處理

限制:- 需要服務的支援

- 只能發起get請求

(2) nginx的方式 --》服務配置方式

思路是:利用nginx反向**把跨域為不跨域,支援各種請求方式

缺點:需要在nginx進行額外配置

(2) 通過cors -->配置,也可以通過註解(spring 4.2.5 以後)

spring 4.2.5版本過後直接使用註解

@crossorigin
規範化的跨域請求解決方案,安全可靠。

優勢:- 在服務端進行控制是否允許跨域,可自定義規則

- 支援各種請求方式

缺點:- 會產生額外的請求,要做詢問

cors是乙個w3c標準,全稱是"跨域資源共享"(cross-origin resource sharing)。

它允許瀏覽器向跨源伺服器,發出xmlhttprequest請求,從而克服了ajax只能同源使用的限制。

cors需要瀏覽器和伺服器同時支援。目前,所有瀏覽器都支援該功能,ie瀏覽器不能低於ie10。

瀏覽器會將ajax請求分為兩類,其處理方案略有差異:簡單請求、特殊請求。

簡單請求

只要同時滿足以下兩大條件,就屬於簡單請求。:

(1) 請求方法是以下三種方法之一:

特殊請求

不符合簡單請求的條件,會被瀏覽器判定為特殊請求,,例如請求方式為put。

預檢請求

特殊請求會在正式通訊之前,增加一次http查詢請求,稱為"預檢"請求(preflight)。

瀏覽器先詢問伺服器,當前網頁所在的網域名稱是否在伺服器的許可名單之中,以及可以使用哪些http動詞和頭資訊字段。只有得到肯定答覆,瀏覽器才會發出正式的xmlhttprequest請求,否則就報錯。

乙個「預檢」請求的樣板:

雖然原理比較複雜,但是前面說過:

瀏覽器端都有瀏覽器自動完成,我們無需操心

服務端可以通過***統一實現,不必每次都去進行跨域判定的編寫。

事實上,springmvc已經幫我們寫好了cors的跨域過濾器:corsfilter ,內部已經實現了剛才所講的判定邏輯,我們直接用就好了.

package cn.itsource.crud.config;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

import org.springframework.web.cors.corsconfiguration;

import org.springframework.web.cors.urlbasedcorsconfigurationsource;

import org.springframework.web.filter.corsfilter;

@configuration

public class globalcorsconfig

}

在controller類上使用註解即可(spring版本必須在4.2.5以上)

@crossorigin

Ajax 跨域請求 問題

第一種現象 no access control allow origin header is present on the requested resource,並且the response had http status code 404 出現這種情況的原因如下 解決方案 後端允許options請...

Ajax跨域請求

一 什麼是跨域請求 網域名稱它由http 協議 www 子網域名稱 baidu 主網域名稱 以及8080 埠號 組成,當另乙個網域名稱與其中任意一項對應不等的話,那麼我們說兩個網域名稱就是跨域的。如的頁面上我們要請求資料到上去,那麼就說這種請求是跨域請求。二 為什麼要講跨域請求 因為在一般的請求條件...

Ajax 跨域請求

隨筆 71 文章 0 客戶端js 服務端 1 string callbackfunname context.request callbackparam 2 context.response.write callbackfunname ps 客戶端的jsonp引數是用來通過url傳參,傳遞jsonpc...