HTTP状态码及扩展

在Snrks Discord Monitor中的日志截取到如下,对中间一些知识点做整理。

1
2
3
4
2020-01-23 15:01:54,486 - /home/araid/.local/lib/python3.6/site-packages/urllib3/connectionpool.py[line:959] - DEBUG: Starting new HTTPS connection (1): api.nike.com:443
2020-01-23 15:01:54,891 - /home/araid/.local/lib/python3.6/site-packages/urllib3/connectionpool.py[line:437] - DEBUG: https://api.nike.com:443 "GET /snkrs/content/v1/?country=CN&language=zh-Hans&orderBy=published&offset=0 HTTP/1.1" 400 127
2020-01-23 15:02:04,904 - /home/araid/.local/lib/python3.6/site-packages/urllib3/connectionpool.py[line:959] - DEBUG: Starting new HTTPS connection (1): api.nike.com:443
2020-01-23 15:02:05,013 - /home/araid/.local/lib/python3.6/site-packages/urllib3/connectionpool.py[line:437] - DEBUG: https://api.nike.com:443 "GET /snkrs/content/v1/?country=CN&language=zh-Hans&orderBy=published&offset=0 HTTP/1.1" 200 96165

  1. GET请求
    整个Monitor的原理是经抓包得到的Nike Snkrs的API,通过URL发起GET请求。Query String Parameters包括四个:country(国家), lanuage(语言), offset(偏移量,一页有50条数据), orderBy(排序方式published和lastUpdated)。GET用于请求指定的页面信息,并返回实体主体。

  2. HTTP状态码
    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。日志中出现的有200(请求成功), 400(Bad Request 客户端请求的语法错误)。还有其他常见的如404 Not Found(服务器无法根据客户端的请求找到资源), 403 Forbidden(服务器拒绝执行客户端请求), 500 Internal Server Error(服务器内部错误,无法完成请求), 504 Gateway Time-out(充当网关或代理的服务器,未及时从远端服务器获取请求)。

  3. HTTP/1.0和HTTP/1.1的区别

  • HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。
  • HTTP1.1在Request消息头里头多了一个Host域, HTTP1.0则没有这个域。
  • HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法。