zoukankan      html  css  js  c++  java
  • Http 协议

    一、HTTP 协议详解

    http (Hyper Text Transfer Protocol,超文本传输协议)协议是基于应用层的 通信规范:双方要进行通信,大家都遵守一个规范——http协议。

    http协议从WWW服务器传输超文本到本地浏览器,可以使浏览器更加高效。

    http协议 http/2 协议

    http 是一个应用层协议,由 请求 和 响应 构成,是一个标准的客户端服务器模型。

    http 通常承载于 TCP 协议之上,有时也承载于 TSL 或 SSL 协议层之上,这个时候就成了常说的 https。

    默认 http 的端口号为 80, https 的端口号为 443。

    http 协议是个无状态的协议,同一个客户端的这次请求和上次请求没有对应关系。

    http 协议的模型就是客户端发起请求,服务器回送响应。这种设计属于典型的“问答式”交互,客户端和服务器一问一答,使http协议模型异常简单。

    但是也存在问题:如服务器端不会主动向客户端PUSH,一问一答的轮询也会使TCP连接频繁建立和断开,异常其交互效率不高。

    http 协议如何工作

    1、客户机与服务器需要建立连接。单击某个超链接,HTTP 协议的工作开始。

    2、建立连接后,客户机发送一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号、后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。

    3、服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)。

    4、客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接。

    注:如果以上过程中的某一步出现错误,产生的错误信息将返回到客户端,由显示屏输出。可以使用抓包工具查看http协议。

    http 的一些主要概念

    1、请求

    在发请求前,需要先建立连接

    连接是传输层的实际环流,建立在两个互相通信的应用程序之间,

    在 http/1.1 中,request 和 response 头中都有可能出现一个 connection 的头,其决定 Client 和 Server 通信时对于长链接如何处理。

    http/1.1 默认对方支持长连接。只要 request 或 response 的header 中包含值为close 的 connection,都表名当前正在使用的 TCP 连接在请求处理完毕后会被断掉,以后Client 再进行新的请求时必须创建新的 TCP 连接。

    持久连接的好处在于减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。

    持久连接使得多数请求以管线化方式发送称为可能,即不用等待响应亦可直接发送下一个请求。

    http 请求由三部分组成:请求行、消息报文、请求正文。

    请求行:以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,

    格式为:Method Request-URI HTTP-Version CRLF

    Method: 请求方法

    Request-URI: 一个统一资源标识符

    HTTP-Version: 请求的HTTP协议版本

    CRLF: 回车和换行

     

    2、响应

    http 响应也由三部分组成,分别是:状态行、消息报文、响应正文。

    格式为:HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version: 服务器http协议的版本。

    Status-Code: 服务器发回的响应状态代码。

    Reason-Phrase: 状态代码的文本描述。

    状态码由三位数字组成,第一个数字定义了响应的类型,有五种可能取值:

    1xx:指示信息——请求已接收,继续处理

    2xx:成功——请求已被成功接收、理解、接收。

    3xx:重定向——要完成请求必须进行进一步的操作。

    4xx:客户端错误——请求有语法错误或请求无法实现。

    5xx:服务器端错误——服务器未能实现合法的请求。

     常用的状态码大概只有14种。

    200 OK:表示从客户端发来的请求在服务器端被正常处理了。

    204 No Content:表示服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。一般只需要从客户端往服务器发送信息,而对客户端不需要发送新的消息内容的情况下使用。

    206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

    301 Moved Permanently:永久重定向,表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。

    302 Found:临时重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

    303 See Other:表示由于对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。

    304 Not Modified:表示客户端发送附带条件的请求(指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一部首)时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。

    307 Temporary Redirect:临时重定向。

    400 Bad Request:表示请求报文中存在语法错误。

    401 Unauthorized:表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate 首部用以咨询用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。

    403 Forbidden:表示对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址视图访问)等列举的情况都可能是403发送的原因。

    404 Not Found:表示服务器上无法找到请求的资源。

    500 Internal Server Error:表示服务器端在执行请求时发生了错误。

    503 Service Unavailable:表示服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。可以写入Retry-After头部字段返回给客户端以通知解除所需的时间。

    3、报头

    http消息报头包括普通报头、请求报头、响应报头、实体报头。

    每个报头域组成形式为:名字 + : + 空格 + 值

    消息报文域的名字是不区分英文大小写的。报头都是自解释的。

  • 相关阅读:
    Java中两个Long对象如何比较是否相等
    微信小程序data数组push和remove问题
    微信小程序let和var以及const有什么区别
    小程序开发之弹出框
    Windows系统下如何卸载干净mysql
    jQuery序列化表单
    ssm框架使用详解&配置两个数据源
    nginx在一个服务器上配置两个项目,并通过两个不同的域名访问
    nginx跨域设置&文件上传大小限制
    Navicat11连接oracle数据库
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10542130.html
Copyright © 2011-2022 走看看