作者归档:华帅

关于华帅

shuai

HTTP首部自定义字段

查找了很多资料,HTTP首部的自定义字段,有些虽然不是标准,但是事实已经是标准。
HTTP 消息头用来准确描述正在获取的资源、服务器或者客户端的行为。 自定义专用消息头可通过’X-‘ 前缀来添加; 其他的消息头在 IANA 注册表 中列出, 其原始内容在 RFC 4229中定义. IANA 同时还维护了被提议的新HTTP 消息头注册表.  来源自https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers的解释:
1.例如在CDN里面使用,确认自己的内容是不是被CDN缓存了、在什么节点缓存、在内存还是硬盘缓存。
腾讯的 www.qq.com
  1. Cache-Control:
    max-age=60
  2. Connection:
    keep-alive
  3. Content-Encoding:
    gzip
  4. Content-Type:
    text/html; charset=GB2312
  5. Date:
    Tue, 10 Oct 2017 06:41:32 GMT
  6. Expires:
    Tue, 10 Oct 2017 06:42:32 GMT
  7. Server:
    squid/3.5.20
  8. Transfer-Encoding:
    chunked
  9. Vary:
    Accept-Encoding
  10. Vary:
    Accept-Encoding
  11. Vary:
    Accept-Encoding
  12. X-Cache:
    HIT from shenzhen.qq.com #自定义字段,给CDN使用
  13. 腾讯云CDN的字段和他们自有用的产品貌似不一样
  14. X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存。
  15. X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘。
  16. X-Cache-Lookup:Hit From Upstream 表示没有命中 CDN。
  17. 淘宝的www.taobao.com的描述和阿里云CDN的产品描述是一样的
    1. Age:
      761
    2. Cache-Control:
      max-age=0, s-maxage=3600
    3. Connection:
      keep-alive
    4. Content-Encoding:
      gzip
    5. Content-Type:
      text/html; charset=utf-8
    6. Date:
      Tue, 10 Oct 2017 06:48:58 GMT
    7. EagleId:
      7909d4e615076181383338721e
    8. Server:
      Tengine
    9. Strict-Transport-Security:
      max-age=31536000
    10. Timing-Allow-Origin:
      *
    11. Transfer-Encoding:
      chunked
    12. Vary:
      Accept-Encoding
    13. Vary:
      Ali-Detector-Type, X-CIP-PT
    14. Via:
      cache35.l2cn62[110,200-0,C], cache36.l2cn62[106,0], cache4.cn225[0,200-0,H], cache4.cn225[1,0]
    15. X-Cache:
      HIT TCP_MEM_HIT dirn:-2:-2 mlen:-1 #自定义字段,给CND使用
    16. X-Swift-CacheTime:
      3600
    17. X-Swift-SaveTime:
      Tue, 10 Oct 2017 06:36:17 GMT
    18. 2.在防盗链里面使用
    19. 例如youtube
    1. alt-svc:
      quic=”:443″; ma=2592000; v=”39,38,37,35″
    2. cache-control:
      no-cache
    3. content-encoding:
      br
    4. content-type:
      text/html; charset=utf-8
    5. date:
      Tue, 10 Oct 2017 06:39:47 GMT
    6. expires:
      Tue, 27 Apr 1971 19:44:06 EST
    7. p3p:
      CP=”This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=en for more info.”
    8. server:
      YouTube Frontend Proxy
    9. set-cookie:
      YSC=EToAyfxXAbk; path=/; domain=.youtube.com; httponly
    10. status:
      200
    11. strict-transport-security:
      max-age=31536000
    12. x-content-type-options:
      nosniff
    13. x-frame-options:
      SAMEORIGIN

    14. x-xss-protection:
      1; mode=block; report=https://www.google.com/appserve/security-bugs/log/youtube

    X-Frame-Options 有三个值:

    DENY
    表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
    SAMEORIGIN
    表示该页面可以在相同域名页面的 frame 中展示。
    ALLOW-FROM uri
    表示该页面可以在指定来源的 frame 中展示。

    换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

    3.在各种正向、反向代理,负载均衡设备,CDN中使用的Forwarded 首部
    Forwarded 首部中包含了代理服务器面向客户端的一端,由于代理服务器的在请求路径中的介入而被修改或丢失的信息。但是目前事实上的标准的首部是 X-Forwarded-For 、 X-Forwarded-Host 以及X-Forwarded-Proto
  1. X-Forwarded-For (XFF) :在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。获得最初发起请求的客户端的IP地址,一般在负载均衡设备和CDN上都会添加或修改这个首部
  2. X-Forwarded-Proto (XFP) :用来确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)。在服务器的访问日志中记录的是负载均衡服务器与服务器之间的连接所使用的传输协议,而非客户端与负载均衡服务器之间所使用的协议。为了确定客户端与负载均衡服务器之间所使用的协议, X-Forwarded-For 就派上了用场。
  3.  X-Forwarded-Host (XFH) :用来确定客户端发起的请求中使用  Host  指定的初始域名。 反向代理(如负载均衡服务器、CDN等)的域名或端口号可能会与处理请求的源头服务器有所不同,在这种情况下,X-Forwarded-Host 可以用来确定哪一个域名是最初被用来访问的。这个消息首部会被用来进行调试和统计,以及生成基于位置的定制化内容,按照设计的目的,它会暴露一定的隐私和敏感信息,比如客户端的IP地址。所以在应用此消息首部的时候,需要将用户的隐私问题考虑在内。一般CDN回源和实际使用的域名不一样。




