Http 协议的简单介绍

时间:2021-05-15 05:05:30
第一篇博客中简单的使用HttpURLConnection进行操作, 本篇文章会简单介绍HTTP协议特点、2中报文的格式以及工作原理
一、Http简介

HTTP (HyperText Transfer Protocol)超文本传输协议, 一种应用层面向对象的协议.


1、HTTP URL格式: http://host[":"post][abs_path]
     http:表示通过http协议来定位网络资源
     host:主机域名或者IP地址
    post:指定的端口号
    abs_path:指定请求资源的URL

2、其主要特点有:
   (1)支持c/s 模式(客户端/服务器)
   (2)简单快捷:客户端向服务器请求时,需传递请求方法和URL路径
   (3)灵活:HTTP可传递任意类型的数据对象,通过Content-type进行标记
   (4)无连接:每次连接只处理一个请求,服务器处理并收到客户应答后断开连接
   (5)无状态:协议对事务处理没有记忆能力

3、 主要有2中报文:请求报文和响应报文


二、HTTP请求报文

1. 请求报文的组成
    请求行(request line)
    请求头部(header)
    空行(blank line)
    请求数据(request body)

(1)请求行: Method     Request-URL    HTTP-Version      CRLF
                      请求方法       URL                HTTP协议版本    回车换行

比如访问我第一篇博客的请求行:

 (Request-Line)  GET /weixin_39158738/article/details/74498471 HTTP/1.1


请求方法有如下:
     GET:  请求获取Request-URL 所标识的资源
     POST: 在Request-URL 所标识的资源后附加新的数据
    HEAD: 请求响应消息报头
    PUT:  请求服务器存储一个资源,并用Request-URL 作为其标识
    DELETE: 请求服务器删除Request-URL 标识的资源
    OPTIONS: 请求查询服务器的性能
    TRACE:   请求服务器收到的请求信息,主要用于测试或诊断
    CONNECT: HTTP/1.1协议中预留给能够将连接改管道方式的代理服务器


(2)请求头部:
由关键字/值组成  ":"分隔。

Host blog.****.net          //请求主机名
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0  //发送请求的浏览器类型,操作系统信息
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    //客户端可识别的内容类型列表
Accept-Language en-US,en;q=0.5         //浏览器所支持的语言
Accept-Encoding gzip, deflate          //客户端可识别的数据编码
Cookie bdshare_firstime=1496368632571; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1499673578,1499760385,1499851111,1499851922; uuid_tt_dd=5888471425311918955_20170602; __message_sys_msg_id=0; __message_gu_msg_id=0; __message_cnel_msg_id=0; Hm_lvt_20bba81dc5fa07f97ba1779a51ed918a=1497437217; __message_in_school=0; UM_distinctid=15d0d21cf4547-034204773eb4258-71216750-1aeaa0-15d0d21cf46a7d; CNZZDATA1260104973=855675826-1499160912-null%7C1499160912; uuid=6552725d-9c0c-4610-ae7c-f42ec11a1180; dc_tos=osz5cc; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1499857351; avh=74498471; dc_session_id=1499857356367
Connection keep-alive             //指定连接选项
If-None-Match W/"7294071e29dd1fed2a8d002b179282de"
Cache-Control max-age=0


(3)空行: 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。


(4)请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。


三、响应报文
1、响应报文的组成:
    状态行
    消息报头
    空行
    响应正文


(1)状态行: HTTP-Version  status-code    Reasion-phrase       CRLF
                       HTTP 版本    响应状态代码  状态代码的文本描述   回车换行
         eg: 访问第一个博客的时候出现: (Status-Line) HTTP/1.1 200 OK


常见的响应状态代码:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)


(2)响应报头: 通过":"分开的键值对
比如:
Server openresty                                                        //服务器用来处理请求的系统信息
Date Wed, 12 Jul 2017 10:59:31 GMT                //消息产生的时间和日期
Content-Type text/html; charset=utf-8             
Transfer-Encoding chunked
Connection keep-alive                                                //允许发送指定连接的选项
Keep-Alive timeout=20
Vary Accept-Encoding
Cache-Control private, max-age=0, must-revalidate   //缓存指令
Etag W/"7294071e29dd1fed2a8d002b179282de"
X-Powered-By PHP 5.4.28
Content-Encoding gzip                                           //响应的数据编码


(3)响应正文
服务端返回的数据


四、Http的工作原理

一次HTTP操作称为一个事务,其工作过程可分为四步:

(1)客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。

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

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

(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。


五、如何使用Firefox抓取请求报文以及响应报文
打开Firefox浏览器 -> Tools -> Add ons -> 在跳出来的页面搜HttpFox 进行安装
安装完毕之后点击重启浏览器 -> Tools -> Web development -> HttpFox -> Toggle HttpFox

ps:必须联网


下面有一张本地截图可供参考: 访问第一个博客的请求报文以及响应报文 http://blog.****.net/weixin_39158738/article/details/74498471

Http 协议的简单介绍


六、下篇预告:

        下一篇会介绍android HttpURLConnection如何获得请求报文以及响应报文  以及  JSON的简介和解析