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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值