HTTP学习

[TOC]

参考《图解HTTP》

HTTP发展及基础

HTTP历史

http于1990年问世那时的http并没有作为正式的标准被建立,现在的http其实含有http1.0版本之前的意思因此被称为0.9.http1.0作为标准被公开是在1996年5月,版本被命名为http/1.0,并记载与RFC1945,但该协议至今仍被广泛使用在服务器端,1997年1月公布的http/1.1是目前主流http协议版本当初的标准时RFC2068之后发布的修订版就是当前的最新版本

网络基础TCP/IP

通常使用的网络是在TCP/IP协议的基础上运行的而HTTP是属于他内部的一个子集

TCP/IP协议

计算机与网络设备之间相互通信双方必须基于相同的方法比如探测到通信目标由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要约定好,不同的硬件操作系统之间的通信这一切都需要一种规则,而我们就把这种规则称为协议Protocol把互联网相关联的协议集合起来总成为TCP/IP

TCP/IP协议里最重要的就是分层:TCP/IP协议按层次分别分为以下五层 应用层、传输层、网络层、数据链层、物理层(OSI模型将应用层细分为 应用层、表示层、会话层**)

应用层:应用层决定了向用户提供应用服务时的通信活动,TCP协议预存了各类通用的应用服务,比如FTP和DNS就是其中两类,HTTP也是属于该层.

传输层: 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输,在传输中有两个性质不同的协议: TCP、UDP

网络层: 网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,盖层规定了通过怎样的路径到达对方计算机并把数据发送给对方

数据链层: 处理链接网络硬件部分包括控制操作系统,硬件的设备驱动等

物理层: 实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。

TCP/IP五层模型 实现协议
应用层 HTTP Telnet FTP TFTP DNS SMTP
传输层 TCP UDP
网络层 IP ICMP RIP IGMP
数据链层 ARP RARP IEEE802.3 PPP CSMA/CD
物理层 FE自协商MLT-3 4A PAM5

该表参考:http://www.cnblogs.com/qishui/p/5428938.html

发送层在层与层之间传输数据时,每经过一层必定会被打上盖层所属的首部信息,在接受层与层传输时会把对应的首部去掉 这种把数据信息包装起来的方法称为封装(上层接口不接触下层逻辑)

IP协议: 按层次分IP网际协议位于网络层,IP协议的作用就是把各种数据包传送给对方,而要保证确实传送到哪里则需要满足各类条件,最终要的就是IP地址和MAC地址.IP地址指明了节点分配到的地址,MAC地址是指网卡所述的固定地址.IP地址与MAC地址进行配对,IP可变换但MAC地址基本不会更改

ARP协议: 在网络上通信双方位于同一局域网上的情况是很少的,通常在多肽计算机和网络设备中转才能连接到对方,而在进行中转时候会利用下一站的中转设备的MAC地址来搜索下一个中转目标,这时会采用ARP协议是解析地址的协议,根据同新方的IP地址可以查出MAC的地址

TCP协议: 按层分TCP提供可靠地字节流服务,通过三次握手建立连接四次挥手断开连接

DNS:和HTTP协议一样位于应用层的协议提供域名到IP地址之间的解析服务

URL和URI: Uniform Resource Location 和 Uniform Resource IDentifier

简单的HTTP协议

在应用HTTP协议时候,必定是一端担任客户端角色,另一端担任服务端角色。HTTP是不保存状态协议,每次当有新的请求发送时,就会有对应的新响应产生这是为了更快的处理大量食物,确保协议的可伸缩性,随着Web的发展无状态导致业务处理变得棘手所以推出了Cookie

请求方式

方法 说明 http协议版本
GET 获取资源 1.0,1.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获得报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问服务器支持的方法 1.1
TRACE 追求路径 1.1
CONNECT 要求用隧道协议链接代理 1.1
LINK 建立和资源之间的参数 1.0
UNLINE 断开连接 1.0

持久链接节省通信量

http初始协议中每进行一次通信就需要断开一次TCP链接,以前因为容量很小,即使传输起来也没多大问题现在随着HTTP的普及文档中包含大量的图片的情况躲起来,比如使用浏览器浏览一个包含多个图片的html页面时,也会请求该HTML页面里包含的其他资源,因此每次请求都会造成无谓的TCP链接简历断开增加通信开销

Keeo-alive和connection reuse

http1.1退出了持久链接 keep-alive和connection 只要一端没明确提出断开连接则保持TCP连接状态,这样就可以同时并行发送多个请求,而不需要一个接一个的等待响应

CooKie

