Technology sharing

Intellegere ante finem crucis-domain

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

 

Tabula contentorum

1Browser eiusdem originis consilium

1.1 Overview eiusdem Origin Policy

1.2 Quid est origo?

2. Quae sunt restrictiones in cross-domain transactions?

2.1 Restrict dom accessum

2.2 Restrict Quisque Access

2.3 Low Ajacem obtinere notitia

III puncta note

4CORS Aiax cross-domain problems solvit

4.1CORS Overview

4.2CORS crucem-domain petitiones simplex solvit

4.3 Simplex petitiones et multiplex petitiones

4.4CORS crucem-domain universa petitiones solvit

4.5 Cors bibliotheca utere ut cito configurationem perficiat

5JSONP solvit crucem-domain problems

6Configure procuratorem solvere quaestiones domain

6,1 Configurare procuratorem ipsum

6.2 Usus Nginx facere ineundo servo

6.3 Fac servo ope pegmata


Codex inscriptionum git clone https://gitee.com/childe-jia/cross-domain-test.git

1Browser eiusdem originis consilium

1.1 Overview eiusdem Origin Policy


Consilium eiusdem originis est consilium quod navigatores sequuntur ut securitatem resource provideat.
Descriptio eiusdem originis consilium ex W3C:Eandem originem consilium

1.2 Quid est origo?


1 source components

image.png


2In tabula infra, duo tantum fontes in ultimo ordine eandem habent originem.

Source 1

Source 2

Estne homologus?

http://www.xyz.com/home

https://www.xyz.com/home

Non homogeneus

http://www.xyz.com/home

http://mail.xyz.com/home

Non homogeneus

http://www.xyz.com:8080/home

http://www.xyz.com:8090/home

Non homogeneus

http://www.xyz.com:8080/home

http://www.xyz.com:8080/search

Idem originis

 

III originis petitionem

image.png


IV Non-originale petitionem

image.png


5 Summarium: Si "fons" repugnat "fons target", significat "non-fons", etiam "heterosource" vel "transgressio".

2. Quae sunt restrictiones in cross-domain transactions?


Exempli gratia, si duo fontes: "Source A" et "Source B", quae sunt "non-eiusdem originis", tunc pasco restrictiones sequentes habebunt:

2.1 Restrict dom accessum

Scriptum "Source A" ad domnum "Source B" accedere non potest.

  1. <!-- <iframe id="framePage" src="./demo.html"></iframe> -->
  2. <iframe id="framePage" src="https://www.baidu.com"></iframe>
  3. <script type="text/javascript" >
  4. function showDOM(){
  5. const framePage = document.getElementById('framePage')
  6. console.log(framePage.contentWindow.document) //同源的可以获取,非同源的无法获取
  7. }
  8. </script>

2.2 Restrict Quisque Access

"Source A" non potest accedere ad crustulum "Source B"

  1. <iframe id="baidu" src="http://www.baidu.com" width="500" height="300"></iframe>
  2. <script type="text/javascript" >
  3. // 访问的是当前源的cookie,并不是baidu的cookie
  4. console.log(document.cookie)
  5. </script>

2.3 Low Ajacem obtinere notitia

"Source A" petitiones "Source B" mittere potest, sed responsionem datam "Source B" obtinere non potest.

  1. const url = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc'
  2. let result = await fetch(url)
  3. let data = await result.json();
  4. console.log(data)

Nota: Inter restrictiones praedictas, restrictio navigatoris in Aiace notitia acquisitionis maximum momentum habet, et saepe in ipsa evolutione occurrit.

III puncta note

  • Circumscriptiones transversae tantum existunt in latere navigatoris, et nullae sunt restrictiones crucis in parte servo.
  • 2 Etiamsi exitus dominii est, Aiax petitiones ordinarie edici possunt, sed responsio notitiae activitatis tradendae non sunt.
  • 3<link> , <script>、<img>...... 这些标签发出的请求也可能跨域,只不过浏览器对标签跨域不做严格限制,对开发几乎无影响

