android开发杂识我爱编程

HTTP,请求消息,响应消息,Cookie(详细总结)

2016-04-04  本文已影响2959人  zhuanghongji

一、What is HTTP ?

1. 协议概述

HTTP (HyperText Transfer Protocol,超文本传输协议) 是互联网上应用最为广泛的一种网络协议,设计 HTTP 最初的目的是为了提供一种发布和接收HTML页面的方法

HTTP 协议中现今广泛使用的一个版本是1999年6月公布的 HTTP1.1 ,而2015年5月发表的HTTP/2 取代 HTTP1.1 成为 HTTP 新的实现标准

通常,由 HTTP 客户端发起一个请求,创建一个到服务器指定端口(默认是80端口 )的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如 HTTP/1.1 200 OK ,以及返回的内容,如请求的文件、错误消息、或者其它信息

二、请求信息 (Request Message)

发出的请求信息包括以下几个:

请求行和标题必须以<CR><LF>作为结尾
空行内必须只有<CR><LF>而无其他空格
在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的

1. 请求方法

HTTP/1.1 中共定义了8种方法(动作)来以不同方式操作指定的资源

** 方法名称是区分大小写的 **:

  1. HTTP服务器至少应该实现 GETHEAD 方法,其他方法都是可选的
  2. 安全超文本连接协议使用 https:// 代替 http://

2. 状态码

所有HTTP响应的第一行都是状态行,依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:

3. 举个栗子

下面是一个HTTP客户端与服务器之间会话的例子,运行于 www.google.com,端口 80

客户端请求:

GET / HTTP/1.1
Host: www.google.com

末尾有一个空行
第一行:指定方法、资源路径、协议版本
第二行:在1.1版里必带的一个header作用指定主机

服务器响应:

HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive

(紧跟着一个空行,并且由HTML格式的文本组成了Google的主页)

4. 通用头域

通用头域包含请求和响应消息都支持的头域,通用头域包含:

上面总结的是“通用头域”,我们先来看下一个典型的请求信息:

GET / HTTP/1.1
Host: baidu.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: BDUSS=aaaaa; BAIDUID=bbbbb:FG=1; PSTM=1459694957; BDRCVFR[loys_9vxHFf]=mk3SLVN4HKm; BIDUPSID=ccccc; pgv_pvi=9192257536; pgv_si=s6465831936; H_PS_PSSID=ddddd

上面的第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。接下来,我们来分析下“ 请求头域 ”

5. 请求头域

三、响应消息(Response Message)

1. 响应头

我们先来看一个“请求百度首页”的响应头:

HTTP/1.1 200 OK
Date: Sun, 03 Apr 2016 15:44:32 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
Cache-Control: private
Expires: Sun, 03 Apr 2016 15:44:32 GMT
Content-Encoding: gzip
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 2
BDQID: 0xb2584dee0005f8ac
BDUSERID: 801624962
Set-Cookie: BDSVRTM=147; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=aaaaa; path=/; domain=.baidu.com

2. 实体

请求消息响应消息 都可以包含实体信息,实体信息一般由 实体头域实体 组成
实体头包括:

Allow Content- Base Content-Encoding
Content-Language Content-Length Content-Location
Content-MD5 Content-Range Content-Type
Etag Expires Last-Modified
extension-header

3. 响应头

四、Cookie

某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)

1. 分类

Cookie 总是保存在客户端中,按在客户端中的存储位置可分为

所以,按存在时间,可分为 非持久Cookie持久Cookie

2. 用途

因为 HTTP 协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式 Web 应用程序的实现。Cookie就是用来绕开 HTTP 的无状态性的“额外手段”之一。服务器可以设置或读取 Cookies 中包含信息,借此维护用户跟服务器会话中的状态

3. 应用场景:

4. Cookie的缺陷

5. 识别功能

参考文章:
[1] 维基百科:超文本传输协议
[2] 维基百科:Cookie
[2] madfrag:HTTP响应头信息和请求头信息详解

上一篇 下一篇

猜你喜欢

热点阅读