被「CORS」绕晕的朋友,多半不是脑子不够用,是被各种"速成攻略"带歪了。今天换个讲法,从根子上把它捋顺。
这几个问题问得最多
HTTP状态码:1xx信息、2xx成功(200 OK 201 Created 204 No Content)、3xx重定向(301永久 302临时 304缓存)、4xx客户端错误(400参数错 401未认证 403禁止 404不存在 429限流)、5xx服务端错误(500内部错误 502网关 503不可用 504超时)。错误信息要看完整,别只看第一行,真正的根因往往在堆栈深处。多写多测自然熟练,开发就是踩坑填坑的循环。
容易被忽略的延伸
常见请求头:Content-Type(内容类型application/json text/html)、Authorization(认证Bearer token)、User-Agent、Cookie。响应头:Set-Cookie、Access-Control-Allow-Origin(CORS)、Cache-Control、Location(重定向)。CORS跨域要服务端设置允许的源。生产环境要考虑异常、并发、性能,不能只测正常流程。边界情况要专门测:空值、超长、特殊字符、负数、并发。
操作时要注意
先理解概念。CORS属于开发基础知识,搞懂底层原理(编码规则、算法逻辑、协议规范)比记API更重要。原理通了,换语言换框架都能快速上手。安全三件套:防SQL注入、防XSS、防CSRF,缺一不可。日志要记关键节点和异常,出问题排查全靠它。
几个要注意的地方
顺便提醒一句,这些都是容易翻车的地方:
- 301永久重定向SEO传递权重,302临时不传递
- 401是没认证(没登录),403是没权限(登录了但无权访问)
- CORS要服务端设Access-Control-Allow-Origin,复杂请求先发OPTIONS预检
- Content-Type决定怎么解析请求体:application/json、form-urlencoded、multipart
讲真,我写这篇也重新梳理了一遍自己的思路。教是最好的学,这话一点不假。
常见问题
【CORS跨域怎么解决?】服务端响应头设置Access-Control-Allow-Origin允许的源(可指定域名或*)、Allow-Methods允许的方法、Allow-Headers允许的头。复杂请求(PUT/DELETE或自定义头)会先发OPTIONS预检。
【HTTP状态码301和302什么区别?】301永久重定向(搜索引擎更新索引)、302临时重定向(保留原URL)。SEO改域名用301传递权重,临时跳转用302。304是缓存未修改直接用本地缓存。
【401和403什么区别?】401 Unauthorized未认证(没登录或token无效,需要认证);403 Forbidden已认证但无权限(登录了但没权限访问该资源)。404是资源不存在,400是请求参数错误。
【CORS是什么?】属于开发基础知识范畴,是程序员日常会用到的概念或工具。理解原理(编码/算法/协议)比记API重要,原理通了换语言框架都能快速上手。