image.png

4CORS Aiax cross-domain problems solvit

4.1CORS Overview

Plenum nomen CORS: Crucis-Origin Resource Socius (Resource Crucis-Origin Socius) copia specificationum usus est ut navigatrum verificationis petitionum crucis-domicilii reprimat. Regulae generales haec sunt:
● Minister explicite petitiones crucis dominii respuit aut non indicat et navigatrum verificationis deficit.
Servo aperte indicat petitiones crucis domain concessas esse, et verificationis navigatoris transit.
Nota: CORS utens ad quaestiones solvendas exitus dominii orthodoxissima est via et ministratorem "unum nostrum esse" requirit.


4.2CORS crucem-domain petitiones simplex solvit

Suprema notio: Cum server respondet, clare exprimit aliquem fontem licere petitiones crucis domain inchoare, addita responsione capitis Access-Control-Permitte-Origin, et tunc navigatrum illud directe per verificationem transit.

image.png

Servo-core code latus (accipe exemplar compagine expressum);

  1. // 处理跨域中间件
  2. function corsMiddleWare(req,res,next){
  3. // 允许 http://127.0.0.1:5500 这个源发起跨域请求
  4. // res.setHeader('Access-Control-Allow-Origin','http://127.0.0.1:5500')
  5. // 允许所有源发起跨域请求
  6. res.setHeader('Access-Control-Allow-Origin','*')
  7. next()
  8. }
  9. // 配置路由并使用中间件
  10. app.get('/',corsMiddleWare,(req,res)=>{
  11. res.send('hello!')
  12. })

4.3 Simplex petitiones et multiplex petitiones

CORS petitiones in duo genera divident: ① petitiones simplices et petitiones implicatas.

simplex petitionem

Complex postulatio

Deprecatio methodi (ratio) est: GET, PATER, POST

1 Est aut simplex postulatio aut iuncta postulatio.
2 Complexae petitiones statim petitiones preflight mittent.

Deprecatio header agros parere debet"CORS Security Specification"
Brevis nota: Quamdiu petitio capitis manually non modificatur, generaliter huic specificationi parere potest.

Content-Type valor petitionis header solum esse potest nisi tres sequentes:
text/plain
multipart/form-data
application/x-www-form-urlencoded

De petitionibus praeflight:

  • 1Sentio leo: Preflight petitio ante ipsam petitionem crucis-dominalis mittitur et a navigatro ipso initiatur.
  • 2 Praecipuum munus: cum ministris confirmabat num petitionem proximam crucis-dominium permitteret.
  • 3 Processus fundamentalis: Eligendi petitionem inchoare Primum.
  • IV Request header content: Options preflight petitionem plerumque continet in sequenti petitione capitis:

Request header

significatio

Origin

Fons petitionis

Access-Imperium-Request-Method

Ipsam postulavit HTTP modum

Access-Imperium-Request-Headers

Custom headers used in the actual request (si)

4.4CORS crucem-domain universa petitiones solvit

1 Gradus unus: Procurator primum transit petitionem praemissionis navigatoris.

responsio header

significatio

Access-Imperium-Sinite-Origin

licet fontes

Access-Imperium-Sinite-Modos

licet modi

Access-Imperium-Sinite capitis

Licuit mos capitis

Access-Control-Max-Age

Effectus caching tempus praeflight petitiones (libitum)

image.png

II Gradus II: ipsam crucem-domain petitionem palpate (eadem ratione petitiones crucis domain tractamus simplex)

image.png

