超文本传输协议HTTP

 超文本传输协议HTTP是一个请求响应模式的无连接无状态的应用层协议,基于TCP连接。HTTP协议目前处于多个版本共存的状态,HTTP1.0、HTTP1.1和HTTP2.0。HTTP1.1主要是在1.0版本的基础上增加了一个长连接(keep-alive)特性,是目前使用最广泛的版本。

特点

 HTTP协议的主要特点如下:

  • 支持C/S模式:客户端浏览器通过URL向服务端Web服务器发送请求,服务端解析处理之后返回响应给客户端。
  • 简单快速:请求只需要给出请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,通信很快。
  • 灵活:HTTP允许传输任意类型的数据对象,正在传输的数据类型由Content-Type加以标记。
  • 无连接:限制每次连接只处理一个请求,服务器处理完客户端的请求并收到客户端的应答之后即断开连接,采用这种方式可以节省传输时间。从HTTP1.1开始,默认使用了长连接,即服务器需要等待一段时间后才断开连接,以保证连接特性,优化效率,但这个优化属于HTTP协议之外的内容。
  • 无状态:协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要之前的信息,则必须被重传。

HTTP请求结构

HTTP请求格式.jpg

HTTP响应结构

HTTP响应格式.png

请求/响应的步骤

  • 客户端连接到Web服务器
  • 发送HTTP请求
  • 服务器接收请求并返回HTTP响应
  • 释放TCP连接
  • 客户端浏览器解析HTML内容

响应状态码

  • 1xx:指示信息,表示请求已接收,继续处理
  • 2xx:成功,表示请求已被成功接收、理解、接受
  • 3xx:重定向,要完成请求必须进行更进一步的操作
  • 4xx:客户端错误,请求有语法错误或请求无法实现
  • 5xx:服务端错误,服务器未能实现合法的请求
状态码 信息 解释
200 OK 正常返回信息
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

GET请求和POST请求的区别

  • HTTP报文层面:GET请求信息放在URL,POST放在报文体中(安全性区别不大,URL有长度限制)
  • 数据库层面:GET符合幂等性(一次操作和多次操作结果一样)和安全性(对数据库的操作没有改变数据库中的数据),POST不符合。
  • 其他层面:GET请求可以被缓存、被存储,而POST不行。

 从HTTP标准来说,以上区别是存在的,但是从报文的角度来说,GET请求和POST请求没有本质区别,只要服务器支持,参数怎么传都无所谓。

  1. GET参数的写法并不固定。
  2. POST方法几乎不比GET安全多少(明文传输)。
  3. HTTP本身没有限制URL的长度,是浏览器和服务器基于性能和安全考虑限制的。
  4. POST报文不一定会发送两个TCP报文,这是部分浏览器和框架的行为。

Cookie和Session的区别

 HTTP是无状态的,Cookie和Session让HTTP具备了状态。

Cookie

 Cookie是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端。例如,客户端向一个支持Cookie的服务器发送用户名和密码后,服务器在响应的同时,会把这些信息放在Response header(Set-Cookie)中返回给客户端,客户端会把这些信息存放在统一的位置。当客户端再次请求时,会在Request header(Cookie)中把Cookie回发。服务器接收到后,会解析Cookie生成与客户端相对应的内容。

Session

 Session是服务器端的一种机制,在服务器上保存的信息(类似于hash的结构)。服务器解析客户端的请求中是否包含session id,如果存在session id,说明服务器以前已经为客户端创建过session,把这个session检索出来使用,如果检索不到,就新建一个session。如果客户端请求不包含session id,则为此客户端新建一个session,并生成一个对应的session id,在响应中会发给客户端进行保存。
 Session可以通过Cookie实现,即通过Cookie保存JSESSIONID。也可以通过URL回写来实现,服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,客户端点击任何一个链接都可以把JSESSIONID会发给服务器,但如果不是点击的而是输入的URL,Session是匹配不到的。

区别

  • 存放位置
  • Session相对更安全
  • 考虑到服务器性能开销,应使用Cookie

HTTPS

 HTTPS在HTTP协议和TCP协议之间增加了一个SSL(安全套接字层)或TLS(安全传输层),从而提供了保证交换数据隐私和数据完整性,以及网站服务器身份认证的功能。

SSL

 Security Sockets Layer,安全套接字层

  • 为网络通信提供安全及数据完整性的一种安全协议
  • 是操作系统对外的API,SSL3.0以后更名为TLS
  • 采用身份验证和数据加密保证网络通信的安全和数据的完整性

加密的方式

  • 对称加密,性能较高,安全性较低
  • 非对称加密,性能较低,安全性较高,能加密的长度有限
  • 哈希算法(摘要算法),将任意长度的信息转化为固定长度的值,算法不可逆
  • 数字签名:证明某个消息或者文件是某人发出/认同的
数字签名过程.png

HTTPS数据传输流程

 HTTPS采用了证书和加密结合的方式。


HTTPS数据传输过程.png

HTTP和HTTPS的区别

  • HTTPS需要到CA申请证书,HTTP不需要
  • HTTPS密文传输,HTTP明文传输
  • 连接方式不同,HTTPS默认采用443端口,HTTP使用80端口
  • HTTPS = HTTP + 认证 + 加密 + 完整性保护,较HTTP安全(SSL是有状态的)

HTTPS真的很安全吗

  • 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险;
  • 可以使用HSTS (HTTP Strict Transport Security)优化。

Socket

 本地进程可以用进程号PID唯一标识,网络进行需要IP + 协议 + 端口号来唯一标识。Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。Socket通信流程如下:


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

推荐阅读更多精彩内容

  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,865评论 0 3
  • 1. 简介 HTTP是位于应用层的一个无状态的协议,默认HTTP的端口号为80,HTTPS的端口号为443。HTT...
    谢朴欢阅读 1,587评论 1 1
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,222评论 0 7
  • 本文整理自MIN飞翔博客 [1] 1. 概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或...
    HoyaWhite阅读 2,674评论 2 20
  • 来了又走, 这里的常客和这个糟老头子, 嬉戏打闹 斗嘴皮子, 这个十几平米的店子, 填满了打游戏的呼喊声 香烟雾气...
    小昊昊同学阅读 650评论 0 0