文章

HTTP

HTTP(HyperText Transfer Protocol)是超文本传输协议。hyper是亢奋、过度的意思,有点儿像super,HyperText就是超级文本,或者说超越普通文本,柯林斯词典对这个词的解释为:In computing, hypertext is a way of connecting pieces of text so that you can go quickly and directly from one to another。

本质上,http还是文本,http请求和响应就是一堆按照http协议定义的格式聚成一坨的plain text。

  1. 请求:客户端向服务器索要数据.
    1. 请求行
    2. 请求头
    3. 请求体
  2. 响应:服务器返回客户端想要的数据.
    1. 状态行
    2. 响应头
    3. 响应体
  3. 示例
    1. Request Headers
    2. Response Headers
  4. Ref

请求:客户端向服务器索要数据.

1
http请求 = '请求行' + '请求头' + '请求体'

请求行

'请求行' = 请求方法 + 请求资源路径 + http协议版本

1
GET /gorgon/request.s?id=cd341f7630f3b6e238586a66f696850c&ct=WIFI&school=BUAA HTTP/1.1
  • 请求方法:GET
  • 请求资源路径:/gorgon/request.s?id=cd341f7630f3b6e238586a66f696850c&ct=WIFI&school=BUAA
  • http协议版本:HTTP/1.1

请求头

‘请求头’:包含了对客户端的环境描述,客户端请求的主机地址等信息.

  • Accept: text/html // 客户端所能接收的数据类型
  • Accept-Language: zh-cn // 客户端的语言环境
  • Accept-Encoding: gzip // 客户端支持的数据压缩格式
  • Host: m.baidu.com // 客户端想访问的服务器主机地址
  • User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 客户端的类型,客户端的软件环境

请求体

‘请求体’:客户端发给服务器的具体数据,比如文件/图片等.

POST发送给服务器的参数全部放在’请求体’中,GET的在’请求行’中。

URL中所有的字符都必须是ASCII码,所以如果URL中出现了中文,需要添加百分号转译。

响应:服务器返回客户端想要的数据.

1
http响应 = '状态行' + '响应头' + '实体内容'

状态行

'状态行' = http协议版本 + 状态码 + 状态英文名称

1
"HTTP/1.1 200 OK"

响应头

‘响应头’:包含了对服务器的描述,对返回数据的描述.

  • Content-Encoding: gzip // 服务器支持的数据压缩格式
  • Content-Length: 1528 // 返回数据的长度
  • Content-Type: application/xhtml+xml;charset=utf-8 // 返回数据的类型
  • Date: Mon, 15 Jun 2015 09:06:46 GMT // 响应的时间
  • Server: apache // 服务器类型

响应体

‘实体内容’:服务器返回给客户端的具体数据(图片/html/文件…).

示例

http://gorgon.youdao.com/gorgon/request.s?id=b6de42029629f42d99be81373ff0bc87请求的两个Header——

Request Headers

1
2
3
4
5
6
7
8
9
GET /gorgon/request.s?id=b6de42029629f42d99be81373ff0bc87 HTTP/1.1
Host: gorgon.youdao.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: LAST_LOGIN=shininglhb@163.com; _ntes_nnid=0a6ca1a5cdd879b2a3097d4edbdd0e1a,1512917045440; P_INFO=yodao_kevin@163.com|1512981952|0|search|11&-2|bej&1512981938&search#bej&null#10#0#0|&0|search|yodao_kevin@163.com; UM_distinctid=160450404391065-05303baecc553b-3970065f-1fa400-1604504043a476; OUTFOX_SEARCH_USER_ID_NCOO=965070882.4392371; JSESSIONID=abcQ1HAqwDNbT5JA1iybw; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; OUTFOX_SEARCH_USER_ID=2057559970@123.113.246.193; youdao_usr_info=dWlkPTg4MzcxNTI3ODI3Nzk4MDc0MjU6ZnJwPWh0dHAlM0ElMkYlMkZnb3Jnb24ueW91ZGFvLmNv_bSUyRmdvcmdvbiUyRnJlcXVlc3QucyUzRmlkJTNEY2QzNDFmNzYzMGYzYjZlMjM4NTg2YTY2ZjY5_Njg1MGM6c2NudD0xOmZ2dD0xNTEzMzE1MzgwNjk2OmZscD1odHRwJTNBJTJGJTJGd3d3LmVmLmNv_bS5jbiUyRm9ubGluZSUyRmxwJTJGY24lMkYyMDE3eXIlMkZtb2JpbGUlMkZoZzIwMTdfdHJhdmVs_LmFzcHglM0ZjdHIlM0RjbiUyNmxuZyUzRGNzJTI2cHRuJTNEeWRhbyUyNmV0YWclM0R5ZGFvLWNo_YWNpLXR1d2VuLUUxNDM5MjA=; youdao_session_info=c2lkPTg4MzcxNTI3ODI3Nzk4MDc0MjUtMTp0aW1lPTE1MTMzMTUzODA2OTY6cHY9MQ==; _ga=GA1.2.1465416227.1513094721; _gid=GA1.2.2042822044.1513094721