Servo codice core:

  1. // 处理预检请求
  2. app.options('/students', (req, res) => {
  3. // 设置允许的跨域请求源
  4. res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500')
  5. // 设置允许的请求方法
  6. res.setHeader('Access-Control-Allow-Methods', 'GET')
  7. // 设置允许的请求头
  8. res.setHeader('Access-Control-Allow-Headers', 'school')
  9. // 设置预检请求的缓存时间(可选)
  10. res.setHeader('Access-Control-Max-Age', 7200)
  11. // 发送响应
  12. res.send()
  13. })
  14. // 处理实际请求
  15. app.get('/students', (req, res) => {
  16. // 设置允许的跨域请求源
  17. res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500')
  18. // 随便设置一个自定义响应头
  19. res.setHeader('abc',123)
  20. // 设置允许暴露给客户端的响应头
  21. res.setHeader('Access-Control-Expose-Headers', 'abc')
  22. // 打印请求日志
  23. console.log('有人请求/students了')
  24. // 发送响应数据
  25. res.send(students)
  26. })

4.5 Cors bibliotheca utere ut cito configurationem perficiat

In schemate superiore, debes caput te ipsum configurare, vel debes manu medias tabulas encapsulare.

Install cors

npm i cors

Simple configuratione cors

app.use(cors())

-Configurare cors

  1. // cors中间件配置
  2. const corsOptions = {
  3. origin: 'http://127.0.0.1:5500', // 允许的源
  4. methods: ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'], // 允许的方法
  5. allowedHeaders: ['school'], // 允许的自定义头
  6. exposedHeaders: ['abc'], // 要暴露的响应头
  7. optionsSuccessStatus: 200 // 预检请求成功的状态码
  8. };
  9. app.use(cors(corsOptions)); // 使用cors中间件

Per defaltam, js non potest accedere ad caput responsionis a tergo praefixum et necessitates a posteriori exponi.

5JSONP solvit crucem-domain problems

1JSONP Overview: JSONP usus<script>标签可以跨域加载脚本,且不受严格限制的特性,可以说是程序员智慧的结晶,早期一些浏览器不支持 CORS 的时,可以靠 JSONP 解决跨域。


Processus 2Basic:

  • Gradus unus: Quod clientem gignit a<script>标签,并将其src属性设置为包含跨域请求的 URL,同时准备一个回调函数,这个回调函数用于处理返回的数据。
  • Step 2: Accepta petitione, server notitia in callback munus incidit ac redit.
  • Step 3: Munus huius callback appellatur, et munus in modum parametri in modum callback transmittitur.

3Illustration:

image.png

4 exempla codicis;

  1. <button onclick="getTeachers()">获取数据</button>
  2. <script type="text/javascript" >
  3. function callback(data){
  4. console.log(data)
  5. }
  6. function getTeachers(url){
  7. // 创建script元素
  8. const script = document.createElement('script')
  9. // 指定script的src属性
  10. script.src= 'http://127.0.0.1:8081/teachers'
  11. // 将script元素添加到body中触发脚本加载
  12. document.body.appendChild(script)
  13. // script标签加载完毕后移除该标签
  14. script.onload = ()=>{
  15. script.remove()
  16. }
  17. }
  18. </script>

5jQuery encapsulatum jsonp

? Callback =?'

  1. $.getJSON('http://127.0.0.1:8081/teachers?callback=?',(data)=>{
  2. console.log(data)
  3. })

6Configure procuratorem solvere quaestiones domain

6,1 Configurare procuratorem ipsum

Nullae crucis-dominae quaestiones inter servientes sunt. Expressa ope uti debes ut static incipiant, ut servo tuo ac pagina sub eadem origine sint.

  1. // 启动静态资源 让服务器跟页面同一个源
  2. app.use(express.static("./public"));

