HTTP协议理解

前面的话

对于HTTP协议,我们并不陌生,随随便便浏览一个网页就接触到了http协议。前一篇文章说的Ajax技术,涉及到了GET与POST请求就是属于http协议的方法。下面详细说一说http协议。

什么是HTTP协议?
  • HTTP是超文本传输协议(Hypertext Transfer Proocol),是客户端与服务器端之间通信的规则。通信双方都需要遵守规则,才能通信。(最常见的客户端就是浏览器)
  • HTTP是基于TCP/IP四层协议中的应用层协议。
  • HTTP服务器端监听的默认端口是80
HTTP特点
  • 简单连接,通信快
  • 允许传输任意类型的数据对象:传输类型由Content-Type 加以标记
  • HTTP 0.9和1.0是非持续连接,每次TCP连接只能发送一次请求;HTTP1.1是持续连接,TCP连接默认不关闭,可以被多个请求复用。对于同一个域名,大多数浏览器允许同时建立6个持久连接。默认开启Connection:keep-alive.
  • HTTP 是一个无状态的协议:对于之前的交互没有记录。每次交互只能用此次的信息,要想使用前面的信息,就必须重传。即无法保存或维持某一状态。
    在这里插入图片描述
HTTP工作原理

HTTP协议定义的就是客户端与服务端之间相互通信的规则,采用的是请求/响应模型。客户端向服务器发一个请求报文,服务器接收请求后,就会作出响应。

  • 请求报文:包含请求行(请求的方法,URL、协议版本)、请求头部空行请求数据4部分
  • 响应报文:包含状态行(协议版本、状态码、服务信息)、响应头部空行响应数据4部分

HTTP 请求/响应的步骤:

  • 客户端连接到服务器:建立TCP连接
  • 发送HTTP请求:客户端向服务端发送一个请求报文
  • 服务器接受请求并返回HTTP响应
  • 客户端显示内容
  • 释放TCP连接

例如:一个面试官经常考的一个问题,在浏览器地址栏里面输入URL,按下回车后会经历哪些流程

  • 域名解析:浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
  • 建立TCP连接:解析IP地址之后,该IP地址与服务器端的默认的端口80构成套接字浏览器与服务器之间建立TCP连接。
  • 浏览器发送HTTP请求:浏览器构建HTTP请求报文,通过TCP协议传送到服务器的指定端口。
  • 服务器对浏览器做出响应: 服务器处理HTTP请求,并返回响应报文。
  • 浏览器解析渲染页面:解析HTML文档,构建DOM树、Render树、布局、绘制、显示。
  • 释放TCP连接
HTTP请求报文格式

在这里插入图片描述

  • 请求行:包括请求方法(常见的有GET与POST)、URL、HTTP协议及版本
  • 请求头部:如果客户端还需要携带请求的其他信息,就可以写在请求头部。
    常见的请求头字段的含义:
    • Host : 表示服务器的域名以及服务器所监听的端口号
    • User-Agent:代表用户使用的客户端(一般来说是代表浏览器的字符串)
    • Accept: 表示客户端可以接受的返回资源的类型,* 表示所有类型
    • Accept-Charset:表示客户端可以接受的字符集
    • Accept-Language:表示客户端可以接受的语言
    • Connection:表示客户端与浏览器之间的连接类型。(长连接使用keep-alive)
    • Cookie:当前页面设置的任何Cookie
    • Referer:发出请求的页面的URL
    • Origin:发起一个针对跨域资源共享的请求。表明来自哪里的跨域。
  • 空行:通过空行告诉服务器请求头部到此为止
  • 请求数据
    • 若请求方法是GET,那么此项为空,没有数据

    • 若请求方法是POST,则通常来说这里放置要提交的数据

      比如使用POST方法来提交一个表单,其中user字段中的数据为“admin”,password字段为123456,那么这里的请求数据就是user=admin&password=123456,使用&来连接各字段。

      来看一个POST请求的例子:
      在这里插入图片描述
      上面的POST方法,它的请求URL段中一般没有参数,参数放在报文体(请求数据)中。而GET方法直接放在URL中,报文体则为空。

HTTP响应报文格式

在这里插入图片描述

  • 状态行:包括协议版本、状态码、其他服务信息

  • 响应头部:用于描述服务器的基本信息,以及数据描述。服务器通过这些描述信息,可以通知客户端如何处理响应的数据

    常见的响应头字段含义:

    • Allow:服务器接受哪些请求方法
    • Access-Control-Allow-Origin:表示允许跨域的访问。可以设置为上面origin的地址(设置为*表示允许所有来源访问)
    • Content-Type:表示后面的文档类型。
    • Date: 生成响应的时间
    • Refresh:服务器通过这个头字段告诉浏览器多久刷新一次
    • Set-Cookie: 设置和页面关联的Cookie
    • Server:服务器的名字
  • 空行 :表示响应头部到此为止

  • 响应数据: 响应体就是响应的消息数据,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

    看一个实例:
    在这里插入图片描述

HTTP头域

HTTP头域包括通用头域请求头域响应头域实体头域

  • 通用头域:通用头域包含请求和响应消息都支持的头域。如: Cache-Control:指请求与响应遵循的缓存机制、 Date:表示消息发送的时间
  • 请求头域: 是请求头部中独有的。如上面出现的Host、Cookie、Referer等
  • 响应头域:是响应头部中独有的。如set-cookie
  • 实体头域:请求消息和响应消息都可以包含实体信息,如Allow、Content-type、Content-Encoding 等

即请求头部与响应头部中,可以包含通用头域与实体头域。

HTTP请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

  • GET : 最常用的一种,用于从服务器上“得到”某个资源
  • HEAD:跟GET一样,也是请求服务器资源,但是只要响应的Headers,不常用
  • POST:往服务器上写入数据(如提交表单信息),跟GET作用相反
  • PUT:也是写入数据,通常是PORT创建新数据,PUT用来更新已有数据
  • DELETE : 删除服务器上的数据
  • 其他还有TRACE、OPTIONS、CONNECT

(关于GET与POST的“区别下篇再说”)

HTTP状态码
  • 1XX(信息)— 表示请求已接受,继续处理

  • 2XX(成功) — 表示请求已经被成功接受

  • 3XX(重定向)— 要完成请求必须进行附加操作

  • 4XX(客户端错误) — 请求有语法错误或请求无法实现

  • 5XX(服务器端错误)— 服务器处理某个正确的请求时发生错误

    常见的状态码:

    • 200 客户端请求成功
    • 301 永久重定向(请求的资源已被永久的移动到新URI)
    • 302 临时重定向 (资源只是临时被移动。客户端应继续使用原有URI)
    • 304 所请求的资源为修改,服务器不会返回任何资源
    • 404 资源不存在
    • 500 服务器发生不可预期的错误
    • 503 服务器暂时不能处理当前的客户端请求,一段时间恢复

参考链接:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值