关闭

HTTP协议

307人阅读 评论(0) 收藏 举报
分类:

参考文档:
1. wireshark怎么抓包、wireshark抓包详细图文教程
2. 深入理解HTTP协议
3. Cache-control 百度百科
4. HTTP中cache-control的应用及说明
5. 让浏览器不再显示https页面中的http请求警报
6. 关于HTTP头(header)的Vary的解释
7. transfer-encoding:chunked的含义

一、使用Wireshark抓包

  1. 安装Wireshark

  2. 通过捕获-捕获过滤器设置捕获过滤器:TCP or UDP port80(HTTP)
    这里写图片描述

  3. 设置显示过滤器:目标地址(如果要增加本地ip过滤:可以添加“or ip.src= 你的ip),目标地址以http://image.baidu.com/ 为例,其ip为:112.80.248.122
    这里写图片描述

    根据域名查询 http://image.baidu.com/ 的ip:在cmd中输入如下:
    C:\Windows\System32>ping image.baidu.com

  4. 从过滤结果中找到对应HTTP结果项,右键-追踪流-TCP流,可以看到三次握手的记录
    这里写图片描述

二、三次握手

从上面抓包的结果可以观察到如下情况:

Created with Raphaël 2.1.0客户端客户端服务器服务器第一次握手:Sequence number: 0;Acknowledgement number:0;Flags: SYN第二次握手;Sequence number: 0;Acknowledgement number: 1;Flags: SYN,ACK第三次握手;Sequence number: 1;Acknowledgement number: 1;Flags: ACK

三、Http请求

经过TCP的三次握手之后才可以发送Http请求。
请求方的http报头结构:通用报头|请求报头|实体报头 。

GET / HTTP/1.1
Host: image.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: ***
Upgrade-Insecure-Requests: 1
User-Agent: ***
Referer: ***
Accept-Encoding: ***
Accept-Language: ***
Cookie: ***
  1. GET / HTTP/1.1 :
    请求方法(GET)、URI协议(HTTP)、版本号(1.1)

  2. Host :
    主机和端口号,这里是域名

  3. Connection :
    此header的含义是当client和server通信时对于长链接如何进行处理。 在http1.1中,client和server都是默认对方支持长链接的,如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。

  4. Cache-Control :
    指定请求的缓存机制,在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。

    属性说明

    Cache-directive 说明
    public 所有内容都将被缓存(客户端和代理服务器都可缓存)
    max-age = * 缓存的内容将在*秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高
    private 内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
    no-cache 必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载
    no-store 所有内容都不会被缓存到缓存或 Internet 临时文件中
    must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

    浏览器响应:

    Cache-directive 在地址栏回车 在新窗口打开该页面 回退到该页面 刷新
    public 读取缓存 读取缓存 读取缓存 访问服务器
    max-age = * 在*秒内读取缓存 在*秒内读取缓存 在*秒内读取缓存 访问服务器
    private 第一次回车访问服务器,再次读取缓存 访问服务器 读取缓存 访问服务器
    no-cache/no-store 访问服务器 访问服务器 访问服务器 访问服务器
    must-revalidation/proxy-revalidation 第一次回车访问服务器,再次读取缓存 访问服务器 读取缓存 访问服务器
  5. Expires
    头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。失效的缓存条目通常不会被缓存(无论是代理缓存还是用户代理缓存)返回,除非首先通过原始服务器(或者拥有该实体的最新副本的中介缓存)验证。(注意:cache-control max-age 和 s-maxage 将覆盖 Expires 头部。)

  6. Accept
    代表发送端(客户端)希望接受的数据类型。

  7. Upgrade-Insecure-Requests
    告诉服务器,浏览器支持将http请求升级为https的操作。

  8. Referer
    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

  9. Accept-Encoding
    声明浏览器支持的编码类型。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间

    Encoding类型 说明
    Accept-Encoding: 默认支持identity
    Accept-Encoding: compress, identity 支持compress 和gzip类型
    Accept-Encoding:compress;q=0.5, gzip;q=1.0 按(q值)顺序支持 gzip , compress
    Accept-Encoding: * 支持任意类型
    不写 支持任意类型

    没有q值定义的情况下,如果Accept-Encoding中有identity 那么应该优先返回identity

  10. Accept-Language
    告诉服务器,浏览器支持什么语言

  11. Cookie
    (1). Cookie 本意是指就着牛奶一起吃的点心。在Internet上,Cookie指的是小量信息
    (2). Cookie是由 Web服务器创建并保存在用户浏览器上的小文本文件,它以key/value的形式保存用户的相关信息,这些数据通常会经过加密处理。
    更多Cookie的介绍参见什么是Cookie?

  12. Authorization
    授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;

四、Http响应

响应格式:状态行|通用报头|响应报头|实体报头

HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Wed, 31 Aug 2016 03:27:04 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Search_result: OK
Server: Apache
Set-Cookie: BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; path=/; domain=.baidu.com
Tracecode: 16246681250496487690083111
Vary: Accept-Encoding
X-Bd-Id: 14704930773111916548
X-Bd-Oc: 0
X-Bd-Ul: 9cd10c5ab95e2efdc2de2f16af6f004c
Transfer-Encoding: chunked
  1. HTTP/1.1 200 OK:
    状态行,包括URI协议、版本号、状态码和原因

  2. Connection
    如果如果server方不想支持长链接,需要明确说明connection的值为close.

  3. Content-Encoding
    文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。

  4. Content-Type:
    表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。

  5. Date
    当前时间

  6. P3p
    提供个人隐私保护策略的东东

  7. Server
    服务端软件信息

  8. Set-Cookie
    回传给客户端的cookie

  9. Vary
    vary的意义在于告诉代理服务器/缓存/CDN,如何判断请求是否一样,vary中的组合就是服务器/缓存/CDN判断的依据,比如Vary中有User-Agent,那么即使相同的请求,如果用户使用IE打开了一个页面,再用Firefox打开这个页面的时候,CDN/代理会认为是不同的页面,如果Vary中没有User-Agent,那么CDN/代理会认为是相同的页面,直接给用户返回缓存的页面,而不会再去web服务器请求相应的页面。

  10. Transfer-Encoding
    用于http传送过程的分块技术,表示输出的内容长度不能确定,常用于动态网页。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80600次
    • 积分:1310
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:2篇
    • 译文:1篇
    • 评论:41条
    文章分类
    最新评论