Configurare procuratorem cum http procuratorem-media

  1. const { createProxyMiddleware } = require('http-proxy-middleware');
  2. app.use('/api',createProxyMiddleware({
  3. target:'https://www.toutiao.com',
  4. changeOrigin:true,
  5. pathRewrite:{
  6. '^/api':''
  7. }

 

Commodum ;

  • Munera divitum: http-proxy-medium praebet opes optionum configurationis ad varias ineundos necessitates occurrendas.
  • Multiplices procuratores molliter configurari possunt: ​​plures procuratores configurari possunt, diversis itineribus interfaciei respondentes.
  • Petitiones excipere possunt: ​​petitiones intercipi possunt et mutari per functiones consuetas processus.

Defectus;

  • Configuratio secundum quid complexa est: intellegere debes configurationem regulas ac parametri bibliothecae http-proxy-medii.
  • Non aptum ad ambitus productionis: http-proxy-medium praecipue in ambitibus evolutionis adhibetur et ad ambitus productioni non convenit.

argumenta adhibenda;

  • Apta inceptis ante-finis utentes aliquo instrumento construendo et operando cum servo evolutionis ullius.
  • Apta missionibus ubi plures procuratores indigentes mollius configurari debent.
  • Apta missionibus ubi postulationes intercipi necesse est et mutari.

6.2 Usus Nginx facere ineundo servo

Suprema notio: nginx agas duas partes, sive ut static contenti servientis et ut ineundo.

Modificare nginx configurationem sic nota.

  1. # 配置nginx根目录
  2. location / {
  3. root D:dist;
  4. index index.html index.htm;
  5. }
  6. # 配置代理
  7. location /dev/ {
  8. # 设置代理目标
  9. proxy_pass http://sph-h5-api.atguigu.cn/;
  10. }

2 Modificare frontem-finem propositi ut omnes petitiones transmittantur ad /dev, et deinde repackaged

  1. const request = axios.create({
  2. baseURL:'/dev',
  3. timeout:10000
  4. })

Protinus accessus servo nginx. Exempli gratia, si nginx in portu 8099 currit, accessum

http://localhost:8099

Tunc occurres quaestionem refice 404, nginx configurationem adde ut eam solvas

  1. # 配置nginx根目录
  2. location / {
  3. root D:dist;
  4. index index.html index.htm;
  5. try_files $uri $uri/ /index.html; # 解决刷新404
  6. }
  7. # 配置代理
  8. location /dev/ {
  9. # 设置代理目标
  10. proxy_pass http://sph-h5-api.atguigu.cn/;
  11. }

His duobus additis "/" eliminat dev

6.3 Fac servo ope pegmata

1. Utere vue.config.js lima configurare procuratorem;

Vue.config.js fasciculum crea in directorio radicis Vue propositi et sequenti codice adde:

  1. module.exports = {
  2. devServer: {
  3. proxy: {
  4. '/api': {
  5. target: 'http://api.example.com',
  6. changeOrigin: true,
  7. pathRewrite: {
  8. '^/api': ''
  9. }
  10. }
  11. }
  12. }
  13. }

In superiori codice utimurdevServer Configurationis items configurare procuratorem.inproxyProprietates procuratoris regulas configurare solebant;/apiIter interface indicat quod procuratorem requirit.targetAttributum servo scopum procuratoris repraesentat oratio;changeOriginAttributum indicat utrum fons inscriptionis postulationis mutet.pathRewriteProprietas rogatus iter dominari solebat.

Commodum ;

  • Simplex configuration: Usura procuratoris schematismi webpack-dev-servi, tantum opus est ut simplicem configurationem in file configurationis webpack.
  • Comprehensiva functionality: webpack-dev-server opes optionum configurationis praebet ut maxime ineundo necessitates occurrat.
  • Petitiones excipere possunt: ​​petitiones intercipi possunt et mutari per functiones consuetas processus.

Defectus;

  • Servo ut sileo necesse est: Post configurationem modificari, webpack-dev-server necesse est ut sileo effectum obtineat.
  • Ad ambitus productioni non convenit: webpack-dev-server principaliter in ambitibus evolutionis adhibetur et ad ambitus productioni non convenit.

argumenta adhibenda;

  • Idoneum est inceptis ante-finis utens webpack aedificatis et evolutionem servo per webpack-dev-servi incipias.
  • Idoneum est missionibus, qui simplicem ineundo configurationem requirunt nec procuratorem configurationem saepe mutare necesse est.