请求和响应
如何发送请求
- 使用浏览器地址栏,只能get
- 使用form标签,只能get和post(用得不多
- 使用AJAX
- 使用命令行工具 curl(Window 10+、macOS、Linux 自带
请求内容
请求行
GET / HTTP/1.1 get后加上路径,路径以 / 开头,后面追加 http/版本号,请求方法除了get还有 post, put, patch, options, trace
请求头
Accept: text/html... //请求根目录,返回html
Content-Type: application/json //上传内容格式
Host: www.baidu.com //访问域名
回车(间隔符号
消息体(任意内容
如何返回响应
- 使用 Node.js, Python, Java, Go 等任意后台语言
响应内容:
Cookie
即服务器通过 Set-Cookie 响应头下发给浏览器的一段字符串
下发后,未来的一段时间内,浏览器 向 同域名 或 子域名 发送请求时,必须通过请求头 Cookie 带上这段字符串,主要用于识别用户身份
登录流程
- 用户填写登录凭据
- 服务器检查凭据的有效性
- 如果有效 则通过 Set-Cookie 给用户下发一串随机数(Cookie),无效则提示密码错误
- 服务器将随机数(Cookie)和对应的 user_id 记下来,表示用户已登录
- 用户后续的请求全都会带上随机数,服务器皆放行
存在内存或硬盘,这份数据被叫做 session
session 是真实的登录信息 在服务器的内存或硬盘上,cookie 是随机数 在浏览器,
同源策略与跨域
浏览器的一个功能,为了保护用户数据,每个网站只能访问自己的数据
协议,主机名(域名或IP),端口完全一直的两个 url,被称为同源
想要突破浏览器的同源限制,就是跨域
跨域有三种方法,1.CORS 2.JSONP 3.反向代理,三种都需要后端参与
CORS——Cross Origin Resource Sharing
跨域资源共享,由后端在响应头添加
假设 a.com:1234 想发送请求给 b.com:4321
如果是简单请求(详见MDN),在响应头设置 Access-Control-Allow-Origin:b.com:4321 即可
如果是复杂请求(详见MDN),则见 MDN 操作
JSONP
//略/* b.com代码 */ if(path === '/data'){ reponse.statusCode = 200 reponse.setHeader('Content-Type', 'text/javascript;charset=utf-8') //把数据格式改成JS reponse.write(`window.xxx({"name" : "Gorge"}) //此处,{"name":"Gorge"}为JSON 两边的是Padding reponse.end() }
缺点:只能发 get 请求,无法定向分享
## 反向代理
一般通过 nginx 配置实现
假设 a.com:1234 想把 GET /data 共享给 b.com:4321
1. b.com 后端提供一个 /data(Nginx 配置如下)
location /data { proxy_pass a.com:8888; }
2. b.com 前端通过 AJAX 访问 b.com/data
2. b.com/data 向 a.com/data 发请求,得到响应之后给 b.com 的前端