- API攻防:Web API安全指南
- (美)科里·鲍尔
- 717字
- 2024-12-11 17:09:06
1.1.2 HTTP请求
当终端用户通过Web浏览器访问特定URL时,浏览器会自动生成一个HTTP请求以获取相应的资源。所请求的资源通常是构成网页的文件,这些文件包含被请求的信息。此请求将通过互联网或网络路由发送至Web服务器,并在该处进行首次处理。若请求构造正确,Web服务器将把请求转发给Web应用程序。
代码清单1-1显示了对twitter.com进行身份验证时发送的HTTP请求。
代码清单1-1 对twitter.com进行身份验证时发送的HTTP请求
POST❶ /sessions❷ HTTP/1.1❸ Host: twitter.com❹ User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 444 Cookie: _personalization_id=GA1.2.1451399206.1606701545; dnt=1; username_or_email%5D=hAPI_hacker& ❺password%5D=NotMyPassword❻ %21❼
HTTP请求由方法❶、资源路径❷和协议版本❸组成。方法部分将在后续的“HTTP方法”一节中进行详细描述,它表达了客户端对服务器的需求。在此,使用POST方法将登录凭证发送至服务器。路径可以包含整个URL、绝对路径或相对路径中的一个资源。此请求中,路径/sessions指明了处理Twitter认证请求的页面。
请求中包含一系列标头,这些键值对用于在客户端与Web服务器之间传递特定信息。标头以标头名称为始,后跟一个冒号(:),接着是标头的值。Host标头❹指定了域名主机,即twitter.com。User-Agent标头描述了客户端的浏览器和操作系统。Accept标头列出了浏览器能接收Web应用程序响应的各类内容。并非所有标头都是必需的,根据请求的需要,客户端和服务器可能包含其他未在此展示的标头。例如,此请求中包含一个Cookie标头,用于在客户端和服务器之间建立有状态的连接(关于此点,后续章节将有更多介绍)。欲了解更多关于各类标头的信息,请查阅Mozilla开发者页面关于标头的更多内容。
标头以下的部分为消息主体,即请求者试图让Web应用程序处理的信息。在此例中,主体包含用于认证Twitter账户的用户名❺和密码❻。主体中的某些字符会被自动编码,如感叹号(!)被编码为%21❼。对字符进行编码,是Web应用程序用来安全处理那些可能引发问题的字符的一种手段。