一、典型的 HTTP Client-Server协议会话阶段。
- 客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
- 客户端发送请求并等待应答。
- 服务器处理请求并送回应答,回应包括一个状态码和对应的数据。
ps:从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。
二、常见http headers。
1.request headers
request ps:java后台可以用http servletRequest 获取headers信息。
2.response headers
response 图片来源于网络
三、http 状态码(response code)。
分类:
code | 描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见状态码描述:
code | 英文名称 | 描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocol | 该代码是响应客户端的 Upgrade标头发送的,并且指示服务器也正在切换的协议。例如,切换到HTTP的新版本协议 |
200 | ok | 请求成功 |
201 | Created | 该请求已成功,并因此创建了一个新的资源。它通常是post或put请求后的响应 |
300 | Multiple Choice | 被请求的资源有一系列可供选择的回馈信息 |
301 | Moved Permanently | 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。 |
400 | Bad Request | 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2、请求参数有误。 |
401 | Unauthorized | 当前请求需要用户验证。 |
403 | Forbidden | 服务器已经理解请求,但是拒绝执行它。如:请求接口不存在、跨域等可能会出现此code |
404 | Not Found | 请求失败,请求所希望得到的资源未被在服务器上发现。 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
502 | Bad Gateway | 它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。 |
四、内容安全策略( CSP )
五、HTTP cookies
首先我们要了解http是无状态可会话的,而Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。当然Cookie也可以用于客户端信息的存储,我们可以设置cookies的有效期来控制它的生命周期(这一有效期只与客户端相关)。
- ps
cookies安全:
通过设置Secure(确保是HTTPS )属性和HttpOnly(使jsapi无法访问) 属性可以确保cookies相对安全。
cookies作用域:
可以通过Domain 和 Path 标识定义Cookie的作用域。
六、跨域资源共享(CORS)。
CORS是为了让浏览器可以访问非同源的资源,所谓同源即:协议相同、域名(主机)相同、端口相同。
有哪些实现跨域的方案?
-
使用JSONP。
JSONP不使用XMLHttpRequest 来请求json数据,而是通过使用<script>标签来请求外部脚本,来实现跨域请求json数据。
缺点:高耦合、不安全、只支持GET。 -
CORS。
通过对http请求的首部字段判断来实现访问控制。另外在浏览器端,发起实际请求前会发起一条OPTIONS预请求(并非所有请求都会OPTIONS),服务器通过对预请求的判断(比如Origin)来决定其实际请求是否被允许。
ps:我们可以通过预请求的Access-Control-Allow-Methods返回字段来判断可以使用的http请求方式,还可以通过Access-Control-Allow-Headers字段来得到允许携带的首部字段。 -
代理。
同源策略是浏览器的规则,那我们绕开就可以实现跨域。
例:浏览器要请求在非同源服务器的数据,我们先在localhost上搭建一个请求外网服务器的代理服务器(可以通过node、nginx...实现)做数据转发,然后浏览器直接请求localhost代理服务器,即实现了跨域。
网友评论