HTTP(Hyper Text Transfer Protocol), 译为超文本传输协议
设计HTTP的最初目的就是:提供一种发布和接受HTML页面的方法,有URI来标识具体的资源
HTTP标准
由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布了一系列的RFC
RFC(Request For Comments, 可以译为:请求意见稿)
报文格式

ABNF(Augmented BNF)
是BNF的增强版
在RFC 5234中表明,ABNF用作Internet中通信协议定义的语言
ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是片面、不严谨的。
HTTP协议永远都是客户端发起请求,服务器返回响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
URL的编码
url中一旦出现了特殊字符(中文、空格),需要进行编码
在浏览器输入url时,是采用utf8编码
请求方法
RFC 7231, section 4: Request methods:描述了8种请求方法
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE
RFC 5789, section 2: Patch method:描述了PATCH方法
GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)
POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)
HEAD:请求得到与GET请求相同的响应,但没有响应体
使用场景举例:在下载一个大文件前,先获取其大小,再决定是否要下载。以此可以节约带宽资源
OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法
OPTIONS * HTTP/1.1
PUT:用于对已存在的资源进行整体覆盖
PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)
DELETE:用于删除指定的资源
TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断
CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)
可以用来访问采用了 SSL (HTTPS) 协议的站点
头部字段
头部字段可以分为4种类型
请求头字段(Request Header Fields)
有关要获取的资源或客户端本身信息的消息头
响应头字段(Response Header Fields)
有关响应的补充信息,比如服务器本身(名称和版本等)的消息头
实体头字段(Entity Header Fields)
有关实体主体的更多信息,比如主体长度(Content-Length)或其MIME类型
通用头字段(General Header Fields)
同时适用于请求和响应消息,但与消息主体无关的消息头
状态码可以分为五类
信息响应:100~199
成功响应:200~299
重定向:300~399
客服端错误:400~499
服务器错误:500~599
100(Continue)---请求的初始部分已经被服务器收到,并且没有被服务器拒绝。客服端应该继续发送剩余的请求,如果请求已经完成,请忽略这个响应。200-----请求成功302-----请求的资源被暂时移动到了由Location头部指定的url上304-----说明无需再次传输请求的内容,也就说可以使用缓存的内容400-----由于语法无效,服务器无法理解该请求401-----由于缺乏目标资源要求的身份验证凭证403-----服务器端有能力处理该请求,但是拒绝授权访问404-----服务器端无法找到所请求的资源405-----服务器禁止了使用当前http方法的请求406-----服务器无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应408-----服务器想要将没有在使用的连接关闭500-----所请求的服务器遇到意外的情况并阻止其执行请求501-----请求的方法不被服务器支持,因此无法被处理服务器必须支持的方法(即不会返回这个状态的方法),只有get和head502-----作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收到的请求是无效的503-----服务器尚未处于可以接收请求的状态通常造成这个情况的原因是由于服务器停机维护或者已经超载
一些免费的正向代理:
https://ip.jiangxianli.com/
https://www.kuaidaili.com/free/inha/
CDN——内容分发网络
