http学习笔记

一、TCP

1.1 TCP/IP 的分层管理

TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。

应用层

应用层决定了向用户提供应用服务时通讯的活动。有FTP,DNS服务和HTTP协议。

传输层

传输层对上层应用层,提供网络连接中的两台计算机之间的数据传输。
有两个协议,TCP(传输控制协议)和UDP(用户数据报协议)

网络层

网络层用来处理在网络上流通的数据包。该层规定了通过怎样的路径到达对方计算机,并把数据包给对方。

数据链路层

用来处理连接网络的硬件部分。


TCP/IP通讯传输流

1.2 TCP三次握手


不同协议的通讯过程

二、HTTP报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。
HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。

2.1 报文结构

  • 请求行
    包含用于请求的方法,请求 URI 和 HTTP 版本。
  • 状态行
    包含响应结果的状态码,原因短语和HTTP版本。
  • 首部字段
    包含表示请求和响应的各种条件和属性的各类首部。
    一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
  • 其他
    可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。

2.2 HTTP状态码

  • 2XX 成功
    200 OK
    204 No Content 返回的响应报文中不含实体的主体部分。
    206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。
  • 3XX 重定向
    301 Moved Permanently 永久性重定向
    302 Found 临时性重定向
    303 See Other 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。
    304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存
  • 4XX 客户端错误
    4XX 的响应结果表明客户端是发生错误的原因所在。
    400 Bad Request 该状态码表示请求报文中存在语法错误
    401 Unauthorized 该状态码表示发送的请求需要有通过 HTTP 认证
    403 Forbidden 未获得文件系统的访问授权
    404 Not Found 该状态码表明服务器上无法找到请求的资源
  • 5XX 服务器错误
    500 Internal Server Error 表明服务器端在执行请求时发生了错误
    503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护

三、HTTP首部

3.1 4 种 HTTP 首部字段类型

  • 通用首部字段(General Header Fields)
    请求报文和响应报文两方都会使用的首部。
  • 请求首部字段(Request Header Fields)
    从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
  • 响应首部字段(Response Header Fields)
    从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
  • 实体首部字段(Entity Header Fields)
    针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

3.2 HTTP/1.1 首部字段一览

  • 通用首部字段
    Cache-Control 控制缓存的行为
    Connection 逐跳首部、连接的管理
    Upgrade 升级为其他协议
  • 请求首部字段
    Accept 用户代理可处理的媒体类型
    Accept-Charset 优先的字符集
    Accept-Encoding 优先的内容编码
    Accept-Language 优先的语言(自然语言)
    If-Match 比较实体标记(ETag)
    If-None-Match 比较实体标记(与 If-Match 相反)
    If-Modified-Since 比较资源的更新时间
    If-Unmodified-Since 比较资源的更新时间(与 If-Modified-Since 相反)
    User-Agent HTTP 客户端程序的信息
  • 响应首部字段
    ETag 资源的匹配信息
    Location 令客户端重定向至指定 URI
  • 实体首部字段
    Content-Type 实体主体的媒体类型
    Expires 实体主体过期的日期时间
    Last-Modified 资源的最后修改日期时间

3.3 通用首部字段

3.3.1 cache-control 缓存控制

no-cache 无 强制向源服务器再次验证
no-store 无 不缓存请求或响应的任何内容

3.3.2 Connection

  • 控制代理不再转发的首部字段
  • 管理持久连接
  • 控制代理不再转发的首部字段

3.3.3 Upgrade

指定一个完全不同的通信协议。

3.4 请求首部字段

3.4.1 Accept

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。

  • 文本文件
    text/html, text/plain, text/css ...
    application/xhtml+xml, application/xml ...
  • 图片文件
    image/jpeg, image/gif, image/png ...
  • 视频文件
    video/mpeg, video/quicktime .

3.4.2 If-Match

形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
If-Match 与 ETag 一致,服务器才接受请求。If-None-Match 则相反

3.4.3 If-Modified-Since

如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求
If-Unmodified-Since 则相反

3.4.4 User-Agent

首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。

3.5 响应首部字段

3.5.1 ETag

首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。

3.5.2 Location

使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源。
该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。

3.5.2 Server

首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。

3.6 实体首部字段

3.6.1 Content-Type

首部字段 Content-Type 说明了实体主体内对象的媒体类型。

3.6.2 Expires

首部字段 Expires 会将资源失效的日期告知客户端。

3.6.3 Last-Modified

首部字段 Last-Modified 指明资源最终修改的时间。

3.6.4 Set-Cookie

当服务器准备开始管理客户端的状态时,会事先告知各种信息。

3.6.5 Cookie

首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。

3.6.6 X-XSS-Protection

首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。

四、HTTP VS HTTPS

4.1、HTTP的缺点

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

4.2 HTTPS的缺点

  • HTTPS 比 HTTP 要慢 2 到 100 倍;
  • 需要购买证书

五、web的攻击技术

5.1 跨站脚本攻击

  • 特点:
    能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到Cookie资料窃取、会话劫持、钓鱼欺骗等攻击。
  • 原因:
    a:Web浏览器本身的设计不安全。浏览器能解析和执行JS等代码,但是不会判断该数据和程序代码是否恶意。
    b:输入和输出是Web应用程序最基本的交互,而且网站的交互功能越来越丰富。如果在这过程中没有做好安全防护,很容易会出现XSS漏洞。
  • 防御XSS攻击
    HttpOnly 浏览器禁止页面的JS访问带有HttpOnly属性的Cookie。
    输入检查 XSS Filter 对输入内容做格式检查,类似“白名单”,可以让一些基于特殊字符的攻击失效。
    输出检查 在变量输出到html页面时,可以使用编码或转义的方式来防御XSS攻击
    XSS的本质是“HTML注入”

5.2 CSRF攻击跨站请求伪造

本质:重要操作的所有参数都是可以被攻击者猜测到的。攻击者预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求。

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

推荐阅读更多精彩内容