purple OSS分析與實(shí)現(xiàn)分析

概述

對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱OSS),OSS提供統(tǒng)一存儲(chǔ)的解決方案

方便、快捷的使用方式

提供標(biāo)準(zhǔn)的RESTful API接口涡真、豐富的SDK包、客戶端工具、控制臺(tái)囚企。您可以像使用文件一樣方便地上傳、下載瑞眼、檢索龙宏、管理用于Web網(wǎng)站或者移動(dòng)應(yīng)用的海量數(shù)據(jù)。
不限文件數(shù)量和大小伤疙。您可以根據(jù)所需存儲(chǔ)量無限擴(kuò)展存儲(chǔ)空間银酗,解決了傳統(tǒng)硬件存儲(chǔ)擴(kuò)容問題。
支持流式寫入和讀出掩浙。特別適合視頻等大文件的邊寫邊讀業(yè)務(wù)場(chǎng)景花吟。
支持?jǐn)?shù)據(jù)生命周期管理。您可以自定義將到期數(shù)據(jù)批量刪除或者轉(zhuǎn)入到低成本的歸檔服務(wù)厨姚。
強(qiáng)大衅澈、靈活的安全機(jī)制

靈活的鑒權(quán),授權(quán)機(jī)制谬墙。

提供URL鑒權(quán)和授權(quán)機(jī)制今布,以及白名單、防盜鏈拭抬、主子賬號(hào)功能部默。
提供用戶級(jí)別資源隔離機(jī)制和多集群同步機(jī)制(可選)。

擴(kuò)展服務(wù)

圖片處理:支持jpg造虎、png傅蹂、bmp、gif算凿、webp份蝴、tiff等多種圖片格式的轉(zhuǎn)換,以及縮略圖氓轰、剪裁婚夫、水印、縮放等多種操作署鸡。
音視頻轉(zhuǎn)碼:提供高質(zhì)量案糙、高速并行的音視頻轉(zhuǎn)碼能力限嫌,讓您的音視頻文件輕松應(yīng)對(duì)各種終端設(shè)備。
內(nèi)容加速分發(fā):OSS作為源站时捌,搭配CDN進(jìn)行加速分發(fā)怒医,具有穩(wěn)定、無回源帶寬限制匣椰、性價(jià)比高裆熙、一鍵配置的特點(diǎn)。

典型應(yīng)用場(chǎng)景

1.云端數(shù)據(jù)處理
上傳文件到OSS后禽笑,可以使用應(yīng)用插件實(shí)現(xiàn)圖片處理實(shí)現(xiàn)云端數(shù)據(jù)處理入录。

場(chǎng)景

2.qisp申報(bào)服務(wù)
企業(yè)上傳excel到oss服務(wù)器,通過excel轉(zhuǎn)json實(shí)現(xiàn)預(yù)覽,讀取,簡(jiǎn)化excel操作

3.mle移動(dòng)查驗(yàn)平臺(tái)
平板通拍照上傳實(shí)現(xiàn)佳镜,實(shí)現(xiàn)多系統(tǒng)圖片共享

4.nqp口岸云服務(wù)平臺(tái)
手機(jī)端拍照上傳,微信端圖片上傳備份

對(duì)象列表

Bucket 存儲(chǔ)空間
Object 對(duì)象
ObjectPlugin 擴(kuò)展插件
Acl訪問控制

目錄


api概覽

Bucket操作

列出Bucket
Get/get
創(chuàng)建Bucket
Post/{bucketName}
獲取Bucket
Get/{buckName}
刪除Bucket
Delete/{buckName}

Object的操作

上傳Object
Put/{buckName}/{文件名}
獲取Object
Get/{bucketName}/{文件名}
eg: http://dev.xxx.com/oss/nqp/images|tr@jpg

ObjectPlugin擴(kuò)展插件

  1. 圖片縮放處理+背景填充
    /{bucketName}{文件名}?size=100w_100h_4e_100-0-0bgc
  1. 圖片水印處理
    /{bucketName}{文件名}?watermark=1&text=base64(水印文字)
  2. excel轉(zhuǎn)json輸出
    /{bucketName}{文件名}?export=json&exportId={導(dǎo)出配置id}
  3. 輸出pdf
    /{bucketName}{文件名}?export=pdf
  4. 在線預(yù)覽[pdf,xls,xlsx,word]
    /{bucketName}{文件名}?preview=pdf

