HTTP学习笔记

1. HTTP工作原理

 HTTP协议(HyperText Transfer Protocol,超文本传输协议),基于TCP/IP通信协议传递数据,属于应用层协议,所有wwww文件都必须遵守这个标准。HTTP协议经历HTTP/0.9(只接受get请求方法)到HTTP/1.0(第一个在通讯中指定版本号的HTTP协议版本,在代理服务器中广泛应用)再到现在的HTTP/1.1(默认采用持久连接,能很好地配合代理服务器工作,还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度),以及下一代的HTTP/2.0,Google也提出了基于UDP实现的QUIC协议,能提供更可靠更高效的传输协议,这些都在说明更好的传输协议一直都在路上。

 Http协议应用于C/S架构上(也可以用于其他目的),客户端(通常理解为浏览器)通过URL向HTTP服务端(WEB服务器)发送请求,默认端口号为80。常用的Web服务器有IIS、Apache等;关于HTTP有一些基本性质:

  • HTTP是无连接:即限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间;
  • HTTP是媒体独立的:表示只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的MIME-type内容类型;
  • HTTP是无状态的:它对于事务处理没有记忆能力,服务器不会在两个请求之间保留任何数据(状态)。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快;但是可以使用Cookies创建有状态的会话。
  • HTTP是可扩展的:在HTTP/1.0中出现的HTTP headers让协议扩展变得非常容易。只要服务端和客户端就新headers达成语义一致,新功能就可以被轻松加入进来;

【注意】

关于HTTP和连接这两者的关系:

 一个连接是由传输层来控制的,从根本上讲连接不属于HTTP的范围,HTTP并不需要其底层的传输层协议是面向连接的,只需要它是可靠的,或不丢失消息的(至少返回错误)。在当前,两个最常用的传输层协议:TCP是可靠的,而UDP不是。因此,HTTP依赖于面向连接的TCP进行消息传递,但连接并不是必须的。

 HTTP协议的工作流程主要如下:
这里写图片描述

其实上述的流程可以直接抽象为:
这里写图片描述

客户端通过代理发出请求,这里的代理通常是指浏览器,但不局限于浏览器,这个代理可能是任何一个东西,比如是一个机器爬虫,在RequestsResponses通信之间存在许多代理,比如网关、cache等,计算机和其他设备转发HTTP消息如果表现在应用层,就称之为代理,代理的作用主要:

  • 缓存(可以是公开的也可以是私有的,像浏览器的缓存);
  • 过滤(像反病毒扫描,家长控制…);
  • 负载均衡(让多个服务器服务不同的请求);
  • 认证(对不同资源进行权限管理);
  • 日志记录(允许存储历史信息);

 HTTP良好的扩展性使得越来越多的Web功能归其控制。缓存和认证很早就可以由HTTP来控制了,到目前为止,常见可控特性还有:

  • 缓存

    文档如何缓存能通过HTTP来控制。服务端能告诉代理和客户端哪些文档需要被缓存,缓存多久,而客户端也能够命令中间的缓存代理来忽略存储的文档。

  • 开放同源限制

    为了防止网络窥听和其它隐私泄漏,浏览器强制对Web网站做了分割限制。只有来自于相同来源的网页才能够获取网站的全部信息。这样的限制有时反而成了负担,HTTP可以通过修改头部来开放这样的限制,因此Web文档可以是由不同域下的信息拼接成的(某些情况下,这样做还有安全因素考虑)。

  • 认证

    一些页面能够被保护起来,仅让特定的用户进行访问。基本的认证功能可以直接通过HTTP提供,使用Authenticate相似的头部即可,或用HTTP Cookies来设置指定的会话。

  • 代理和隧道

    通常情况下,服务器和/或客户端是处于内网的,对外网隐藏真实 IP 地址。因此 HTTP 请求就要通过代理越过这个网络屏障。但并非所有的代理都是 HTTP 代理。例如,SOCKS协议的代理就运作在更底层,一些像 FTP 这样的协议也能够被它们处理。

  • 会话

    使用HTTP Cookies允许你用一个服务端的状态发起请求,这就创建了会话。虽然基本的HTTP是无状态协议。这很有用,不仅是因为这能应用到像购物车这样的电商业务上,更是因为这使得任何网站都能轻松为用户定制展示内容了。

