对HTTP协议的理解

主要从两个角度来理解,计算机网络和前端的角度。
一、HTTP简介
在计算机网络协议的发展史中,目前主流的HTTP1.1依旧霸占着市场,新出的HTTP2.0正以兴起之势慢慢浮出水面,它在各大浏览器中的兼容性问题还得进一步解决。
HTTP协议又名超文本传输协议,只要用于从万维网服务器传输文本到本地浏览器的传送协议。它是一个基于TCP/IP的应用层协议,

http请求-响应模型

主要特点:
1.支持B/S和C/S模式;
2.限制每次连接只能处理一个请求。服务器处理完客户端的请求,并收到客户端的应答后,就断开连接;
3.HTTP允许传输任意类型的数据对象。传输的类型由content-type标记;
4.客户端向服务器请求服务时,只用发送请求方法和请求路径。也就是常说的输入一个url,并且告诉他我需要用get或者post方法传输。
5.HTTP是无记忆能力的协议,如果后面的处理需要前面的信息,则它必须重传。
二、计算机网络协议角度
HTTP/1.1
HTTP/1.1从1997年发布到现在,过了二十年,它仍旧是目前最流行的版本。
1.它最大的变化时引入了长连接,即TCP连接默认不关闭,不用再像HTTP/1.0那样需要申明connection:keep-alive,只有当客户端和服务器发现对方一段时间没有活动,才会关闭连接。
2.HTTP1.1还引入了管道机制,保证客户端可以同时发送多个请求,解决了客户端只能发送一个请求的窘境,大大提高HTTP协议的效率。
3.加入了content-length字段。既然现在TCP可以传送多个响应,势必要有一种机制,区分数据是属于哪一个响应的。content-length指定本次响应的数据长度。后面的字段就属于下一个响应了。
HTTP/2
2015年发布HTTP/2,它是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为帧。
1.多工工作方式。HTTP1.1只是解决了客户端一个只能发送一个请求的问题,而HTTP2则让服务器一个也能同时发送多个响应,即到了版本2,客户端和服务器都可以同时发送多个请求和响应,而且不用排队,避免了“”队列堵塞“”。
2.二进制协议。HTTP1.1的头部信息是文本,数据部分可以是文本,也可以是二进制编码,而HTTP2是彻底的二进制。
3.头信息压缩。HTTP2对每次的请求头采用gzip压缩,这样避免了每次请求头中重复出现相同的信息。
4.服务器主动推送。客户端向服务器请求资源A,服务器预测客户端可能需要B,顺便把B也推送给了客户端,避免了客户端多次请求。
HTTPS
HTTP协议因为是明文传输,未加密,极其不安全,于是网景公司设计了SSL协议,用于对HTTP协议传输的数据进行进行加密,从而诞生了HTTPS。后来SSL安全协议升级为了TSL协议,所以现在的HTTPS协议用的是TSL.
三、前端中的HTTP
状态码

请求方法Get和Post
GET请求实例:
1.0 GET http://weibo.com/signup/signup.php?inviteCode=2388493434
2.0 Host: weibo.com
3.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
POST请求实例:
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18
item=bandsaw 2647

区别
1.最直观的区别
就是GET把参数包含在URL中,POST通过request body传递参数。
2.GET请求会被浏览器主动缓存,POST不会。
3.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
4.GET请求在URL中传送的参数是有长度限制的,会受到URL长度的限制,一般URL最长为2KB,而POST没有限制。
5.GET安全性明显低于POST,因为参数在URL中的暴露。
6.GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
相同点:
它们都是HTTP协议中发送请求的方法,HTTP的底层是TCP/IP协议,因此GET和POST也是TCP/IP。
HTTP Hearder详解
HTTP协议采用了请求/响应模型,就整个网络资源传输而言,包括message-header和message-body两部分。先传递message-header,即httpheader消息。http header 消息通常被分为4个部分:general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为Request和Response两部分。
以新浪首页为例
General
Request URL :Client请求地址
Request Method:请求类型 get、post、put、delete等
Status Code:响应状态码 200、404、503等
Remote Address:域名对应的真实ip:port

实体

Request header
Accept:客户端/发送端能够接收的数据类型 text/html,application/xhtml+xml,application/xml; Accept-Encoding:浏览器可以支持的- web服务器返回内容压缩编码类型 gzip, deflate
Accept-Language:浏览器可接收的语言 zh-CN,zh;q=0.8
Cache-Control:请求和响应遵循的缓存机制,当前请求的Cache-Control不会影响另一个请求的缓存处理。private(默认)、no-cache、must-revalidate、max-age。这个参数有几种不同的使用场景:
打开一个新的窗口。private、no-cache、must-revalidate会重新请求服务器; max-age在超过时间年龄值时才会重新请求。
地址栏回车。private、must-revalidate只有第一次时会请求服务器; no-cache每次都会请求;max-age在超过时间年龄值时才会重新请求。
后退按钮。只有no-cache每次都重新请求服务器。
刷新。全部重新请求服务器
Connection: 是否保持与服务器的tcp长连接。keep-alive(默认)、close。Keep-alive代表服务会保留当前连接一段时间被其他请求重复使用;close代表请求之后关闭连接。
Content-Length: 请求体的长度
Content-Type: 请求内容的格式/类型 application/x-www-form-urlencoded application/json
Cookie: 客户端缓存的Cookie,在请求发送时会发送到服务端
Host: 请求的服务器域名
Referer: 当前请求的来源
User-Agent: 发出请求的客户端信息 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36


请求头

Response header
Cache-Control:请求和响应遵循的缓存机制
Connection:是否保持与服务器的tcp长连接。keep-alive(默认)、close。Keep-alive代表服务会保留当前连接一段时间被其他请求重复使用;close代表请求之后关闭连接。
Content-Type:响应内容的格式/类型text/html;charset=UTF-8标识返回的内容是文本类型,html格式。
Content-Encoding:web服务器支持的返回内容压缩编码类型 gzip
Content-Language:响应体的语言
Content-Length:响应体的长度
Date: 消息发出时间(GMT) Sat, 23 Apr 2016 07:47:54 GMT GMT+8=北京时间
Expires: 响应过期时间
Transfer-Encoding:文件传输编码chunked标识传输内容长度不确定,如果以gzip方式输出时,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。
Vary: 提示使用缓存响应还是从原始服务器请求,即当缓存中存在一个未过期的响应是否能被后续的请求服用,Accept-Encoding、User-Agent。如果vary的值中返回了User-Agent,那么通过不同的浏览器打开相同的页面都会重新请求服务器;如果Vary中没返回User-Agent,那么客户端缓存把它看成是相同的页面,相同的请求,直接给用户返回缓存的内容;如果返回的值是Accept-Encoding,将请求头信息中的Accept-encoding字段的值(gzip等)作为缓存的key;如果vary的值为*表示缓存不会去做判断;


额外:
Form data(post)
这个版块是在Request Method为post请求类型时显示的post表单数据。
Query String Parameter(get)
这个版块是在Request Method为get请求类型时向服务端传递的请求参数。

具体reasponse和Requese的参数解释参看:
https://kb.cnblogs.com/page/92320/
HTTP状态码参看
http://tool.oschina.net/commons?type=5

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,693评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,372评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,226评论 3 82
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,866评论 0 3
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,855评论 2 61