码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Ajax学习:同源策略(与跨域相关)ajax默认遵循同源策略


    同源策略:是浏览器的一种安全策略

    同源意味着:协议、域名、端口号必须相同

    违背同源便是跨域


    当前网页的url和ajax请求的目标资源的url必须协议、域名、端口号必须相同

    比如:当前网页:协议http 域名 a.com  端口号8000

                目标请求:协议http 域名 a.com  端口号8000


    同源表示:同一个来源

    如果 a.com -->b.com发请求是跨域

            http---->https发请求是跨域

            800--->799发请求是跨域

     性能是有限的,服务器增加,所以便会出现跨域


     服务器部分:
     

    1. const express=require('express')
    2. const app=express();
    3. app.get('/home',function(requset,response){
    4. //设置响应头 名称 值----设置允许跨域
    5. // response.setHeader('Access-Control-Allow-Origin','*');
    6. //设置响应体
    7. response.sendFile(__dirname+'/同源策略.html');//绝对路径
    8. })
    9. app.get('/data',function(requset,response){
    10. //设置响应头 名称 值----设置允许跨域
    11. // response.setHeader('Access-Control-Allow-Origin','*');
    12. //设置响应体
    13. response.send('用户数据');//绝对路径
    14. })
    15. app.listen(9000,()=>{
    16. console.log('9000启动成功')
    17. })

     前端部分

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <h2>主页面h2>
    11. <button>点击获取用户数据button>
    12. <script>
    13. const btn=document.querySelector('button');
    14. btn.onclick=function() {
    15. const xhr=new XMLHttpRequest();
    16. //因为满足同源策略,所以url可以简写
    17. //浏览器回自动加上
    18. xhr.open('GET','/data');
    19. xhr.send();
    20. xhr.onreadystatechange=function(){
    21. if(xhr.readyState===4){
    22. if(xhr.status<300&&xhr.status>=200){
    23. console.log(xhr.response)
    24. }
    25. }
    26. }
    27. }
    28. script>
    29. body>
    30. html>

    使用url与服务器响应信息(是同源的),再网页中button发送是ajax请求(由于当前网页与按钮访问的协议 域名端口都一致 满足同源策略 所以可以省略url部分)

     

  • 相关阅读:
    ⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
    ES6 入门教程 25 Module 的加载实现 25.4 循环加载
    流量回放-The Big Picture
    《持续交付:发布可靠软件的系统方法》- 读书笔记(十五)
    程序员,阿里 P8java 大神讲的 Spring 大家族原理汇总,你确定不看?
    机器学习-学习率:从理论到实战,探索学习率的调整策略
    基于VScode 使用plantUML 插件设计状态机
    Java并发编程:start和run的区别
    【排列组合】
    PostgreSQL基础语法
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/128142620
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号