2. HTTP消息结构

 前面在第一章节中提过,HTTP是应用于C/S架构上,客户端通常是浏览器(向客户端发送请求Requests),服务端则通常是一个WEB服务(接受客户端请求返回数据Responses),这就构成了传统意义上HTPP协议的“拉拽”模型。HTTP使用统一资源标识(URI,Uniform Resource Identifiers)符来建立连接和传输数据。其中客户端发送请求和服务端响应消息需要遵循一定的格式,下面是部分摘取(以百度为例):

1.客户端发送的请求消息包括:请求行、请求头、空行和请求数据4部分,请求报文的一般格式如下:

这里写图片描述

下面是向百度发起请求的消息(非解析状态):

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: BD_UPN=12314753; BAIDUID=BF6825EA8000ED7973BCDB39508327A4:FG=1; BIDUPSID=BF6825EA8000ED7973BCDB39508327A4; PSTM=1535768001; delPer=0; BD_CK_SAM=1; PSINO=6; pgv_pvi=3248832512; pgv_si=s8929636352; H_PS_PSSID=1464_21127_26350_22157; H_PS_645EC=d06eBpcQQYGTMiTkNvsj8H7MhK1Bj%2FmXKTemNFh8neCjOehV6%2BvlAEGr21o; BDSVRTM=0
第一行`GET / HTTP/1.1`是请求行,`GET`是请求方法,`/`是URL,`HTTP/1.1`是协议版本,下面的几行如`Host`、`Connection`和`Accept-Language`都是可选头部,这玩意儿比较多,下面给出一些标准请求头的说明:





































































































Header field name Description Example Status
A-IM Acceptable instance-manipulations for the request[7]. A-IM: feed Permanent
Accept Media type(s) that is(/are) acceptable for the response. See Content negotiation. Accept: text/html Permanent
Accept-Charset Character sets that are acceptable. Accept-Charset: utf-8 Permanent
Accept-Datetime Acceptable version in time. Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT Provisional
Accept-Encoding List of acceptable encodings. See HTTP compression. Accept-Encoding: gzip, deflate Permanent
Accept-Language List of acceptable human languages for response. See Content negotiation. Accept-Language: en-US Permanent
Access-Control-Request-Method,
Access-Control-Request-Headers
[8]
Initiates a request for cross-origin resource sharing with Origin (below). Access-Control-Request-Method: GET Permanent: standard
Authorization Authentication credentials for HTTP authentication. Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Permanent
Cache-Control Used to specify directives that must be obeyed by all caching mechanisms along the request-response chain. Cache-Control: no-cache Permanent
Connection Control options for the current connection and list of hop-by-hop request fields.[9]

Must not be used with HTTP/2.[10]

Connection: keep-alive

Connection: Upgrade

Permanent
Content-Length The length of the request body in octets (8-bit bytes). Content-Length: 348 Permanent
Content-MD5 A Base64-encoded binary MD5 sum of the content of the request body. Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== Obsolete[11]
Content-Type The Media type of the body of the request (used with POST and PUT requests). Content-Type: application/x-www-form-urlencoded Permanent
Cookie An HTTP cookie previously sent by the server with Set-Cookie (below). Cookie: $Version=1; Skin=new; Permanent: standard
Date The date and time that the message was originated (in “HTTP-date” format as defined by RFC 7231 Date/Time Formats). Date: Tue, 15 Nov 1994 08:12:31 GMT Permanent
Expect Indicates that particular server behaviors are required by the client. Expect: 100-continue Permanent
Forwarded Disclose original information of a client connecting to a web server through an HTTP proxy.[12]
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43 Forwarded: for=192.0.2.43, for=198.51.100.17 Permanent
From The email address of the user making the request. From: user@example.com Permanent
Host The domain name of the server (for
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值