bucket

POST Bucket

創(chuàng)建Bucket

請(qǐng)求語法

POST / HTTP/1.1
url: Post /{bucketName}
body:{擴(kuò)展屬性}

請(qǐng)求元素(Request Elements)

名稱 描述
bucketName 存儲(chǔ)空間名稱

細(xì)節(jié)分析

  1. bucketName名稱規(guī)范
    1.1 只能包含小寫字母僚稿,數(shù)字和短橫線
    1.2 必須以小寫字母和數(shù)字開頭和結(jié)尾
    1.3 bucketName的長(zhǎng)度限制在3-63之間
    1.4 不能使用保留關(guān)鍵字 admin,local,config,master

實(shí)現(xiàn)分析

  1. MongolDB實(shí)現(xiàn)
    1.1.新建bucket將創(chuàng)建一個(gè)數(shù)據(jù)庫
    1.2.bucket中信息存儲(chǔ)于master庫中
  2. SqlServer實(shí)現(xiàn)
    2.1 多個(gè)空間實(shí)現(xiàn)在同一個(gè)數(shù)據(jù)庫
    2.2 bucket存儲(chǔ)在一張表中

示例

請(qǐng)求示例:

POST / HTTP/1.1
url: Post/{bucketName}
body:{擴(kuò)展屬性}

返回示例:

200

列出Bucket

Get /get

獲取Bucket

Get /{buckName}

刪除Bucket

Delete/{buckName}


PUT Object

上傳對(duì)象

請(qǐng)求語法

PUT / HTTP/1.1
url:/{bucketName}/object

請(qǐng)求Header(Request Elements)

名稱 描述
bucketName 存儲(chǔ)空間名稱
Cache-Control 指定該Object被下載時(shí)的網(wǎng)頁的緩存行為;更詳細(xì)描述請(qǐng)參照RFC2616蟀伸。 類型:字符串 默認(rèn)值:無
Content-Disposition 指定該Object被下載時(shí)的名稱蚀同;更詳細(xì)描述請(qǐng)參照RFC2616。 類型:字符串 默認(rèn)值:無
Content-Encoding 指定該Object被下載時(shí)的內(nèi)容編碼格式啊掏;更詳細(xì)描述請(qǐng)參照RFC2616蠢络。 類型:字符串 默認(rèn)值:無
Content-MD5 根據(jù)協(xié)議RFC 1864對(duì)消息內(nèi)容(不包括頭部)計(jì)算MD5值獲得128比特位數(shù)字,對(duì)該數(shù)字進(jìn)行base64編碼為一個(gè)消息的Content-MD5值迟蜜。該請(qǐng)求頭可用于消息合法性的檢查(消息內(nèi)容是否與發(fā)送時(shí)一致)刹孔。雖然該請(qǐng)求頭是可選項(xiàng),OSS建議用戶使用該請(qǐng)求頭進(jìn)行端到端檢查娜睛。 類型:字符串 默認(rèn)值:無 限制:無
Expires 過期時(shí)間髓霞;更詳細(xì)描述請(qǐng)參照RFC2616。 類型:字符串 默認(rèn)值:無 注意:OSS不會(huì)對(duì)這個(gè)值進(jìn)行限制和驗(yàn)證
x-oss-object-acl 指定oss創(chuàng)建object時(shí)的訪問權(quán)限畦戒。 類型:字符串 合法值:public-read方库,private,public-read-write

