http协议详解
http请求头部
基本方法
get 从服务器获取资源
post 在服务器创建资源
put 在服务器修改资源(幂等性,区别于post不同点,如果说请求10次,post就会10次每次结果不同,而put则是一样的。
delete 在服务器删除资源
其他方法
option 跨域
trace 用于显示调试信息(大多数网站不适用,因为会泄漏信息,可以看到链路看到源头
connect 代理
patch 对资源进行部分更新(极少数)
状态码
状态码
1xx:提供信息
- 100 continue 提供信息
- 101 http协议切换(switch Protocol)
2xx 成功 - 200 ok(get)
- 201 created 已创建(post)
- 202 Accepted 已接收
- 203 Non-Authoritative Information 非权威内容(代表内容传过来在中间被修改了)
- 204 No Content 没有内容(put)
- 205 Reset Content 希望你重置内容(也就是是请求拿走了,希望你重置一下,让用户下一次填写)
- 206 Partial Content 服务器下发了部分内容(range header)
3xx 重定向(资源拿不到)
- 300 Multiple Choices用户请求了多个选项的资源(返回选项列表)
- 301 Moved Permanently 永久转移
- 302 Fond 资源被找到(以前是临时状态)(后来拆分为303,307)
- 303 See Other 可以使用GET方法在另一个url找到资源(303只区get)
- 304 Not Modified 没有修改(缓存特别说明)
- 305 Use Proxy 需要代理 说明你没有权限需要代理服务器
- 307 Temporary Redlirect临时重定向
- 308 Premanent Redirect 永久重定向(不会改变方法,而301会变为get)
301vs308(重点)
共同点
- 资源被永久转移
差异 - 客户端收到308请求后,之前是什么method,那么之后也会延用这个method(POST/GET/PUT)到新地址
- 客户端收到301请求后,通常用户会向新地址发起GET请求
**302/303/307**
共同点
* 资源临时放到新地址(请不要缓存)
*
差异
* 302 是http1.0提出的,最早叫做Moved Temporarily;很多浏览器实现时候没有遵照标准,把所有请求都重新定向get。
* 303 告诉客户端使用get方法重定向
* 307 告诉客户端使用元method重定向资源
4xx 客户端错误(一般是浏览器,一个网址但是不存在就会返回404)
- 400 Bad Request 请求格式错误(通常程序员错了)
- 401 Unauthorized 没有授权 看到就可以跳登录
- 402 Payment Required 请先付费
- 403 Forbidden 禁止访问,就是说你要去找管理员了
- 404 Not Found 没有找到
- 405 Method Not Allowed 方法不被允许
- 406 Not Acceptable 服务端可以提供的内容和客户端期待不一样
500 服务端错误
- 500 Internal Server Error(内部服务器错误)
- 501 Not Implemented(没有实现)就是说他知道有这个,但是还没写的情况
- 502 Bad Gateway (网关错误(网关给的,可以看网关错误))
- 503 Service Unavailable(服务不可用,原因:内存用光了,服务在连接中)
- Gateway Timeout(网关超时)查网光,可能就是服务器挂了
- 505 HTTP Versio Not Supported(版本不支持)
常见HTTP头部
Content-Length
发送给接收者的body内容长度(字节)
- 一个byte是8bit
- utf-8编码字符1-4字节
User-Agent
帮助区分客户端特性的字符串
(不是浏览器环境可能没有这个)
爬虫要这个,要不然会被浏览器忽略
- 操作系统
- 浏览器
- 制造商(手机类型)
- 内核内容
- 版本号。。。
Content-Type
帮助区分资源媒体类型(Media Type/MIME Type)
- text/html
- text/css
- application/json
- img/jpeg
Origin
描述请求来源
- scheme://host:port
- 不含路径
- 可以是null
Accept
协商,非硬性要求
- 建议服务端返回何种媒体类型(MIME Type)
- */*代表所有类型(默认)
- 多个类型用逗号隔开
- Accept-Encoding:建议服务端发送那种编码(压缩算法)
- deflate,gzip;q(权重)=1,*;q=0.5
- Accept-Language:建议服务器传递哪种语言
- Accept-Language:fr-CH,fr;q=0.9,en;q=0.8,de;q=0.7,*;q=0.5
Referer
告诉服务端打开当前页面的上一张url;如果是ajax请求,那么就告诉服务端发送请求的url是什么
- 非浏览器环境下不发送Referer(或者虚拟Referer,通常爬虫)
- 常常用户用户行为分析
Connection
决定连接是否在当前事物完成后关闭
- http1.0 默认close
- http1.1后默认 keep-alive(不关闭TCP通道,优化处理)