前端从跨域到跑路

前端跨域问题

  • 解决跨域问题首先必须了解同源策略
同源策略,它是由Netscape提出的一个著名的安全策略。
现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。
例如:
当你从你本地http://127.0.0.1:8080访问你的项目接口http://www.xxxxxx.cn/api/..时,
http://127.0.0.1:8080 中 http就是协议  127.0.0.1为你本机ip地址  端口号为8080
而在你项目接口中  
www.xxxxx/cn即为域名(一般域名都会被DNS解析为ip地址) 端口号也有默认值
此时很明显,我们没有做到同源策略的规定,没有保证三者(协议,域名,端口号)一致,跨域的问题便接踵而来

怎么解决?其实网上有大多解决方案,此处我要记录的不是此问题,所以就不做阐述

 一般跨域解决方案,当然也是我比较常用的,如下
1.通过jsonp跨域;
2.nodejs中间件代理跨域,如vue+node.js
3.nginx代理跨域等等,当然适自己的情况而定
4.此外还可以对chrome浏览设置 可参考:https://www.cnblogs.com/cshi/p/5660039.html

  • 记录一大坑----- cookies跨域问题

项目中开始做登录,在使用ajax请求登录接口的时候,后台返回给我的set-cookie居然没有保存到我本地?

说明:

1.后台采用php的laravel框架,将状态信息保存在服务器session,返回给客户端的set-cookies虽然在响应信息中,但是没有保存到我本地cookies;

2.关于登录状态信息的保存一般会使用cookie会话机制和token;

就在发现这个问题的时候,后台说让我用form表单提交,不用ajax了,what????

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>登录测试</title>
    <script src="./js/jquery-1.11.0.js"></script>

</head>

<body>
    <formid="doctorLoginForm">
        <input type="text" name="username" id="username" placeholder="请输入手机号码"><br>
        <input type="password" name="password" id="password" placeholder="请输入密码"><br>
        <input type="button" id="doctorLogin" value="登录"></input>
    </form>
</body>
<script>
    $(document).ready(function() {
        $("#doctorLogin").click(function() {
            $.post("http://xxxx.cn/login", {
                username: $("#username").val(),
                password: $("#password").val()
            }, function(res) {
                console.log(res);
            }, "json")


        })
    })
</script>

</html>

登录接口使用ajax,set-cookies保存不到本地,然后我就使用表单提交

 <form action="http:/www.xxxx.cn/login" method="POST" id="doctorLoginForm">
        <input type="text" name="username" id="username" placeholder="请输入手机号码"><br>
        <input type="password" name="password" id="password" placeholder="请输入密码"><br>
        <input type="submit" id="doctorLogin" value="登录"></input>
  </form>

看来表单提交一瞬间就成功的跳转页面了,返回登录成功的json信息,结果奇迹出现了,set-cookies的值保存到了本地

可是一看,不对劲啊,页面跳转了,而且本地cookie中的域名不在是我本地的了 127.0.0.1,变成了项目域名www.xxxx.cn

然后尝试各种模拟表单提交的骚操作,比如:ifream隐藏,禁止页面跳转等等,结果都不行。能不麻烦别人就别麻烦别人嘛!

问题还是要解决的,把代码从本地提交到服务器上一跑,乖乖,奇迹出现了。切,这算什么奇迹,不就是当前本地地址换成了和接口相同的域名吗,直到此刻,才发现cookie跨域是个坑

对cookie没有深入了解,还是自己的锅!!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值