細(xì)節(jié)分析

  1. 如果用戶上傳了Content-MD5請(qǐng)求頭障斋,OSS會(huì)計(jì)算body的Content-MD5并檢查一致性纵潦,如果不一致,將返回InvalidDigest錯(cuò)誤碼垃环。
  2. 如果請(qǐng)求頭中的“Content-Length”值小于實(shí)際請(qǐng)求體(body)中傳輸?shù)臄?shù)據(jù)長(zhǎng)度邀层,OSS仍將成功創(chuàng)建文件;但Object大小只等于“Content-Length”中定義的大小晴裹,其他數(shù)據(jù)將被丟棄被济。
  3. 如果試圖添加的Object的同名文件已經(jīng)存在救赐,并且有訪問權(quán)限涧团。新添加的文件將覆蓋原來的文件只磷,成功返回200 OK。
  4. 如果在PutObject的時(shí)候泌绣,攜帶以x-oss-meta-為前綴的參數(shù)钮追,則視為user meta,比如x-oss-meta-location阿迈。一個(gè)Object可以有多個(gè)類似的參數(shù)元媚,但所有的user meta總大小不能超過8k。
  5. 如果Head中沒有加入Content length參數(shù)苗沧,會(huì)返回411 Length Required錯(cuò)誤刊棕。錯(cuò)誤碼:MissingContentLength。
  6. 如果設(shè)定了長(zhǎng)度待逞,但是沒有發(fā)送消息Body甥角,或者發(fā)送的body大小小于給定大小,服務(wù)器會(huì)一直等待识樱,直到time out嗤无,返回400 Bad Request消息。錯(cuò)誤碼:RequestTimeout怜庸。
  7. 如果試圖添加的Object所在的Bucket不存在当犯,返回404 Not Found錯(cuò)誤。錯(cuò)誤碼:NoSuchBucket割疾。
  8. 如果試圖添加的Object所在的Bucket沒有訪問權(quán)限嚎卫,返回403 Forbidden錯(cuò)誤。錯(cuò)誤碼:AccessDenied杈曲。
  9. 如果添加文件長(zhǎng)度超過5G驰凛,返回錯(cuò)誤消息400 Bad Request。錯(cuò)誤碼:InvalidArgument担扑。
  10. 如果傳入的Object key長(zhǎng)度大于1023字節(jié)恰响,返回400 Bad Request。錯(cuò)誤碼:InvalidObjectName涌献。
  11. PUT一個(gè)Object的時(shí)候胚宦,OSS支持5個(gè) HTTP RFC2616協(xié)議規(guī)定的Header 字段:Cache-Control、Expires燕垃、Content-Encoding枢劝、Content-Disposition、Content-Type卜壕。如果上傳Object時(shí)設(shè)置了這些Header您旁,則這個(gè)Object被下載時(shí),相應(yīng)的Header值會(huì)被自動(dòng)設(shè)置成上傳時(shí)的值轴捎。
  12. 如果上傳Object時(shí)指定了x-oss-server-side-encryption Header鹤盒,則必須設(shè)置其值為AES256蚕脏,否則會(huì)返回400和相應(yīng)錯(cuò)誤提示:InvalidEncryptionAlgorithmError。指定該Header后侦锯,在響應(yīng)頭中也會(huì)返回該Header驼鞭,OSS會(huì)對(duì)上傳的Object進(jìn)行加密編碼存儲(chǔ),當(dāng)這個(gè)Object被下載時(shí)尺碰,響應(yīng)頭中會(huì)包含x-oss-server-side-encryption挣棕,值被設(shè)置成該Object的加密算法。

實(shí)現(xiàn)分析

1.MongoDB實(shí)現(xiàn)
1.1

常見問題

Content-MD5計(jì)算方式錯(cuò)誤

示例

請(qǐng)求示例:

POST /oss.jpg HTTP/1.1 Host: eas.nbeport.com Cache-control: no-cache Expires: Fri, 28 Feb 2012 05:38:42 GMT Content-Encoding: utf-8 Content-Disposition: attachment; ObjectName=oss_download.jpg Date: Fri, 24 Feb 2012 06:03:28 GMT Content-Type: image/jpg Content-Length: 344606 Authorization: sos-token [344606 bytes of object data]

返回示例:

HTTP/1.1 200 OK Server: dev .xxx.com/oss Date: Sat, 21 Nov 2015 18:52:34 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 5650BD72207FB30443962F9A x-oss-bucket-version: 1418321259 ETag: "A797938C31D59EDD08D86188F6D5B872" { id:A797938C31D59EDD08D861, fileName:'/images/oss_download.jpg', backName:'nqp', }

Get Object

獲取對(duì)象

請(qǐng)求語法

