XSS学习1之http回顾
1. HTTP的基本结构与工作流程
HTTP是一个请求-响应协议,基于客户端与服务器之间的交互。每次用户通过浏览器请求某个资源时,HTTP协议都会完成一系列的步骤。
HTTP请求:
HTTP请求由以下几个部分构成:
-
请求行:
-
请求方法:如GET、POST、PUT、DELETE等,指示客户端希望对服务器上的资源执行什么操作。
-
请求的URL:如
https://www.example.com/index.html
,指示客户端请求的资源路径。 -
HTTP版本:如
HTTP/1.1
,说明客户端和服务器之间使用的协议版本。
-
-
请求头:提供关于请求的附加信息,如:
-
User-Agent
:浏览器的类型。 -
Accept
:客户端能够处理的响应内容类型。 -
Authorization
:用于认证的凭证(如果有的话)。 -
Cookie
:包含客户端存储的Cookies。
-
-
请求体(可选):当客户端发送数据时(如表单提交或上传文件),请求体中包含数据内容。通常出现在POST请求中。
HTTP响应:
HTTP响应由以下几个部分构成:
-
状态行:
-
HTTP版本:响应使用的HTTP版本,如
HTTP/1.1
。 -
状态码:指示服务器处理请求的结果,分为不同类别,如2xx表示成功,4xx表示客户端错误,5xx表示服务器错误等。
-
状态描述:一个简短的说明,帮助客户端理解状态码的含义。
-
-
响应头:提供关于响应的附加信息,例如:
-
Content-Type
:指定响应体的类型(如text/html
、application/json
)。 -
Content-Length
:响应体的长度(字节数)。 -
Set-Cookie
:设置新的cookie,客户端可保存并在后续请求中使用。 -
Cache-Control
:指示缓存机制的行为。
-
-
响应体:实际的资源数据,如HTML页面、图片、JSON数据等。
2. HTTP状态码详解
状态码分为5类:
-
1xx(信息性状态码):表示请求已经接收,继续处理(例如:100 Continue)。
-
2xx(成功状态码):表示请求已成功处理(例如:200 OK,201 Created)。
-
3xx(重定向状态码):表示需要进一步的操作才能完成请求(例如:301 Moved Permanently,302 Found)。
-
4xx(客户端错误状态码):表示请求错误,客户端可能需要修改请求(例如:404 Not Found,403 Forbidden)。
-
5xx(服务器错误状态码):表示服务器处理请求时出现了错误(例如:500 Internal Server Error,502 Bad Gateway)。
3. HTTP方法与语义
常见的HTTP方法:
-
GET:请求资源,数据通过URL传输,通常用于查询资源。GET请求应是安全的和幂等的,即它不会修改服务器上的数据。
-
POST:向服务器发送数据,通常用于提交表单或上传文件。POST请求可以产生副作用(例如修改数据库内容)。
-
PUT:更新现有资源,通常通过传送完整的资源信息来替代现有资源。
-
DELETE:删除指定资源。
-
PATCH:对资源进行部分更新。
-
HEAD:与GET类似,但不返回响应体,仅返回响应头。
-
OPTIONS:请求获取服务器支持的HTTP方法,常用于跨域请求中的预检请求。
4. HTTP的连接机制:无状态与持久连接
HTTP协议是“无状态的”,这意味着每次请求都是独立的,服务器不会保存任何关于客户端请求的状态信息。因此,每次请求都必须携带完整的上下文信息(如Cookies)。
1.1 无状态的特点:
-
服务器处理请求时不会记住任何过去的请求信息。
-
每次请求都必须包含足够的上下文信息,确保服务器能够理解并正确处理该请求。
1.2 持久连接(HTTP/1.1及以上)
在HTTP/1.0中,每个请求和响应都需要重新建立TCP连接,这样效率较低。HTTP/1.1引入了持久连接(或称为“连接复用”),即在一个TCP连接中可以发送多个请求和响应。持久连接使用Connection: keep-alive
头来告知服务器和客户端保持连接,不必每次都建立新的连接。
1.3 管道化(Pipelining)
HTTP/1.1还支持请求管道化,即多个请求可以同时在一个连接上发出,而无需等待每个请求的响应。这在HTTP/1.1中并未广泛使用,因为大多数代理服务器和浏览器并不支持完全的管道化。
5. HTTPS:加密的HTTP协议
HTTP是明文传输协议,数据可以被中间人监听或篡改。因此,HTTP在很多场合并不够安全。为此,HTTPS(HyperText Transfer Protocol Secure)应运而生,它通过SSL/TLS协议对HTTP请求和响应进行加密,提供以下优势:
-
数据加密:确保传输的数据不会被中途拦截或篡改。
-
身份认证:通过证书验证服务器身份,防止欺骗网站。
-
数据完整性:确保数据在传输过程中不会被篡改。
HTTPS协议基于公钥和私钥加密机制,采用三阶段的握手过程来建立安全连接:客户端验证服务器身份、生成会话密钥、使用该密钥加密数据。
6. HTTP/2与HTTP/3的演进
随着Web应用对性能的要求越来越高,HTTP也经历了几次重要的演进,尤其是HTTP/2和HTTP/3。
6.1 HTTP/2
HTTP/2通过采用多路复用(Multiplexing)和流控制技术,显著提高了数据传输的效率:
-
多路复用:允许多个请求和响应在同一TCP连接中并行传输,消除了HTTP/1.x中队头阻塞的问题。
-
头部压缩:通过HPACK算法减少头部信息的传输大小,减少网络带宽占用。
-
服务器推送:允许服务器主动将资源推送给客户端,减少等待时间。
6.2 HTTP/3
HTTP/3基于QUIC(Quick UDP Internet Connections)协议,它是一个基于UDP的传输协议。相比TCP,QUIC有以下优势:
-
减少连接建立时间:QUIC支持0-RTT连接建立,极大地缩短了延迟。
-
更好的抗丢包能力:QUIC在数据丢失时不会像TCP那样全局阻塞,从而提高了网络效率,尤其在移动网络上表现突出。
-
内建加密:QUIC协议本身支持TLS加密,提升了安全性。
7. 缓存与代理
HTTP协议还涉及到缓存和代理的概念,以提高性能和降低带宽消耗。
-
缓存控制:通过HTTP头(如
Cache-Control
、ETag
)来控制资源的缓存策略。 -
代理服务器:充当客户端与服务器之间的中介,缓存常用资源,减少请求次数,或进行负载均衡。