# http 知识体系
# http 报文结构
http 报文结构一般是起始行 + 头部 + 空行 + 实体
。http 请求报文和响应报文有一定区别。
# 客户端发送的 http 请求头
Request URL: /
Request Method: GET
User-Agent: xx
Content-Type: // 要发送的数据类型,服务端会根据不同类型做不同处理,常见类型见下面
Accept: / // 客户端能接收的资源类型
Host: // 连接的目标主机和端口号
If-Modified-Since: // 对应服务器端发送的Last-Modified属性值:
If-None-Match: // 对应服务器端发送的Etag属性
Accept-Encoding: gzip // 告诉服务端可以接受的数据格式
Accept-Language: zh-CN,zh; q=0.9 // 告诉服务端客户端接受的语言
Origin: //
Referer: // 告诉服务器我来自哪里,referer表示请求文件的网址,请求时会携带。为了防止自己网站的文件被外网直接引用,可以通过比较referer,即请求的地址,与本地地址比较,设置防盗链。
常见 Content-Type
Content-Type
参数一般包含 media-type、charset、boundary
三部分。boundary
用于 指明请求体中每部分的分隔符
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something // 文件的提交,前端要 new - FormData()生成实例,并 append 文件 name 以及值
Content-Type: application/json
Content-Type: application/javascript
Content-Type: application/x-www-form-urlencoded;charset=utf-8 // 这个是 form 表单自带的 Content-Type
# 服务端发送的 http 响应头
在 linux 命令行输入curl -v www.baidu.com
,可以看到 response headers,每个网站响应头可能有小的差异
HTTP/1.1 200 OK // 起始行
Content-Type: application/json; charset=utf-8 // 响应文件的类型
Last-Modified: Tue, 16 Feb 2016 07:44:59 GMT // 资源上次更改的时间
Etag: "Fr6FTw9wdkmOgi9FyBjKPDIY4zd8.gz" // http的Entity Tag,标识文件资源的版本号
Server: Microsoft-IIS/8.0 // 用的何种服务器
对于使用了 CORS 的服务器端,还会有下面几个响应头字段:
Access-Control-Allow-Headers: Authorization,content-type,token,grant_type
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true // 是否允许设置cookie
Access-Control-Max-Age: 86400 // 每隔多久发送一次预检请求(OPTIONS)
# 常见 http 状态码
200 OK 是见得最多的成功状态码。通常在响应体中放有数据。
301 Moved Permanently 即永久重定向,比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回 301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址。
302 Found,即临时重定向。浏览器并不会做缓存优化。
304 Not Modified: 当协商缓存命中时会返回这个状态码。
400 Bad Request: 一般是参数传递有误。
401 Unauthorized: 用户没有访问权限。一般需要用户登录的接口可能会出现此错误
403 Forbidden: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。
404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
405 Method Not Allowed: 请求方法不被服务器端允许。
500 Internal Server Error: 服务器出错。