HTTP协议原理(二)(跨域相关)

1、认识http客户端

  • 浏览器就是最常用的http客户端,发送请求,还可以看到返回的内容
  • f12开发者工具,network
  • curl 工具(打开命令行,输入命令可以请求具体内容)
    在这里插入图片描述

2、CORS跨域请求的限制与解决

通俗含义:

比如我要在localhost:8888 访问 localhost:8887的内容,就存在跨域

解决方法

在localhost:8887服务中设置允许跨域访问,前端实现就在请求头中添加

‘ * ’ 表示所有网站都可以跨域请求我的数据

'Access-Control-Allow-Origin': '*'

为了安全起见,可以单个设置,表示只允许http://127.0.0.1:8888访问

'Access-Control-Allow-Origin': 'http://127.0.0.1:8888'

注意点:

  • 从浏览器角度并不知道localhost 映射为127.0.0.1 ,所以浏览器认为他们不是同域的,所以访问的时候也需要改成127.0.0.1

  • 只能设置一个值,如果想设置可以进行判断

3、CORS跨域预请求验证

跨域默认只允许的方法:

GET、HEAD、POST

允许的 Content-Type
text/plain
multipart/form-data
application/x-www-form-urlencoded

请求头限制
允许的
官方网站:https://fetch.spec.whatwg.org/#cors-safelisted-request-header
在这里插入图片描述
其他限制
请求头限制
XMLHttpRequestUpload对象均没有注册任何事件监听器
请求头中没有使用 ReadableStream 对象

使用其他方法/Content-Type、请求头等等都是需要预请求的

预请求

虽然不允许跨域,但是请求是发送了的,也有数据返回,但是浏览器因为安全策略问题将返回忽略了,并抛出了一个错误

浏览器根据header判断返回允许不允许

需要增加一个header,这样请求就成功了

// 允许跨域
'Access-Control-Allow-Origin': '*',
// 允许自定义头,content-type是自定义头的名称
'Access-Control-Allow-Headers':'content-type',
// 允许除默认外的方法
'Access-Control-Request-Method':'POST,Delete,PUT',
// 请求最长时间,以以上这种方式跨域的最长时间,1000毫秒之内不用再发预请求了,可以直接发送PUT请求
'Access-Control-Max-Age':'1000',

Request Method:OPTIONS通过options来获得浏览器的认可,然后再实际发送POST请求
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值