HTTP学习笔记

HTTP

超文本传输协议,一种无状态的(不缓存),以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活互动

HTTP报文格式

HTTP协议分为请求报文与响应报文两种结构,两种结构都由三部分组成:

  • 起始行:描述请求或响应的基本信息

  • 头部字段集合:使用key/value形式详细说明报文

  • 消息正文:实际传输的数据,可以是纯文本、图片、视频等HTTP学习笔记_第1张图片

     

  1. 请求行报文格式

  • METHOD:请求方法。如GET/HEAD/PUT/POST,表示对资源的操作

  • URL:请求目标。表示请求方法要操作的资源

  • VERSION:http版本号。

  1. 响应行报文格式

  • VERSION:http版本号

  • STATUS CODE:表示处理的结果,如200(成功)/500(服务器错误)

  • REASON:原因。作为状态码的补充

  1. HTTP头字段

    为key:value形式,最后用CRLF换行表示字段结束如,Content-type:application/json。头字段不仅可以使用已有头,也可以添加自定义头

    ⚠️头字段注意事项:

    • 字段名不区分大小写,字段名里不允许出现 空格,可以使用连字符‘-’,但不能使用下划线‘_’。字段名后必须紧接着':',不能有空格而‘:’后字段值前可以有多个空格。如,Connection:keep-alive(正确)而Connection :keep-alive是错误的

    • 字段可以任意排列

    • 字段不能重复,除非字段本身主义允许,如Set-Cookie

  2. 常用头字段

    • 请求字段:如Host,Referer

    • 响应字段:如Server,Date

    • 通用字段:如Content-type,Connection

HTTP状态码

HTTP状态码
1XX:消息响应,服务器收到请求,需要请求者继续执行操作
2xx:成功响应,操作被成功接收并处理
3xx:重定向响应,需要进一步的操作以完成请求
4xx:客户端错误,请求包含语法错误或无法完成请求
5xx:服务器端错误,服务器在处理请求的过程中发生了错误
常见状态码
200:请求成功,用于get和post请求
301:永久移动,资源被永久转移到其它URL,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
404:请求资源不存在,找不到
500:内部服务器错误,无法完成请求
其他状态码
100:继续,客户端应继续其请求
101:切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议
201:已创建。成功请求并创建了新资源
202:已接受。已接受请求,但未处理完成
203:非授权信息。请求成功,但返回的meta信息不在原始的服务器,而是一个副本
204:无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205:重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206:部分内容。服务器成功处理了部分GET请求
300:多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
302:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303:查看其它地址。与301类似。使用GET和POST请求查看
304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305:使用代理。所请求的资源必须通过代理访问
306:已经被废弃的HTTP状态码
307:临时重定向。与302类似。使用GET请求重定向
400:客户端请求的语法错误,服务器无法理解
401:请求要求用户的身份认证(未授权)
402:保留,将来使用
403:服务器理解请求客户端的请求,但是拒绝执行此请求
405:客户端请求中的方法被禁止
406:服务器无法根据客户端请求的内容特性完成请求
407:请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408:服务器等待客户端发送的请求时间过长,超时
409:服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410 :客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411:服务器无法处理客户端发送的不带Content-Length的请求信息
412:客户端请求信息的先决条件错误
413:由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414:请求的URI过长(URI通常为网址),服务器无法处理
415:服务器无法处理请求附带的媒体格式
416:客户端请求的范围无效
417:服务器无法满足Expect的请求头信息
501:服务器不支持请求的功能,无法完成请求
502:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504:充当网关或代理的服务器,未及时从远端服务器获取请求
505:服务器不支持请求的HTTP协议的版本,无法完成处理

http请求的过程

  1. 浏览器解析URL中的域名

  2. 根据域名获取对应的ip地址,首先从浏览器缓存中查看,如果没有则从本机域名解析文件host(/etc/hosts)中查看,还没有则从LDNS(local dns server)、Rootserver域名服务器、国际顶级域名服务商的DNS的层层解析

  3. 拿到IP地址后,浏览器可以发起与服务器的三次握手

  4. 握手建立后,开始组装http请求报文,发送报文

  5. 服务器收到请求报文之后开始解析请求报文,生成响应数据,发送响应数据

  6. 浏览器收到响应之后,开始渲染页面

HTTP的8种请求方法

        1.GET

        请求指定的页面信息,并返回实体主体,其请求参数放于url后面

特点:

  • GET请求保留在浏览器历史记录中

  • GET请求可被收藏为书签

  • GET请求不应在处理敏感数据时使用(因为所发送的数据是URL的一部分是可见的)

  • GET请求有长度限制

  • GET请求只应当用于取回数据

  • GET请求可被缓存

  • GET请求只允许ASCII字符

        2.POST

        向指定资源提交数据进行处理请求(如提交表单、上传文件)。数据被包含在请求体中,会导致新资源的建立或已有资源的修改

特点:

  • POST请求不会被缓存

  • POST请求不会保留在浏览器历史记录中

  • POST不能被收藏为书签

  • POST请求对数据长度没要求

        3.HEAD

        类似于GET请求,没有响应体,仅有传输状态与标题部分,用于获取报头

        4.OPTIONS

        允许客户端查看服务器的性能

        5.PUT

        用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

        它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。

        6.DELETE

        请求服务器删除指定的页面

        7.TRACE

        回显服务器收到的请求,主要用于测试或诊断

        8.CONNECT

        http/1.1协议中预留给能够将连接改为管道方式的代理服务器

        9.PATCH

        对PUT方法的补充,用来对已知资源进行局部更新

你可能感兴趣的:(http,网络协议,网络)