cookie 可以实现不同域共享吗
同一主域名下的子域名,cookie
可以共享
function Heartbeaet() {
let timer = 0
function fn() {
console.log('hello')
timer = setTimeout(fn, 1000) // “心跳” 经量避免使用 setInterval
}
timer = setTimeout(fn, 1000)
return () => {
console.log('销毁成功')
clearTimeout(timer) // 组件销毁
}
}
常见的 HTTP 请求头有:
常见 HTTP 响应头有
HTTP 1.0:
HTTP 1.1:
HTTP 2.0:
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
通常来说, post 比 get 更安全, 因为 post 请求参数是放在 body 里面的嘛, 但是 post body 中的数据也可以从开发者工具中看到, 所以也不能说安全吧
而且 get post 也都可以在 body 中放数据的, 只是因为浏览器限制, get 才无法放在 body 中, 我自己就试过使用 postman 在 get 的 body 中传数据, 后台服务也是可以收到的
常见的 get 和 post 区别还有GET传输的数据比较少,post 传输数据多;在 HTTP 规范中并没有 URL 的长度和传输的数据大小进行限制,但是在实际开发时,由于浏览器和服务器均对 URL 的长度进行了限制,因此表现出了 GET传输数据少的缺点
而对于 post 请求,由于数据放在请求体中,虽然理论上不会受到限制,但是实际开发中各个服务器也会对POST的数据大小进行一定的限制;比如 nginx 默认上传图片的大小是 2mb
因此不管GET还是POST,数据传输大小都会有限制,只是POST的传输大小相对于GET来说比较大
get 会缓存, 我们发送一个 get 请求, 后面相同的请求会 304 进行缓存下来
而 post 不会, 因为 post 请求大多用于数据提交, 需要数据到达服务器才进行操作
一般情况下
get 请求无论请求多少次也不会有副作用, 也可以说是不会对资源产生影响, 因此我们说 get 请求具有幂等性
post 不止会去修改数据, 或者说是去影响资源变化, 所以我们说 post 有明显的 非幂等性
当然, 这是规范的说法, 因为 get 也是可以去修改资源, post 也是可以去查询资源
get 请求会产生一个 TCP 数据包, get 请求发送 header 和 data 给服务端, 服务端返回一个 200, 请求成功
post 请求会产生两个 TCP 数据包, post 请求发送 header 给服务端, 服务端返回 100, 告诉客户端我已经准备接收数据, post 在发送一个 data 给服务端, 服务端返回 200, 请求成功 (当然啦这是只有特殊的浏览器才会这样, 一般浏览器不会这样)
如何回答面试官问的 GET 和 POST 区别这道送命题
GET(请求的方式) /newcoder/hello.html(请求的目标资源)
HTTP/1.1(请求采用的协议和版本号)
Accept: /(客户端能接收的资源类型)
Accept-Language: en-us(客户端接收的语言类型)
Connection: Keep-Alive(维护客户端和服务端的连接关系)
Host: localhost:8080(连接的目标主机和端口号)
Referer: http://localhost/links.asp
(告诉服务器我来自于哪里)
User-Agent: Mozilla/4.0(客户端版本号的名字)
Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
Cookie(客户端暂存服务端的信息)
Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)
在服务器响应客户端的时候,带上
Access-Control-Allow-Origin
头信息,解决跨域的一种方法
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功 , 一般用于 GET 与 POST 请求 |
204 | No Content | 无内容。服务器成功处理,但未返回内容 。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
206 | Partial Content | 是对资源某一部分的请求 ,服务器成功处理了部分 GET 请求,响应报文中包含由 Content-Range 指定范围的实体内容。 |
301 | Moved Permanently | 永久性重定向 。请求的资源已被永久的移动到 新URL,返回信息会包括新的URL,浏览器会自动定向到 新URL。今后任何新的请求都应使用新的URL代替 |
302 | Found | 临时性重定向 。与301类似。但资源只是临时被移动。客户端应继续使用原有URL |
303 | See Other | 查看其它地址 。与302类似。使用GET请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
307 | Temporary Redirect | 临时重定向 。与302类似。使用GET请求重定向,会按照浏览器标准,不会从POST变成GET。 |
400 | Bad Request | 客户端请求报文中存在语法错误,服务器无法理解 。浏览器会像200 OK一样对待该状态吗 |
401 | Unauthorized | 请求要求用户的身份认证 ,通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若之前已进行过一次请求,则表示用户认证失败 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。也可以在服务器拒绝请求且不想说明理由时使用 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 ,也可能是web应用存在bug或某些临时故障 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求 。延时的长度可包含在服务器的Retry-After头信息中 |
一般跨域问题前端是怎么解决的?调试的时候
HTTP 传输过程
三次握手过程 - 建立连接
四次挥手的过程 - 关闭连接
跨域请求
![]()
加载第三方资源跨域解决办法
<script>
window.onSuccess = function (data) {
console.log(data)
}
// CORS 配置允许跨域 (服务端)
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8011")
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With")
response.setHeader("Access-Control-Allow-Headers", "PUT,POST,GET,DELETE,OPTIONS")
response.setHeader("Access-Control-Allow-Credentials", "true") // 允许跨域接收 cookie
script>
<script src="https://www.bbb.com/api/getData">script>
“多余” 的 options 请求
session 优点
session 缺点
JWT 优点
JWT 缺点
对比
基于 cookie
www.baidu.com
image.baidu.com
(www、image 为二级域名,baidu.com 为主域名)SSO
第三方登录( OAuth 2.0 )
扩展
- 主域名相同,则可共享 cookie
- 主域名不同,则需使用 SSO (单点登录)