编码问题

各种查资料,研究了一整天,得出了以下结论:

Unicode 只是一个字符集,是一个囊括了世界上所有字符的字符集。

UTF-8、UTF-16是对Unicode的两种变长编码实现方式

Windows下所谓的Unicode编码实际上是UTF-16 LE(记事本另存为的编码选择那里误导了很多人)。

UTF-16 从来都是变长编码,但是UTF-16在绝大多数情况下都是定长的(因为Windows最初只支持2字节长度)

目前大部分网站都是的编码格式都是UTF-8,过去可能为了节约带宽使用其他编码,但是目前文字内容占带宽的比例几乎可以忽略了。<meta charset=”UTF-8″ />

python2默认编码是ASCII,python3默认是UTF-8

wireshark设置Relative sequence number

当某个主机发起一个TCP会话时,初始序列号一般是随机的,某些防火墙也会打乱这些序列号,可能是0和4,294,967,295之间的任意值,但是Wireshark通常显示的都是相对序列号/确认号,而不是实际序列号/确认号,相对序列号/确认号是和TCP会话的初始序列号相关联的。这样便于分析,但是某些时候又想看原始序列号,也是可以设置的
 如果想要关闭相对序列号/确认号,可以选择Wireshark菜单栏中的 Edit -> Preferences ->protocols ->TCP,去掉Relative sequence number后面勾选框中的√即可

 
默认设置是勾上的,

 去除这个选项之后,其实本质上来讲,这个序列号的原始数据是一样的:

 

openvz virtualization技术的 OVZ VPS使用nmap

之前在OVZ的nmap上开nmap结果都是有个 就是提示主机没有一个up的

例如以下

[root@ramnode ~]# nmap qq.com
Starting Nmap 5.51 ( http://nmap.org ) at 2017-03-07 01:30 EST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.47 seconds

google了一下 要加个–unprivileged的参数

[root@ramnode ~]# nmap -Pn qq.com --unprivileged
Starting Nmap 5.51 ( http://nmap.org ) at 2017-03-07 01:36 EST
Nmap scan report for qq.com (125.39.240.113)
Host is up (0.27s latency).
Other addresses for qq.com (not scanned): 61.135.157.156
rDNS record for 125.39.240.113: no-data
Not shown: 997 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
843/tcp open  unknown
Nmap done: 1 IP address (1 host up) scanned in 15.81 seconds

这个问题解决了 但是不知道python-nmap调用这个怎么设置,还要研究下