cookie技术通过请求和响应报文中写入cookie信息来控制客户端状态,cookie会在服务端发送的响应报文内的一个叫做Set-Cookie的首部字段信息通知客户端保存Cookie,当下次客户端在往该服务器发送请求那么客户端会自动在请求报文中加入Cookie值后发送出去,服务端收到客户端发来的cookie后会检查那个客户端发来的记录对比服务器上的记录最后得到之前的状态信息

HTTP状态

状态码的职责是当客户端向服务端发送请求的时候描述返回的请求结果借助状态码用户可以知道服务端是正常处理了请求还是出现了错误

状态码的类别

状态码 类别 原因短语
1xx 信息性状态码 接受的请求正在处理
2xx 成功状态码 请求正常处理完毕
3xx 重定向 需要附加操作
4xx 客户端错误状态码 服务端无法处理请求
5xx 服务器错误状态码 服务器处理请求出错

HTTP首部

Content-Type:报文主题对象类型
Keep-Alive:设置保持连接时间

通用首部字段

cache-control:缓存机制
connection:控制不再转发给代理的首部字段 管理持久连接 keep-alive
date:报文创建的时间
pragma: 遗留字段 no-cache
Trailer: 记录记录了哪些首部字段
Transfer-Encoding:报文编码方式
upgrade: 检测是否可以使用更高版进行通讯
via: 追踪客户端与服务器之间的请求和响应报文的传输路径
warning 警告

警告码 警告内容
110 响应已过期
111 在验证失败
112 断开连接
113 试探性过期
299 任意警告

请求首部

字段 说明
Accept 用户代理能够处理的媒体类型以及媒体类型的相对优先级,可使用Type/subType这种形式一次指定多种媒体类型
Accept-Charset 通知服务器用户代理支持的字符集或相对优先顺序
Accept-Encoding gzip deflate 首部字段告知服务器用户代理的内容编码
Accept-Language 告知服务器用户代理能够处理的语言集
Authorization 认证信息服务器返回401后需要再次请求将认证信息加入到请求中。
Expect 客户端使用首部字段Expect来告诉服务器期望出现某种特定的行文,因为服务器无法理解客户端的期望做出回应而产生错误时会返回417,客户端可以利用该首部字段写明期望的扩展
HOST 资源所在处的互联网主机名和端口号
if-xxx 条件请求服务器收到附带条件时候只有条件为真时才会执行请求
if-match 判断属于html的etag值符合则执行请求否则则不执行
if-modified-since 字段值早于资源更新时间则希望能处理该请求
if-none-match 与if-match取值相反
if-range 附带条件告知服务器若指定if-range(Etag或者时间)和请求资源的Etag值或时间一致时则做范围请求处理,反之返回全体资源
if-Unmodified-Since 与if-modified-since取值相反
max-forwards 该字段以10进制整数形式可经过的服务器最大数目服务器在往下一个服务器转发请求之前max-forwards-1为0时,不再进行转发,而是直接返回响应
proxy-authorization 与Authorization一致
Range 范围请求告知服务器资源的指定范围
referer 只要查看referer就能知道uri是从哪个web页面发起的
user-agent 创建请求的浏览器和用户代理等信息发送给是服务器

响应首部

字段 说明
Accept-Ranges 告知客户端服务器是否能处理范围请求已制定获取服务端某个部分的资源,可处理范围请求时为bytes,反之为none
Age 可以告知客户端源服务器在多久前创建了响应字段值为s秒
ETag html文件的etag值标识 强etag值(只要发生改变一点点就会改变)和弱etag值(只有自愿发生了根本改变产生差异时才会改变etag)
Location 可以将响应接受方法引导至某个请求与uri位置不同的资源,浏览器会在收到包含location响应后尝试对已提示的重定向资源的访问
proxy-Authenticate 服务器会把需要的认证信息发给客户端
retry-after 告知客户端多长时间再发送请求配合状态码503
server 告知服务器当前服务器安装的http服务器应用程序信息
vary 对缓存进行控制 服务器收到带有vary首部字段指定获取资源请求时如果使用accept-lanaguage字段值相同那么就直接从缓存返回响应,反之则需要先从源服务器端获取资源后才能作为响应返回
www-authenticate 用于http访问认证他会告诉街护短适用于访问请求URI所指定资源的认证方案

HTTPS

http缺点
1.通信使用明文(不加密),内容可能会被窃取
2.不严重通信方的身份,因此可能遭遇伪装
3.无法验证报文完整性,有可能被篡改

HTTP + 加密 + 认证 + 完整报文 = https

https缺点
1.比较耗费性能,占用资源较多因此如果是非敏感信息采用HTTP通信,只有包含个人信息等敏感数据时才利用https加密通信
2.购买证书花钱

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

推荐阅读更多精彩内容