第三章、Web应用程序技术——HTTP(一)
上章提到,这一章包含了web的基础知识,重点为
- HTTP
- web功能
- 编码方案
如果各位有web经验者提出建议,感激不尽。
3.1、HTTP
HTTP(HyberText Transfer Protocol),超文本传输协议。它是访问万维网核心通信协议。最初 用来传输静态文档。后来经过扩展利用,支持web应用程序这种复杂的传输。
HTTP是用于传输HTML文档的==应用层==协议,它遵循 客户端-服务器 模型:
- ==客户端==与服务器==建立连接==
- ==客户端==向服务器==发出请求==
- ==服务器==响应请求==返回数据==
-
==客户端==与服务器==断开连接==
此外,HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据。也就是说请求之间完全独立。
这也是第一章中为什么要用session(会话)和cookie的原因。因为无状态的http协议无法保存用户信息之类的数据。
HTTP消息(报文)
HTTP消息分为两种,请求与响应。每个消息组成:
- 消息头(header)(一个消息头是其中的一行或多行)
- 空行
- 消息主体(可选)
HTTP请求
HTTP请求举例如下:
GET /item/http HTTP/1.1 //请求方法 URL请求资源名称 HTTP版本号
Host: baike.baidu.com //请求完整URL的主机名
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36 //客户端系统的概况,浏览器内核等等
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: https://baike.baidu.com/item/http/243074?fr=aladdin
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: //提交浏览器发给用户的参数
HTTP响应
HTTP响应举例如下:
HTTP/1.1 200 OK //HTTP版本号 数字状态码 响应状态
Bdpagetype: 3
Bdqid: 0xde99cb9f00006bf2
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8 //消息主体的文档类型
Cxy_all:
Cxy_ex:
Date: Sun, 12 Jan 2020 07:38:52 GMT
Is_status: 0
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1 //指明服务器软件,有时还有服务器所安装模块和系统
Set-Cookie: //向浏览器发送一个cookie,在随后的请求中会返回
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Set-Cookie:
Strict-Transport-Security: max-age=172800
Traceid:
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
HTTP请求方法
最常用的两种请求方法:GET、POST
==GET方法==(读取):获取请求的资源,无论获取多少遍都对资源没有副作用。GET请求没有消息主体,因此在消息头后的空白行是没有其他数据。
==POST方法==:执行操作,向服务器发送含参数的消息主体,这会对请求的资源产生副作用。比如点击下单操作,服务器将返回下单之后的内容。
其他请求方法:
HEAD:这个请求的功能与GET请求相似,不同之处在于服务器不会再其响应中返回消息主体,因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。
TRACE:在返回响应主体中包含请求消息的内容。用于检测是否有代理。
OPTION:用于服务器报告对于某一特定资源的有效HTTP方法。
PUT:试图使用包含在请求主体里的内容,向服务器上传指定资源。渗透人员可以通过上传任意脚本执行来攻击。
URL
URL(Uniform Resource Locator),统一资源定位符。是标识web资源的唯一标识符。
具体格式如下:
protocol://hostname[:port]/[/path]file[?pram=value]
其实正式属于叫做URI(Uniform Resource Identifier),统一资源标识符。有人非要炫耀着这么叫,就给他两巴掌。
HTTP消息头
常用消息头:
- Connection:用于高速通信另一端保持连接还是关闭
- Content-Encoding:指定消息主体的编码形式
- Content-Length:规定消息主体的字节长度
- Content-Type:规定消息主体的内容类型
- Transfer-Encoding:指定消息主体使用任何编码(块编码)
请求消息头:
- Accept:告诉服务器愿意接受哪些内容
- Accept-Encoding:告诉服务器客户端愿意接受哪种编码
- Authorization:用于为一种内置HTTP身份验证向服务器提交证书
- Cookie:向服务器提交它以前发布的cookie
- Host:指定现在被请求的完整URL的主机名
- Referer:用于指示提出当前请求的原始URL
- User-Agent:提供浏览器的信息
响应消息头:
- Cache-Control: 向浏览器传送缓存指令(如no-cache)
- Server:提供web服务器软件信息
- Set-Cookie:用于向浏览器发布cookie,浏览器在随后的请求中返回服务器