get / HTTP/1.1

  1. 通過文件名獲取 get /{bucketName}/{objectName}
    url:http://dev.xxx.com/oss/{backetName}/{objectName}
  2. 通過id獲取
    url:http://dev.xxx.com/oss/object/{id}

請(qǐng)求參數(shù)(Request Elements)

名稱 描述
bucketName 存儲(chǔ)空間名稱
id 由oss系統(tǒng)生居guid
objectName 對(duì)象/文件名亲桥,規(guī)則 {bucket}/{filename} images\\tr@jpg 目錄使用表示.用@表示 http://dev.xxx.com/oss/nqp/images\\tr@jpg

細(xì)節(jié)分析

示例

請(qǐng)求示例:

PUT /oss.jpg HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Cache-control: no-cache Expires: Fri, 28 Feb 2012 05:38:42 GMT Content-Encoding: utf-8 Content-Disposition: attachment;filename=oss_download.jpg Date: Fri, 24 Feb 2012 06:03:28 GMT Content-Type: image/jpg Content-Length: 344606 Authorization: sos-token [344606 bytes of object data]

返回示例:

HTTP/1.1 200 OK Server: AliyunOSS Date: Sat, 21 Nov 2015 18:52:34 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 5650BD72207FB30443962F9A x-oss-bucket-version: 1418321259 ETag: "A797938C31D59EDD08D86188F6D5B872" /{bucketName}

訪問控制

在Header中包含簽名

用戶可以在HTTP請(qǐng)求中增加Authorization(授權(quán))的Header來包含簽名(Signature)信息洛心,表明這個(gè)消息已被授權(quán)。

Authorization字段計(jì)算的方法

"Authorization: OSS "+AccessKeyId+":"+Signature
Signature=base64(hmac-sha1(AccessKeySecret,
VERB+ "\n”
+Content-MD5+ "\n”
+Content-Type+ "\n”
+Date))

+CanonicalizedOSSHeaders
+CanonicalizedResource)))

  1. AccessKeySecret表示簽名所需的秘鑰
  2. VERB表示HTTP 請(qǐng)求的Method题篷,主要有PUT皂甘,GET,POST悼凑,HEAD偿枕,DELETE等“\n”表示換行符
  3. Content-MD5表示請(qǐng)求內(nèi)容數(shù)據(jù)的MD5值,對(duì)消息內(nèi)容(不包括頭部)計(jì)算MD5值獲得128比特位數(shù)字户辫,對(duì)該數(shù)字進(jìn)行base64編碼而得到渐夸。該請(qǐng)求頭可用于消息合法性的檢查(消息內(nèi)容是否與發(fā)送時(shí)一致),如”eB5eJF1ptWaXm4bijSPyxw==”渔欢,也可以為空墓塌。詳情參看RFC2616 Content-MD5
  4. Content-Type表示請(qǐng)求內(nèi)容的類型,如”application/octet-stream”奥额,也可以為空
  5. Date表示此次操作的時(shí)間苫幢,且必須為HTTP1.1中支持的GMT格式,如”Sun, 22 Nov 2015 08:16:38 GMT”

6.DATE時(shí)間和OSS服務(wù)器的時(shí)間差正負(fù)15分鐘以上垫挨,OSS服務(wù)器將拒絕該服務(wù)韩肝,并返回HTTP 403錯(cuò)誤。
7.CanonicalizedOSSHeaders表示以“x-oss-”為前綴的http header的組合

構(gòu)建CanonicalizedOSSHeaders的方法

所有以“x-oss-”為前綴的HTTP Header被稱為CanonicalizedOSSHeaders九榔。它的構(gòu)建方法如下:
將所有以“x-oss-”為前綴的HTTP請(qǐng)求頭的名字轉(zhuǎn)換成小寫字母哀峻。如’X-OSS-Meta-userName:hz24’轉(zhuǎn)換成’x-oss-meta-username:hz24’。刪除請(qǐng)求頭和內(nèi)容之間分隔符兩端出現(xiàn)的任何空格哲泊。如’x-oss-meta-username:hz24’轉(zhuǎn)換成:’x-oss-meta-name:hz24’剩蟀。將每一個(gè)頭和內(nèi)容用”\n”分隔符分隔拼成最后的CanonicalizedOSSHeaders。

