zoukankan      html  css  js  c++  java
  • Http协议

    饮水思源

    阮一峰-HTTP 协议入门

    http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html

    http://tools.jb51.net/table/http_header

    http://www.cnblogs.com/zh2000g/archive/2010/03/22/1692002.html

    http://blog.csdn.net/blue_it/article/details/43311551

    Desc

    HTTP(Hyper Text Transfer Protocol 超文本传输协议), 是基于 TCP/IP 协议的 一种协议 属于 网络分层中应用层的协议,是互联网中通信的基础,是一种 请求--响应的模式 ,客户端请求具体的资源,服务器做出响应。这个请求可以是非常简单也可以是非常的复杂。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

    img

    HTTP请求的步骤

    1. 建立TCP连接
    2. Web浏览器发送请求命令
    3. Web浏览器发送请求头信息
    4. Web服务器响应
    5. Web服务器发送响应头信息
    6. Web服务器向浏览器发送数据
    7. 关闭TCP连接

    Http 请求

    当浏览器向Web服务器发送出请求的时候,服务器传递了一个数据块,即急钮信息, HTTP请求由3部分组成:

    1. 请求方法 URL地址 HTTP协议和版本
    2. 请求头
    3. 请求正文
    分析

    这里以我的博客园主页的一个请求为例子 鲁迅认识的那只猹,使用的浏览器为火狐浏览器,使用了FireBug工具

    //请求方法
    GET /slyfox/ HTTP/1.1
    //请求头
    Host: www.cnblogs.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Cookie: .CNBlogsCookie=F60A94A4CE998B3322717EB5B2C99CE088EA357989C1EFD3A5F46E230C27441E649730A6522A871CB646BE18E4CCFA8E83BB24C7E5505148F76D98A075A418536FEC9B1326D627E07E48F5A9267190C5F3311057; .Cnblogs.AspNetCore.Cookies=CfDJ8PhlBN8IFxtHhqIV3s0LCDkqsd4hqGtzJYBuOTb5g9DKOWTazZmJWGuePXDhXNQzqFZ7ENGsSoFF5qAy2mgcCKh2oUfCxAtwi0FKBnEmZFaAAGg7dVjjh6zq0wt2BIynSdiu4UgPfmDFdxIoAMWwVjNpH8sesv2D8feX7MjVjuna74-JJdxi7O1sldVGluUPtMkzB5nIojOvJwtsHiNTcg9vtWNfF1S362PbpsJLvNTJInWl_7cLs9bi1Tj8-I9Y5lDsFztOtc85QKdDNqoyKX0GrpFLt3sXa04Z7GWBqJjYzV1FpRjeOd2knpMjF22kcg
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    If-Modified-Since: Thu, 03 Aug 2017 08:11:01 GMT
    Cache-Control: max-age=0
    
    //请求正文 请求头和 请求正文之间 会有一个空行,服务器拿到了该空行后表示请求头结束。
    
    
    
    请求方法
    GET /slyfox/ HTTP/1.1 
    

    GET 请求的方法

    GET 是HTTP协议的一种请求方法, HTTP协议常用的请求方法为 GETPOSTPUTDELETE

    /slyfox 代表请求的URL的路径

    URL完整的指出了想要访问的资源,通常使用相对目录。

    / HTTP/1.1 HTTP的版本

    本次通信中使用HTTP的版本

    请求头

    请求头中包含的是客户端的数据格式为 属性名:属性值

    Host: www.cnblogs.com
    

    指定请求服务器的域名与端口号

    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
    

    User-Agent 想服务器 提供客户端所使用的 浏览器的类型和版本、系统版本、浏览器内核等信息

    • Mozilla/5.0 浏览器的名称
    • (Windows NT 10.0; WOW64; rv:54.0) 操作系统信息
    • Gecko/20100101 Firefox/54.0 浏览器内核信息
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    

    指定客户端能够接收的内容类型,标识浏览器支持的MIME类型(Multipurpose Internet Mail Extensions 多功能 Internet 邮件扩充服务)。

    格式为 类型/子类型 如果 text/html text 是一个传输的类型 html 是 text类型下的子类型

    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    

    浏览器支持的语言类型,从左向右依次优先 q代表权重 0-1 0 代表不支持. 如果不写默认为0.

    Accept-Encoding: gzip, deflate
    

    指定浏览器可以支持的web服务器返回内容压缩编码类型。

    Cookie:.CNBlogsCookie=F60A94A4CE998B3322717EB5B2C99CE088......
    

    HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。..比如说我们的保存的账号密码等等

    Connection: keep-alive
    

    TCP连接的类型,表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

    keep-alive 表示 进行持久连接,减少多次请求时的资源浪费

    Upgrade-Insecure-Requests: 1
    

    告诉浏览器可以将HTTP请求自动升级到HTTPS请求。

    If-Modified-Since: Thu, 03 Aug 2017 08:11:01 GMT
    

    发送本地缓存的最新事件,服务端会进行比价,如果相同就会直接显示缓存的内容,否则从服务器获取,从重新缓存。

    Cache-Control: max-age=0
    

    指定请求和响应遵循的缓存机制,常见的取值有private、no- cache、max-age、must-revalidate等 ,默认取值为 private 每次刷新网页都会重新访问服务器.

    例子 max-age=5 标识5秒内再次刷新不会访问服务器。

    HTTP响应

    HTTP的响应和HTTP的请求详细,由三部分组成

    1. HTTP协议版本 代码描述
    2. 响应头
    3. 响应正文
    分析
    //HTTP 协议 和 响应代码
    HTTP/1.1 200 OK
    //响应头
    Date: Thu, 03 Aug 2017 11:55:58 GMT
    Content-Type: text/html; charset=utf-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    Cache-Control: private, max-age=10
    Expires: Thu, 03 Aug 2017 11:56:08 GMT
    Last-Modified: Thu, 03 Aug 2017 11:55:58 GMT
    X-UA-Compatible: IE=10
    X-Frame-Options: SAMEORIGIN
    Content-Encoding: gzip
    
    //响应正文
    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>鲁迅认识的那只猹 - 博客园</title>
    <!--
    各种html代码
    -->
    		
    <!--done-->
    Copyright &copy;2017 鲁迅认识的那只猹
    	</div><!--end: footer -->
    </div><!--end: home 自定义的最大容器 -->
    </body>
    </html>
    
    响应代码
    HTTP/1.1 200 OK
    

    代表 HTTP的版本 和 响应码

    • 1xx 信息类 表示接收到web浏览器的请求 正在进一步处理
    • 2xx 成功类 标识用户请求被正确接收,和处理 常见的 200 OK
    • 3xx 冲定向类 标识请求没有成功,客户必须采取进一步的动作
    • 4xx 客户端错误 标识客户端提交了错误的请求 如 404 代码 资源不存在
    • 5xx 服务器错误 标识服务器不能对请求 例如 500
    响应头
    Date: Thu, 03 Aug 2017 11:55:58 GMT
    

    原始服务器消息发出的时间

    Content-Type: text/html; charset=utf-8
    

    返回的MIME类型

    Transfer-Encoding: chunked
    

    文件传输编码

    Connection: keep-alive
    

    连接类型

    Vary: Accept-Encoding
    

    用于服务器的缓存。

    Cache-Control: private, max-age=10
    

    告诉客户端是否进行缓存和缓存的策略

    Expires: Thu, 03 Aug 2017 11:56:08 GMT
    

    用来控制缓存,告诉浏览器本期响应的过期时间,如果过了这个事件缓存器就会重新请求。

    Last-Modified: Thu, 03 Aug 2017 11:55:58 GMT
    

    请求资源的最后修改时间

    X-UA-Compatible: IE=10
    

    推荐的渲染引擎

    X-Frame-Options: SAMEORIGIN
    

    防止被别人frame就是防止别人偷偷的包含你的网页在他网页里

    1. DENY:浏览器拒绝当前页面加载任何Frame页面
    2. SAMEORIGIN:frame页面的地址只能为同源域名下的页面
    3. ALLOW-FROM:origin为允许frame加载的页面地址
    Content-Encoding: gzip
    

    web服务器支持的返回内容压缩编码类型。

    响应正文

    根据不同的请求会返回不同的报文 比如本次请求返回的html页面。

  • 相关阅读:
    性能优化与使用Block实现数据回传(3)
    封装思想和抽取(2)
    磁盘缓存的计算与清理(1)
    滑动返回的延伸(全局滑动返回功能)
    滑动返回功能被覆盖的解决思路
    OC之类与对象
    OC之OC与C的比较
    OC之知识储备篇
    C语言之总结3
    C语言总结2
  • 原文地址:https://www.cnblogs.com/slyfox/p/7282007.html
Copyright © 2011-2022 走看看