Response Headers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 15 Dec 2017 06:35:56 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Adtype: json
X-Clickthrough: http://p.clkservice.youdao.com/clk/request.s?slot=b6de42029629f42d99be81373ff0bc87&k=XxDt00UG3kzHg1LU8s3V3U9f8xR0oHafTqkoCEOQyNTXxo%2BoRxcJpjjAgKuViCqvPU2GI1V3hMYjugRA0%2FY7i7E0W8X8tJLM8dhIJr39UWZOmfqzgQu7FvufNmUYadB7M%2B9CWJQckHPZgzQoxdREa4iThTmx6k6BHvXifp0q6oP4kdGO41x8VdoeN%2FHRTtgz7Jyv6lOkC7ThunabzbmCI2B4MnU0sUsEAfVsB5jmerpvl%2BXsdIzn1m5I8eZ1YBXUz9T5%2BZjkoZ1JC2ekjn0RFxe%2FrsfW5s2KeiV6eBhH4gRrQp%2F0vZEcNFUrXQAn%2BJT6QEZekIv7AJ3I7DSJmdBu7raBxtLPpzkONQSG48yZVsXv92ZohvCsijWkqhDGmj6bKQmFwrAh3WSHg1U2YKavcxq%2BZHWTKjL7ofT69T04Htr5wEKFRvpZLrzx4ZcBU1ndIoFk8HGl5UaKXykm9vQFDboPR1t%2BUPY4jQRtGY3IBWIJMYAP%2FDzOlf%2FDAmAepECGaSTaIlsuC1wp%2Fdp6zK50nn01RHMzBUkX7yIXUKpq2K66LcAaR0ZHC2rbZAtCmJ6ZYkmmz4%2FSt%2B0%2FmdVpCQ3ERwI942ZmMCmGMMTys%2FRX%2BEkVR8iHdR1gtdGvHXXZxurmMb%2Fz%2FHafSjfVQpTZszOIUluTHJC1qEKoZF9ab5pbivmeSLtzGiNJfB6ryg6iRZ2LUs7L6m%2Fpfghvz%2FBxgRq2voSRkZAsxTEn3Bovu0pf2S%2B6PlW2vPOfEW80K0Pzf1A3I3AJBoQOZO6tDrDQ%2FRmIQtfGj6hHFwmmOMCAq5WIKq%2FXxo%2BoRxcJpjjAgKuViCqv7uAg3j3xxF6bL0s9E%2BSRUNndnlEWL937VowxFIjx7Pk%3D&isrd=0&youdao_bid=8ca4ca18-d24a-44ec-9df1-950d6853235e
X-Imptracker: http://dsp-impr2.youdao.com/k.gif?yd_ewp=2055&yd_ext=EnkKATASIGI2ZGU0MjAyOTYyOWY0MmQ5OWJlODEzNzNmZjBiYzg3IlAI5NeuBxDw5P8BGPKzHiC1_RAoq98CMGQ4ZGUAcABFcAB4AIABAJgBAaIBC1RyYWRpdGlvbmFsugESeyJPUkRFUkVEX0lEIjoiMSJ94AGqAzACIiQ4Y2E0Y2ExOC1kMjRhLTQ0ZWMtOWRmMS05NTBkNjg1MzIzNWUobjAAOgBCAFIPMjIwLjE4MS4xMDIuMTgxag0xNTEzMzE5NzU2OTI4eACCAQCIAYcQkAGA6YvHhSyoAQGwAQG4AQHCAQMyMjTIAQHQAQLaAQDiAQDoARyAAmWKAgp0aDA4Mi05MDE2
X-Launchpage: http://dl.phoneplus.langma.cn/apk/PhonePlus-50033-bj.apk?yd_apk_download=1
X-Creativeid: 15444964
X-Adstate: {"code":"21000"}
X-Ad-Ready: http://dsp-impr2.youdao.com/adready.s?ext=CiQ4Y2E0Y2ExOC1kMjRhLTQ0ZWMtOWRmMS05NTBkNjg1MzIzNWUSBjI3ODE5NxoGNDk4MTYyIgc0MTkwODMyKggxNTQ0NDk2NDABOG5AAUoAUBxY4AFiAGogYjZkZTQyMDI5NjI5ZjQyZDk5YmU4MTM3M2ZmMGJjODdwAXoPMjIwLjE4MS4xMDIuMTgxgAEBiAEBkgEAmgEAogEAqgEAsgEAugEAwgEFT1RIRVLKAQDSAQDaASRjYzkzMGIxNC0wNzZhLTQ1NzMtYjcyZC00ZmRiMTAyMjVkNzXgAYXpi8eFLA%3D%3D&t={TIME}
X-Ad-Loaded: http://dsp-impr2.youdao.com/adload.s?ext=CiQ4Y2E0Y2ExOC1kMjRhLTQ0ZWMtOWRmMS05NTBkNjg1MzIzNWUSBjI3ODE5NxoGNDk4MTYyIgc0MTkwODMyKggxNTQ0NDk2NDABOG5AAUoAUBxY4AFiAGogYjZkZTQyMDI5NjI5ZjQyZDk5YmU4MTM3M2ZmMGJjODdwAXoPMjIwLjE4MS4xMDIuMTgxgAEBiAEBkgEAmgEAogEAqgEAsgEAugEAwgEFT1RIRVLKAQDSAQDaASRiMjA1NDNiZS1iNjlhLTQ2M2ItOGRlOC1lMDhmM2RjYzcyMWPgAYXpi8eFLA%3D%3D&t={TIME}
X-Failurl: http://gorgon.youdao.com/gorgon/request.s?id=b6de42029629f42d99be81373ff0bc87&fail=1
Content-Encoding: gzip

Ref

关于http非常不错的学习网站:

  • https://developer.mozilla.org/en-US/docs/Web/HTTP;
  • http://httpbin.org/
本文由作者按照 CC BY 4.0 进行授权