HTTP(Hyper Text Transfer Protocol), 译为超文本传输协议
    设计HTTP的最初目的就是:提供一种发布和接受HTML页面的方法,有URI来标识具体的资源

    HTTP标准
    由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布了一系列的RFC
    RFC(Request For Comments, 可以译为:请求意见稿)

    报文格式
    image.png
    image.png
    ABNF(Augmented BNF)
    是BNF的增强版
    在RFC 5234中表明,ABNF用作Internet中通信协议定义的语言
    ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是片面、不严谨的。

    HTTP协议永远都是客户端发起请求,服务器返回响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
    image.png
    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

    1. 100Continue)---请求的初始部分已经被服务器收到,并且没有被服务器拒绝。客服端应该继续发送
    2. 剩余的请求,如果请求已经完成,请忽略这个响应。
    3. 200-----请求成功
    4. 302-----请求的资源被暂时移动到了由Location头部指定的url
    5. 304-----说明无需再次传输请求的内容,也就说可以使用缓存的内容
    6. 400-----由于语法无效,服务器无法理解该请求
    7. 401-----由于缺乏目标资源要求的身份验证凭证
    8. 403-----服务器端有能力处理该请求,但是拒绝授权访问
    9. 404-----服务器端无法找到所请求的资源
    10. 405-----服务器禁止了使用当前http方法的请求
    11. 406-----服务器无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应
    12. 408-----服务器想要将没有在使用的连接关闭
    13. 500-----所请求的服务器遇到意外的情况并阻止其执行请求
    14. 501-----请求的方法不被服务器支持,因此无法被处理
    15. 服务器必须支持的方法(即不会返回这个状态的方法),只有gethead
    16. 502-----作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收到的请求是无效的
    17. 503-----服务器尚未处于可以接收请求的状态
    18. 通常造成这个情况的原因是由于服务器停机维护或者已经超载

    一些免费的正向代理:
    https://ip.jiangxianli.com/
    https://www.kuaidaili.com/free/inha/
    CDN——内容分发网络