状态码
分类
- 1XX:服务器收到请求
- 2XX:请求成功
- 3XX:重定向
- 4XX:客户端错误
- 5XX:服务端错误
- 这是一个约定,大家都跟着执行。
常见状态码
| 状态码 | 含义 | | —- | —- | | 200 OK | 请求成功。一般用于get和post请求 | | 301 Moved Permanently | 永久重定向。请求的信息已经被移动到新的URL,会返回新的URL,浏览器下次会直接跳转到新URL | | 302 Found | 临时重定向。资源只是临时被移动,客户端继续使用原URL | | 304 Not Modified | 资源未修改。所请求的资源未修改,服务器返回此状态码,不会返回任何资源 | | 400 Bad Request | 客户端请求的语法错误,服务器无法理解(产生原因:前端提交的数据在后台找不到与之相对应的实体) | | 401 Unauthorized | 当前请求需要用户验证 | | 403 Forbidden | 服务器已经收到请求,但拒绝执行 | | 404 Not Found | 服务器无法根据用户的请求找到资源 | | 500 Internal Server Error | 服务器内部错误,无法完成请求 | | 504 Gateway timeout | 网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
http methods
传统的methods
- get获取服务器的数据
- post向服务器提交数据
-
现在methods
get:获取数据
- post:新建数据
- patch/put:更新数据
- delete:删除数据
-
Restful API
是一种新的API设计方法(早已推广使用)
- 传统API设计:把每个URL当做一个功能
- Restful API设计:把每个URL当做一个唯一的资源
- 不使用URL参数
- 传统API设计:/api/list?pageIndex=2
- Restful API设计:/api/list/2
- 用method表示操作类型
- Accept:浏览器可接收的数据格式
- Accept-Encoding:浏览器可接收的压缩算法,如gzip
- Accept-Languange:浏览器可接收的语言,如zh-CN
- Connection:keep-alive:一次TCP连接重复使用
- Cookie
- Host:访问的网址
- User-Agent:简称UA,浏览器信息
Content-type:发送数据的格式,如application/json
Response Headers
Content-type:返回数据的格式,如application/json
- Content-length:返回数据的大小,多少字节
- Content-Encoding:返回数据的压缩算法,如gzip
-
自定义header
-
缓存相关的headers
-
http缓存
为什么需要缓存
让页面加载地更快。网页加载过程中比较慢的环节是网络请求,尽量减少网络请求的体积和数量,这样网络请求就会更快一些。网络请求是不稳定的。
-
强制缓存
- Cache-Control存在Responese Headers中,用于控制强制缓存的逻辑。例如Cache-Control:max-age=31536000(单位是秒)
- Cache-Control的值:
- max-age:缓存的最大过期时间
- no-cache:不用本地缓存,到服务端去请求
- no-store:不用本地缓存,也不用服务端的一些缓存措施
- private:只允许最终用户做缓存
- public:允许中间代理等做缓存
关于Expires
- 是一个服务器端缓存策略(并不是指文件缓存在服务端)。服务端判断客户端资源,是否和服务端资源一样,一样就不返回了。
- 一致则返回304 not modified,否则返回200和最新的资源。
- 资源标识:
- 在Response Headers中,有两种
- Last-Modified:资源的最后修改时间
注:If-Modified-Since的值就是Last-Modified - Etag:资源的唯一标识(一个字符串,类似人类的指纹)
注:If-None-Match的值就是Etag - 会优先使用Etag
Last-Modified只能精确到秒级
如果资源被重复生成,而内容不变,则Etag更精确
-
刷新页面对http缓存的影响
三种刷新操作:
- 正常操作:地址栏输入url、跳转链接、前进后退等
- 手动刷新:F5,点击刷新按钮,右击菜单刷新
- 强制刷新:ctrl + F5
不同刷新操作,不同的缓存策略
http是明文传输,敏感信息容易被中间劫持
- https = http +加密,劫持了也无法解密
-
加密方式
对称加密:一个key负责加密和解密
- 非对称加密:一对key,A加密之后,只能用B来解密
https同时用到了这两种加密方式。先用安全的非对称加密来加密内容,以后的传输都用成本低的对称加密、
https证书
中间人攻击:把非对称加密的pubkey直接替换成自己的
- 如何预防中间人攻击:使用第三方证书(慎用免费、不合规的证书)
- 浏览器校验证书
-
相关面试题
http常见的状态码有哪些?
- http常见的header有哪些?
- 什么是Restful API?
- 描述一下http的缓存机制(重要)