HTTP协议

HTTP(超文本传输协议) 是基于TCP/IP协议的应用层协议,通信方式为“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。

HTTP协议特点

  • 简单快速:客户端向服务器请求服务时,只需要传送请求方法和路径。由于HTTP协议简单,因而服务器规模较少,通信速度快。
  • 灵活:HTTP允许传输任意类型的数据,类型由Content-Type标记。
  • 无连接:每次连接只处理一个请求服务,服务器应答完毕就断开连接。
    HTTP/1.1版本通过Connection:keep-alive 进行的长连接实质是TCP层的长连接,一次TCP连接可进行多个HTTP请求,但应用层HTTP每次请求仍单独发送header,从应用层角度说仍是无连接。
  • 无状态:HTTP的每次请求都是独立的。缺点是需要重复的数据需要重新请求传输,优点是服务器应答效率高。

请求报文和响应报文

请求报文分为:请求行、请求报头、空行、请求数据。如下:

POST http://meme.php/home/user/login HTTP/1.1 //请求行:方法名 Request-URI 协议版本    
Host: 114.215.86.90                                 
Cache-Control: no-cache                                 
Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed     
Content-Type: application/x-www-form-urlencoded     
    
tel=13637829200&password=123456                     

如上1行为请求行,2-5行为请求报头,6为空行(回车符/换行符),7行为请求数据。

响应报文分为:状态行、响应报头、空行、响应数据。如下:

HTTP/1.1 200 OK                                                         
Date: Sat, 02 Jan 2016 13:20:55 GMT                                 
Server: Apache/2.4.6 (CentOS) PHP/5.6.14                                    
X-Powered-By: PHP/5.6.14                                            
Content-Length: 78                                      
Keep-Alive: timeout=5, max=100                      
Connection: Keep-Alive                                  
Content-Type: application/json; charset=utf-8           

{"status":202,"info":"\u6b64\u7528\u6237\u4e0d\u5b58\u5728\uff01","data":null}

如上 1行为状态行,2-8行为响应报头,9行为空行,10行为响应数据。

空行处的回车符或换行符用于告知服务器以下部分不会有请求报头。

HTTP常用方法

  • GET:获取Request-URI标识的资源;
  • POST:获取在Request-URI标识的资源后附加新的数据;
  • HEAD:获取Request-URI标识的资源的响应报头数据;
  • PUT:请求服务器存储资源数据,以Request-URI为资源标识;
  • DELETE:请求服务器删除标识为Request-URI的资源;
  • TRACE:请求服务器回执请求信息,用于测试或诊断;

Get与Post区别

本质就是参数是放在请求行中还是放在请求数据中。当然无论用哪种都能放在请求行中,但一般在请求行中放一些发送端的常量。

  • GET在请求URL地址后面以?形式添加参数,多个参数以&拼接。POST通过数据包形式上传,也可像GET那样传参。
  • GET提交数据长度有上限,因浏览器对URL的长度有限制。POST提交数据无限制;
  • GET有安全隐患,传递参数在URL中可见,且可被浏览器保存记录。POST不会被缓存,参数隐藏在请求报文的请求数据中。

HTTPS和HTTP的区别

HTTP是应用层协议,TCP是传输层协议。在应用层和传输层之间,增加了一个安全套接层SSL/TLS,就是Https的产生。

  • https协议需要到CA申请证书。
  • http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS主要作用:

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器;(验证证书)
  • 加密数据以防止数据中途被窃取;(加密)
  • 维护数据的完整性,确保数据在传输过程中不被改变。(摘要算法)

HTTPS请求步骤

一个HTTPS请求实际上包含了两次HTTP传输,如下:

  1. 客户端向服务器发起Http请求,连接到服务器的443端口;
  2. 服务器将非对称加密的密钥对的公钥发送给客户端;
  3. 客户端检验服务器传回的公钥(即数字证书)的合法性。
    若公钥合格,客户端生成一个随机值的对称加密的密钥,即客户端密钥,并用服务器公钥加密该密钥;
  4. 客户端发起HTTPS中的第二个Http请求,将非对称加密后的客户端密钥发送给服务器;
  5. 服务器收到客户端发送的密钥后,用服务器的非对称加密的私钥解密,得到客户端密钥;
  6. 服务器用客户端密钥加密数据,并发送给客户端;
  7. 客户端接收服务器返回的数据,并用客户端密钥解密,最终得到服务器发送的数据。

服务端密钥用来非对称加解密客户端密钥,客户端密钥用来对称加解密数据。

我们可以看到服务器端会有一个证书,在交互过程中客户端需要去验证证书的合法性,对于权威机构颁发的证书当然我们会直接认为合法。对于自己造的证书,那么我们就需要去校验合法性了。

Cookie和Session

Cookie是服务器生成的,存储在客户端的用于辨识用户身份。Session是存储在服务器用于跟踪用户状态。

  1. 客户端将身份信息以报文形式发送到服务器;
  2. 服务器验证客户端身份信息,并将认证状态与Session ID绑定后记录在服务器,通过响应报文的Set-Cookie传给客户端;
  3. 客户端接收服务器传回的Session ID,将其作为Cookie 保存在客户端。后续向服务器发送请求,会自动发送Cookie,服务器通过检验Session ID区分用户身份;

Cookie和Session的区别:

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

推荐阅读更多精彩内容

  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,865评论 0 3
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,222评论 0 7
  • 本文整理自MIN飞翔博客 [1] 1. 概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或...
    HoyaWhite阅读 2,674评论 2 20
  • HTTP是面向事务的,即它传输的数据是一个整体,要么全部收到,要么全部收不到。 每一次HTTP请求就需要建立一次T...
    脆皮鸡大虾阅读 811评论 0 0
  • 任何一个技术和知识在了解了大概之后还需要在学习和实践中不断总结、思考才能真正掌握,变成自己的东西。用自己的方式分析...
    Bobby0322阅读 649评论 1 5