深入浅出Http协议

Http协议概念介绍

Http(Hyper Transfer Text Protocol),即超文本传输协议,是客户端浏览器或其他程序与web服务器之间的应用层通信协议。在Internet上的Web服务器存放的都是超文本信息,客户端需要通过Http协议传输需要获取的超文本信息。

Http包含命令和传输信息,不仅可以用于web访问,也可以用于其他因特网/内联网系统之间的通信,从而实现各类应用资源超媒体访问的集成。

Http协议特点

  1. 支持客户/服务器模式:Http协议由两部分程序实现, 一部分是客户端程序,另一部分是服务器程序,通过交换Http报文进行会话。
  2. 简单快速:客户端向服务器请求服务,只需传递请求方法和路径。由于Http协议比较简单,故Http服务器的程序规模较小,通信速度快。
  3. 灵活:Http允许传输任意类型的数据对象,正在传输的类型由Content-Type标记(请求头参数)。
  4. 无连接:Http协议限制每次连接只能处理一个请求。服务端处理用户请求,并受到用户应答后,即断开连接,这种方式可以节省传输时间。
  5. 无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即客户端给服务器发送 HTTP 请求之后,服务器根据请求,向客户端发送数据。但是,发送完并不会记录任何信息。这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。

Http协议工作模式

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP请求/响应的步骤如下:

  1. 客户端连接到web服务器
    一个Http客户端(通常是浏览器)与Web服务器的HTTP端口(默认为80)建立一个TCP(套接字)连接。
  2. 客户端向服务器发送Http请求
    通过TCP(套接字),客户端向web服务器发送一个Http请求报文,一个Http请求报文由请求行、请求头部、空行和请求数据4部分组成。
  3. 服务器接受请求并返回Http响应报文
    web服务器解析请求报文,并定位请求资源。服务器将资源填充到TCP套接字,最后由客户端读取。一个响应报文由状态行、响应头部、空行和响应数据4部分组成。
  4. 释放TCP连接
    Web服务器主动关闭TCP套接字,释放TCP连接;客户端被动关闭TCP套接字,释放TCP连接。
  5. 客户端浏览器解析HTML内容
    客户端(浏览器)首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据,根据Html语法对其进行格式化,并在浏览器窗口中显示。

Http协议之请求头

Http请求头由四部分组成,分别为请求行、请求头、空行和请求正文等。

请求行

请求行主要由请求方法字段、Url字段和Http协议版本字段三部分组成,他们之间用空格分隔。如GET index.html 1.1。

  1. 请求方法主要由八种,分别为GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT和OPTIONS等。具体如下:
    GET:向特定的资源发出请求。
    POST:向指定资源提交数据进行请求(例如提交表单或者上传文件),数据被包含在请求数据中。POST请求可能导致新的资源创建或者已有资源被修改。
    HEAD:向服务器请求与GET请求相一致的相应,但相应体不会被返回。HEAD方法可以在不必传输整个相应内容的时候使用,可以获取包含在相应消息头中的元信息。
    PUT:向指定资源位置上传最新内容。
    DELETE:请求服务器删除Request-Uri所标识内容。
    TRACE:回显服务器收到的请求,主要用于测试或诊断。
    OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。

请求头

请求头由key-value键值对组成,每对构成一行,键和值由:分隔。请求头通知服务器有关客户端请求的信息。

