本文最后更新于:星期五, 三月 13日 2020, 2:51 下午

最近开始学习了,为了找回学习状态,复习下计网,准备将几个常用的重要的协议都复习一遍。

HTTP学习笔记

HTTP简介

HTTP是 Hypertext Transfer Protocol 的缩写,也就是超文本传输协议,根据RFC定义,HTTP是分布式协作超媒体信息系统的应用级协议。简单的说就是位于应用层的协议,用于从www服务器传输超文本到本地浏览器。它是一种通用的,无状态的协议。

HTTP的特点

  • HTTP是无连接的

    它每次连接只能处理一个请求,服务端处理完客户端的请求,并受到客户端的回应后,就会断开连接

  • HTTP是媒体独立的

    只要服务器和客户端知道如何处理数据内容,任何类型的数据都可以通过HTTP发送,客户端和服务器需要指定MIME-type,也就是数据内容类型。

  • HTTP是无状态的

    HTTP协议是无状态协议,无状态指的是它对事务处理没有记忆能力。假设如果后续需要用到前面的信息,那么它就需要重传,这会导致每次连接传送的数据量增大。但是从另一方面来说,如果不需要先前信息,那么它的应答又会比较快

HTTP消息结构

客户端请求消息
  • 基本格式: 请求行(request line)、请求头部(header)、空行和请求数据

    image-20200312153550763

    • 请求行:说明请求类型,要访问的资源以及所使用的HTTP版本
    • 请求头部:用来说明服务器要使用的附加信息
    • 空行:这个是必须的,即使请求数据为空,也必须有空行
    • 请求数据:就是数据啊
  • 请求方法:

    HTTP中一共定义了8种请求方法

    • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
    • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
    • GET:向特定的资源发出请求。
    • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
    • POST请求可能会导致新的资源的创建和/或已有资源的修改。 PUT:向指定资源位置上传其最新内容。
    • DELETE:请求服务器删除Request-URI所标识的资源。
    • TRACE:回显服务器收到的请求,主要用于测试或诊断。
    • CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
服务器响应消息
  • 基本格式: 状态行、消息报头、空行和响应正文。

    image-20200312160727570

    • 状态行:由HTTP协议版本号,状态码以及状态消息三部分构成
    • 消息报头:用来说明客户端要用的一些附加消息
    • 空行:位于消息报头之后,必须的
    • 响应正文:服务器返回给客户端的信息
响应头和请求头
  • 响应头

    根据MDN web文档上的定义,响应头被用于http响应中并且和响应消息主体无关的那一类 HTTP header。像Age, LocationServer都属于响应头,他们被用于描述响应

  • 请求头

    请求头HTTP 头的一种,它可在 HTTP 请求中使用,并且和请求主体无关 。某些请求头如 AcceptAccept-*If-* 允许执行条件请求。某些请求头如:Cookie, User-AgentReferer 描述了请求本身以确保服务端能返回正确的响应。

  • header

    用于传递一些附加信息,基本格式: 键: 值, 冒号后面要加一个空格

常见的header
  • 响应和请求常见通用header

    image-20200312164722066

  • 常见请求header

    image-20200312164833198

  • 常见响应header

    image-20200312164901855

header的含义可以查腾讯云社区的开发者手册

HTTP状态码

定义: HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码

HTTP状态码分类
  • 1xx:信息响应类,表示接收到请求并且继续处理
  • 2xx:处理成功响应类,表示动作被成功接收、理解和接受
  • 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
  • 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
  • 5xx:服务端错误,服务器不能正确执行一个正确的请求

image-20200312165614159

状态码具体含义也可以看维基百科定义 )

常见的HTTP状态码
  • 2xx

    • 200 OK- 请求成功,如果是非head请求,服务器返回的响应头都会包括body数据
    • 204 No Content : 常见的成功状态码,与200 OK基本相同,但是没有body数据
    • 206 Partial Content :应用于HTTP分块下载或者断电续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分。
  • 3xx

    • 301 Moved Permanently : 资源(网页等)被永久转移到其它URL,说明请求的资源不存在了。
    • 302 Found :表示临时重定向,说明请求的资源还在,但是暂时需要另一个URL来访问

    301和302都会在响应头使用字段Location,指明后续要跳转的URL

    • 304 Not Modified :不具备跳转含义,表示资源未修改,重定向已存在的缓存文件,也成为缓存重定向,用于缓存控制。
  • 4xx

    • 400 Bad Request :表示客户端请求的报文有错误

    • 401 Unauthorized:服务端要求身份验证

    • 403 Forbidden :表示服务器禁止访问资源,并不是客户端的请求错误
    • 404 Not Found :请求的资源(网页等)不存在
    • 405 Method Not Allow:请求方法不支持
  • 5xx

    • 500 Internal Server Error :表示服务器发生了错误,具体是什么的错误就不知道了
    • 501 Not Implemented :表示 客户端请求的功能还不支持
    • 502 Bad Gateway :通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误
    • 503 Service Unavailable :表示服务器当前很忙,暂时无法响应服务

总结

HTTP协议基础的东西大致就这么多了,但是HTTP协议还有好多内容,比如Access control CORS 、Authentication访问和认证机制、Caching缓存机制等等,那些内容感觉每个点都可以单独写一篇文章,等以后慢慢看,看腾讯云社区的开发者手册来学习,也会去读一读HTTP协议的RFC文档。

Reference:


HTTP     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!