8.CanonicalizedResource 表示想要訪問的OSS資源描述

計(jì)算簽名頭規(guī)則

1.簽名的字符串必須為UTF-8格式切威。含有中文字符的簽名字符串必須先進(jìn)行UTF-8編碼育特,再與AccessKeySecret計(jì)算最終簽名。
2.簽名的方法用RFC 2104中定義的HMAC-SHA1方法先朦,其中Key為AccessKeySecret缰冤。
3.Content-Type和Content-MD5在請(qǐng)求中不是必須的槽袄,但是如果請(qǐng)求需要簽名驗(yàn)證,空值的話以換行符“\n”代替锋谐。
4.在所有非HTTP標(biāo)準(zhǔn)定義的header中,只有以“x-oss-”開頭的header截酷,需要加入簽名字符串涮拗;其他非HTTP標(biāo)準(zhǔn)header將被OSS忽略(如上例中的x-oss-magic是需要加入簽名字符串的)。
5.以“x-oss-”開頭的header在簽名驗(yàn)證前需要符合以下規(guī)范:
header的名字需要變成小寫迂苛。
header按字典序自小到大排序三热。
6.分割header name和value的冒號(hào)前后不能有空格。
每個(gè)Header之后都有一個(gè)換行符“\n”三幻,如果沒有Header就漾,

構(gòu)建CanonicalizedOSSHeaders的方法

用戶發(fā)送請(qǐng)求中想訪問的OSS目標(biāo)資源被稱為CanonicalizedResource。它的構(gòu)建方法如下:
將CanonicalizedResource置成空字符串(“”)念搬;
放入要訪問的OSS資源:“ /BucketName/ObjectName”(無ObjectName則CanonicalizedResource為”/BucketName/“抑堡,如果同時(shí)也沒有BucketName則為“/”)
如果請(qǐng)求的資源包括子資源(sub-resource) ,那么將所有的子資源按照字典序朗徊,從小到大排列并以&為分隔符生成子資源字符串首妖。在CanonicalizedResource字符串尾添加“?”和子資源字符串爷恳。此時(shí)的CanonicalizedResource例子如:/BucketName/ObjectName?acl &uploadId=UploadId如果用戶請(qǐng)求在查詢字符串(query string)中指定了要重寫(override)返回請(qǐng)求的header 有缆,那么將這些查詢字符串及其請(qǐng)求值按照字典序,從小到大排列温亲,以&為分隔符棚壁,按參數(shù)的字典序添加到CanonicalizedResource中。此時(shí)的CanonicalizedResource例子:/BucketName/ObjectName?acl&response-content-type=ContentType & uploadId =UploadId栈虚。OSS支持的override請(qǐng)求頭參考Get Object
OSS目前支持的子資源(sub-resource)包括:acl袖外,uploadId,partNumber魂务,uploads在刺,logging,website头镊,location蚣驼,lifecycle,referer相艇,cors颖杏,delete,append坛芽,position留储,bucketInfo

在URL中包含簽名

除了使用Authorization Head翼抠,用戶還可以在URL中加入簽名信息,這樣用戶就可以把該URL轉(zhuǎn)給第三方實(shí)現(xiàn)授權(quán)訪問获讳。

實(shí)現(xiàn)方式

URL中包含簽名示例:
http://dev.nbxxx.com/oss/nqp|images|tr#jpg? AccessKeyId=44CF9590006BF252F707&expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
在URL中實(shí)現(xiàn)簽名阴颖,必須至少包含Signature,Expires丐膝,AccessKeyId三個(gè)參數(shù)量愧。

  1. Expires這個(gè)參數(shù)的值是一個(gè)UNIX時(shí)間(自UTC時(shí)間1970年1月1號(hào)開始的秒數(shù),詳見wiki)帅矗,用于標(biāo)識(shí)該URL的超時(shí)時(shí)間偎肃。如果OSS接收到這個(gè)URL請(qǐng)求的時(shí)候晚于簽名中包含的Expires參數(shù)時(shí),則返回請(qǐng)求超時(shí)的錯(cuò)誤碼浑此。例如:當(dāng)前時(shí)間是1141889060累颂,開發(fā)者希望創(chuàng)建一個(gè)60秒后自動(dòng)失效的URL,則可以設(shè)置Expires時(shí)間為1141889120凛俱。
  2. AccessKeyId即AccessKeyId紊馏。
    Signature表示簽名信息。所有的OSS支持的請(qǐng)求和各種Header參數(shù)蒲犬,在URL中進(jìn)行簽名的算法和在Header中包含簽名的算法基本一樣瘦棋。