典型的请求头有Host、User-Agent、Accept、Accept-Encoding、Accept-Language、Connection、Referer、Cookie等。此外访问一些Url的时候还会有一些其他头信息,此处不一一列举。

  1. Host:
    作用:用于指定被请求资源的Internet主机和端口号,通常由Http Url中提取出来。
    1)host字段可以是域名,也可以是IP地址,host字段域名/IP后可跟端口号,例如www.baidu.com:8080
    2)http协议1.0版本中host字段可以缺失,http协议1.1版本中host字段不可缺失,但是值可以为空。
    3)http相应头中不包含host字段。
  2. User-Agent:
    作用:通知服务器,客户端所使用的操作系统类型以及浏览器的名称和版本。
  3. Accept:
    作用:通知服务器端,浏览器端可以接受的媒体类型。
  4. Accept-Encoding:
    作用:申明浏览器端可以接受的编码,通常指定压缩方法,是否支持压缩。
  5. Accept-Language:
    作用:申明浏览器端可以接受的语言,如big5、gb2312或gbk等。
  6. Connection:
    作用:
    1)值为keep-alive,当一个request完成后,客户端和服务器之间用于传输Http数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这条已经建立的连接。
    2)值为close,当一个request完成后,客户端和服务器之间用于传输Http数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。
  7. Referer:
    作用:浏览器向服务器发送请求时,Referer会告诉服务器是从哪个页面链接过来的,服务器根据Referer值获得一些有用信息。比如从百度上链接到我的服务器,我的服务器就可以从Http Referer中统计每天有多少请求来自于百度。
  8. Cookie:
    作用:用来存储一些用户信息以便服务器辨别用户身份,比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证你是否是合法用户。

请求正文

请求头与请求正文之间有一行空行,这个空行表示请求头已经结束,接下来是请求正文。请求正文主要包含用户提交的查询字符串信息和表单数据等,以key-value的形式存放。

Http协议之响应头

Http响应头由四部分组成,分别为状态行、响应头、空行和响应正文等。

状态行

状态行主要由三部分组成,分别为Http协议版本号、状态码和状态代码的文本描述等。如HTTP/1.1 200 OK。

状态码由三位数字组成,其中第一个数字定义了响应的类别,且有五种取值的可能。具体信息如下:
1**:表示请求已经接受,可以继续处理。
2**:表示请求已经被成功接受、理解和处理。
3**:表示重定向,若想完成请求需要进一步请求,一般接下来的请求链接为响应头Location字段对应的值。
4**:客户端错误,指请求出现语法错误或者请求无法达成。
5**:服务器端错误,表示服务器无法对请求做出处理。

常见状态码以及状态描述有如下几个:

200:客户端请求成功。
400:客户端请求出现语法错误,服务器端不能理解该请求。
401:指请求未经授权,该状态码需要与www-Authenticate配合使用。
403:服务器收到请求,但是拒绝提供服务。
404:请求资源未找到或者不存在,例如输入了错误的Url则会返回404状态码。
500:服务器发生不可预期的错误。
503:指服务处于不可用状态。

响应头

响应头由key-value键值对组成,每对构成一行,键和值由:分隔。响应头是服务器对客户端通知的响应信息。
典型的响应头有Server、Content-Encoding、Content-Type、Content-Length、Connection、Date、Expires、Location、Refresh、Set-Cookie、WWW-Authenticate等。此外还会有一些其他响应头信息,此处不一一列举。

  1. Server:
    作用:指服务器名字,一般由Web服务器自己设置。
  2. Content-Encoding:
    作用:指文档的编码。
  3. Content-Type:
    作用:指文档的MIME类型。默认为text/plain,由servlet设置。
  4. Content-Length:
    作用:指响应内容的长度。
  5. Connection:
    作用:同请求头Connection。
  6. Date:
    作用:指服务器返回内容的时间,由servlet设置。
  7. Expires:
    作用:指文档的过期时间(缓存时间)。
  8. Location:
    作用:表示客户端应该去何处提取文档,该字段与状态码302配合使用。
  9. Set-Cookie:
    作用:设置与页面相关联的cookie。
  10. WWW-Authenticate:
    作用:指客户端应该在Authorization头中提供的类型信息,与401状态码配合使用。

响应正文

响应头与响应正文之间有一行空行,这个空行表示响应头已经结束,接下来是响应正文。响应正文是服务器针对客户端提交的请求返还给客户端的文本信息,通常指html代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值