Http协议的格式及实例

协议

Http协议位于网络五层结构的最上层应用层。它建立在TCP协议之上,是个无状态的协议,典型的应用是网络浏览器以及移动端数据传输。本文将介绍Http请求的格式,并对请求数据的各部分做一个详细介绍。

处于不同层次的网络协议

Http协议包括多个方法:Get,Post,Put,Delete,Head,Patch,Options等。我们重点关注最常用的Get和Post请求。

一次请求包括两个过程,Request过程和Response过程,Request过程发出数据请求,携带请求的各项参数,Response过程返回请求的数据。

Http Request

Http Request包括三部分:请求行,请求头和请求体。

第一行是请求行,格式是:方法+路径+Http版本,以空格分隔。从第二行开始是请求头,由若干个键值对构成,每个键值对一行。请求头结束后空一行,接着是请求体。

POST请求的参数放在请求体里,GET请求没有请求体,请求的参数以键值对的形式存放在path里面。请求头里的键值对包括预定义键值对和自定义键值对,键值对内容包括请求的Host,User-agent,编码方式,请求体的类型,请求体的长度,分隔符等等信息,大部分都是可选的,我们也可以随意添加自定义的键值对来满足某些需求。下面是一个Post请求的实例:

Post Request实例
Http Response

Http Response也包括三部分:响应状态行,响应头和响应体。

第一行是响应状态行包括Http版本+响应状态,以空格分隔。从第二行开始是响应头,包含若干个键值对,每个键值对占一行。后面空一行,接着是响应体。

Http Response实例

请求体可以包括多个part,通过header里面的分隔符分隔,比如音频上传时利用请求体里两个part分布存储文件类型和音频数据。

含多个part的Request Body
User-agent键值对

Http Request Header里有个user-agent字段,是用来存放发起请求的客户端或者浏览器的标识信息的,比如浏览器的名称版本,操作系统的名称版本,客户端的名称版本等。

浏览器的user-agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36

webview原始user-agent:
Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; MI 3 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

我们自己在后面追加
Chunyuyisheng/7.3.0 (iPhone; iOS 8.4; Scale/2.00) ,注意第一个有空格,方便隔开原始字符串,以便服务器正则判断

最后生成类似 下面的字符串:
Mozilla/5.0 (Linux;
U; Android 4.2.1; zh-cn; MI 3 Build/JOP40D) AppleWebKit/534.30 (KHTML, like
Gecko) Version/4.0 Mobile Safari/534.30 Chunyuyisheng/7.3.0 (iPhone; iOS 8.4;
Scale/2.00)

user-agent就是一个存放发起请求的端一些附加信息的地方,至于具体写入啥是由客户端和服务器协商决定的,没有硬性标准。

Cookie键值对

Cookie键值对存储的是一些标志用户身份或设置的信息,如session ID,language等。用户通过浏览器首次访问某个网站的时候,服务器生成一个cookie,并把它放在http响应的header里面,下次再次访问该网站的时候,浏览器会在http请求的header里面带上这个cookie值,服务器可以建立一个cookie值到用户表的映射,然后就可以利用这个识别用户。

最基本的Cookie:
==Server -> User Agent ==
Set-Cookie: SID=31d4d96e407aad42
==User Agent -> Server ==
Cookie: SID=31d4d96e407aad42

指定Cookie的Path和Domain属性
==Server -> User Agent ==
Set-Cookie: SID=31d4d96e407aad42; Path=/; Domain=example.com
==User Agent -> Server ==
Cookie: SID=31d4d96e407aad42

包含多个Cookie,一个名字是SID,另一个名字lang,名为SID的Cookie指定了Path,Secure和HttpOnly属性;名为lang的Cookie指定了Path和Domain属性:
==Server -> User Agent ==
Set-Cookie: SID=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Path=/; Domain=example.com
==User Agent -> Server ==
Cookie: SID=31d4d96e407aad42; lang=en-US

指定名为lang的Cookie的过期时间:
==Server -> User Agent ==
Set-Cookie: lang=en-US; Expires=Wed, 09 Jun 2021 10:18:14 GMT
==User Agent -> Server ==
Cookie: SID=31d4d96e407aad42; lang=en-US

服务器通过给名为lang的Cookie指定一个过去的时间来删除该Cookie:
==Server -> User Agent ==
Set-Cookie: lang=; Expires=Sun, 06 Nov 1994 08:49:37 GMT
== User Agent -> Server ==【客户端发给服务器的Cookie不再包含lang】
Cookie: SID=31d4d96e407aad42

Third-Party Cookies
如果用户访问某个网页,该网页嵌入了三方广告,打开网页的时候会向广告服务区发送请求,广告服务器返回的Response里会返回一个Cookie,下次用户打开其他网页的时候,如果该网页嵌入了同一个第三方广告平台,那请求广告内容的Request里会自动把之前返回的Cookie添加进去,从而能让广告服务器识别出该用户,根据之前浏览的内容给用户推荐相应的广告。这就是为什么能给用户展示之前访问内容相关的广告。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,100评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,862评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,993评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,309评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,303评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,421评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,830评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,501评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,689评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,506评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,564评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,286评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,826评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,875评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,114评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,705评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,269评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,575评论 18 139
  • 一、基础知识篇:Http Header之User-AgentUser Agent中文名为用户代理,是Http协议中...
    iPhone阅读 15,611评论 0 13
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,855评论 0 3
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 3,434评论 0 20
  • ……#@*&……&(+——(……&*!¥¥…… 电梯飞速下降,如直坠的流星。 崔含生在这个闭塞的空间里余味犹存地回...
    prIZMER阅读 252评论 0 1