Internet-Http协议格式

1.HTTP连接(短连接/长连接/多路复用)

HTTP/1.0: 一次HTTP请求响应结束后,自动断开TCP连接(TCP短连接)
HTTP/1.1: 一次HTTP请求响应结束后,保持TCP连接一段时间,下次可以重用该连接(TCP长连接)
HTTP/2.0: 多个HTTP请求和响应同时使用一个TCP连接(TCP多路复用)

2.HTTP请求

[请求行]:   POST /xxx.html HTTP/1.1
            GET  /xxx.html?key1=val1&key2=val2 HTTP/1.1 (GET数据最大长度为1K)
[请求头]:   Host: www.xxx.com                                  网站主机名(域名/ip)
            Connection: close/Keep-Alive                       是否保持TCP连接
            User-Agent:                                        客户端软件基本信息
            Accept: text/html,image/*                          客户端可接受的数据类型
            Accept-Charset: ISO-8859-1                         客户端可接受的数据编码
            Accept-Encoding: gzip,compress                     客户端可接受的数据压缩格式
            Accept-Language: en-us,zh-cn                       客户端可接受的语言环境
            Referer: http://www.lioil.win                      当前HTTP请求的来源(URL),和防盗链相关
            Cookie: UID = 9FE636AA6FFA43BBE                    客户端用户数据
            Content-Length: 1024                               数据长度
            Content-Type: application/x-www-form-urlencoded    数据类型
            Date: Mon, 18 Jan 2017 06:26:29 GMT                当前时间
            If-Modified-Since: Mon, 18 Jan 2017 06:26:29 GMT   缓存的最后获取时间
            If-None-Match: "83794-1208174400000"               缓存标记
            If-Range: "06132ff18495d44a40014f7202a03696"       断点下载相关
            Range: bytes=22716713-                             断点下载/上传文件的开始字节位置     
[空行]:     \r\n      
[请求体]:   ... (GET请求为空)


* Post请求上传文件(与一般post不同, 请求体被分界线(boundary)划分成多块区域,用于上传多个文件)
    POST /xxx HTTP/1.1
    Host: lioil.win
    Content-Length: 1024
    Content-Type: multipart/form-data; boundary=BoundarybXA7KWbsgAx0OB7z
    (\r\n)
    --BoundarybXA7KWbsgAx0OB7z  (\r\n)
    Content-Disposition: form-data; name="testFile"; filename="文件A.zip"  (\r\n)
    Content-Type: application/octet-stream  (\r\n)
    (\r\n)
    文件A内容(原始二进制)  (\r\n)
    --BoundarybXA7KWbsgAx0OB7z--  (\r\n)
    (\r\n)
    --BoundarybXA7KWbsgAx0OB7z  (\r\n)
    Content-Disposition: form-data; name="testFile"; filename="文件B.zip"  (\r\n)
    Content-Type: application/octet-stream  (\r\n)
    (\r\n)
    文件B内容(原始二进制)  (\r\n)
    --BoundarybXA7KWbsgAx0OB7z--  (\r\n)

3.HTTP响应

[状态行]:   HTTP/1.1 200 OK
                     200         OK 请求处理成功
                     206         Partial Content(断点下载相关)
                     301         永久重定向(旧地址被认为永久移除,搜索引擎不保留旧地址,所以很少使用)  + 响应头 Location
                     302         临时重定向(搜索引擎保留旧地址,所以业内很常用)  + 响应头 Location
                     303 307     细化重定向(HTTP/1.1将302拆分为303和307,为了兼容HTTP/1.0,很少使用) + 响应头 Location 
                     304         Not Modified 内容未修改(服务器返回响应体为空,浏览器继续使用缓存) + 响应头 Last-Modified 或 ETag
                     404         资源未找到                      
                     500         服务器内部错误
[响应头]:   Server: apache tomcat                            服务器基本信息
            Connection: close/Keep-Alive                     是否保持TCP连接
            Content-Encoding: gzip                           数据压缩格式
            Content-Length: 80                               数据长度
            Content-Language: zh-cn                          语言环境
            Content-Type: text/html; charset=GB2312          数据类型/编码
            Refresh: 3;url=http://www.lioil.win              定时刷新到指定url页面
            Location: http://www.lioil.win                   请求重定向地址 + 状态码 302
            Content-Disposition: attachment;filename=f.zip   与文件下载相关
            Transfer-Encoding: chunked                       传输类型, chunked块传输
            Set-Cookie: SS=Q0=5Lb_nQ; path=/search           设置客户端Cookie
            Date: Mon, 18 Jan 2017 06:26:29 GMT              当前时间
            Last-Modified: Mon, 18 Jan 2017 06:26:29 GMT     最后修改时间(配合HTTP请求头 If-Modified-Since) + 状态码 304 
            ETag: "83794-1208174400000"                      缓存标记(配合HTTP请求头 If-None-Match) +  状态码 304
            Expires: 0                                       缓存过期时间,0或-1代表不缓存  (HTTP/1.0)
            Pragma: no-cache                                 缓存时长,max-age = 3600,单位s (兼容HTTP/1.0, 在HTTP/1.0中只实现 Pragema: no-cache)
            Cache-Control: no-cache                          缓存时长,max-age = 3600,单位s (HTTP/1.1新增)
            Content-Range: bytes 22716713-1721650279/1721650280    断点下载/上传的文件位置 
[空行]:     \r\n
[响应体]:   ...


* 缓存优先级
    ETag > Last-Modified
        Last-Modified缺陷:
           1.最后修改时间只能精确到秒级,如果某些文件在1秒内被改多次,无法准确标记文件的修改时间;
           2.某些文件会被定期生成,内容不变,日期改变
           3.可能无法准确获取文件修改时间
        Etag是服务器生成的缓存标记,能准确控制缓存,Last-Modified与ETag一起使用时,服务器会优先验证ETag

    Cache-Control > Pragma > Expires       
       Expires是绝对时间,要求客户端与服务器时间一致(无法保证,不建议使用)
       所以HTTP1.1引入Cache-Control来克服Expires头的限制

* HTTP/1.1中定义了5类状态码: 
  1XX  提示信息 - 表示请求已被成功接收,继续处理
  2XX  成功 - 表示请求已被成功接收,理解,接受
  3XX  重定向 - 要完成请求必须进行更进一步的处理
  4XX  客户端错误 -  请求有语法错误或请求无法实现
  5XX  服务器端错误 -   服务器未能实现合法的请求

* 302劫持:
    因为302是临时重定向,所以搜索引擎会保留旧地址,并把新地址的内容绑定到旧地址,如果新旧地址是不同公司/人的网站,那就会造成302劫持。
    假设A站通过302重定向B站, 那么Google/百度等搜素引擎会认为A站=B站,A站域名绑定了B站内容/PR(PageRank,网页排名)等资源,
    所以有些人把新域名通过302重定向到PR高的域名,从而窃取高的PR以谋取利益!!!
    
    长时间大量使用302的网站很可能被搜索引擎判为作弊跳转,Google/百度都会封杀降低该域名,
    罪名是"利用重复的内容来干扰搜索结果的网站排名"

简书: http://www.jianshu.com/p/1c72f0308212
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54585221
GitHub博客:http://lioil.win/2017/01/17/Http.html
Coding博客:http://c.lioil.win/2017/01/17/Http.html

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

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,967评论 6 13
  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 55,011评论 24 557
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,656评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,353评论 6 152
  • 总想有人和我探讨一下没事一个人最喜欢做什么事,这些事情必须是最享受的,轻松的。可惜到现在我也觉得没有一个人适合来说...
    木屋森林阅读 226评论 0 0