Signature = urlencode(base64(hmac-sha1(AccessKeySecret,
VERB+"\n"
+CONTENT-MD5+"\n"
+CONTENT-TYPE+"\n"
+EXPIRES+"\n"
+CanonicalizedOSSHeaders
+CanonicalizedResource)))

  1. 其中,與header中包含簽名相比主要區(qū)別如下:
    3.1通過URL包含簽名時(shí)暖哨,之前的Date參數(shù)換成Expires參數(shù)赌朋。
    3.2不支持同時(shí)在URL和Head中包含簽名。
    3.3如果傳入的Signature篇裁,Expires沛慢,OSSAccessKeyId出現(xiàn)不止一次,以第一次為準(zhǔn)达布。
    3.4請(qǐng)求先驗(yàn)證請(qǐng)求時(shí)間是否晚于Expires時(shí)間团甲,然后再驗(yàn)證簽名。
    將簽名字符串放到url時(shí)黍聂,注意要對(duì)url進(jìn)行urlencode

4.CanonicalizedOSSHeaders表示以“x-oss-”為前綴的http header的組合
5.CanonicalizedResource 表示用戶想要訪問的OSS資源
6.CanonicalizedOSSHeaders就設(shè)置為空躺苦。

下一階段任務(wù)

  1. OSS應(yīng)用推廣
  2. MongoDB存儲(chǔ)優(yōu)化
  3. 對(duì)象插件擴(kuò)展
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市产还,隨后出現(xiàn)的幾起案子匹厘,更是在濱河造成了極大的恐慌,老刑警劉巖脐区,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愈诚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)炕柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門酌泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匕累,你說我怎么就攤上這事陵刹。” “怎么了欢嘿?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵衰琐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我际插,道長(zhǎng),這世上最難降的妖魔是什么显设? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任框弛,我火速辦了婚禮,結(jié)果婚禮上捕捂,老公的妹妹穿的比我還像新娘瑟枫。我一直安慰自己,他們只是感情好指攒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布慷妙。 她就那樣靜靜地躺著,像睡著了一般允悦。 火紅的嫁衣襯著肌膚如雪膝擂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天隙弛,我揣著相機(jī)與錄音架馋,去河邊找鬼。 笑死全闷,一個(gè)胖子當(dāng)著我的面吹牛叉寂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播总珠,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屏鳍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了局服?” 一聲冷哼從身側(cè)響起钓瞭,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淫奔,沒想到半個(gè)月后降淮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年佳鳖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霍殴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系吩,死狀恐怖来庭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穿挨,我是刑警寧澤月弛,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站科盛,受9級(jí)特大地震影響帽衙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贞绵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一厉萝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榨崩,春花似錦谴垫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至彩郊,卻和暖如春前弯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秫逝。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工博杖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筷登。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓剃根,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親前方。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狈醉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)惠险,斷路器苗傅,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • API定義規(guī)范 本規(guī)范設(shè)計(jì)基于如下使用場(chǎng)景: 請(qǐng)求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請(qǐng)求頻率非常高,建議使用雙通...
    有涯逐無涯閱讀 2,537評(píng)論 0 6
  • 一班巩、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,348評(píng)論 6 152
  • 1 TED演講和其他一些普通的演講有所不同渣慕,它更有宣傳性鼓動(dòng)性和說服性嘶炭,演講的主題一般都是關(guān)于對(duì)大腦深層認(rèn)知和意識(shí)...
    魯莽書生閱讀 239評(píng)論 0 0
  • 失落能噬空身體 仿佛花很長(zhǎng)時(shí)間壘砌而成的堡壘 瞬間垮塌 然后還要忍著一絲病痛般 笑著說:無所謂,前途是光明的 碎裂...
    書生亦百用閱讀 207評(píng)論 2 3