Session
Session
在client-server协议(如HTTP)中,会话由三个阶段组成:
- 客户端建立TCP连接(或者如果传输层不是TCP,则为适当的连接)。
从HTTP/1.1开始,连接在完成第三阶段后不再关闭,并且客户端现在被授予进一步的请求:这意味着第二和第三阶段现在可以执行任意次数。
建立连接
在client-server协议中,它是建立连接的客户端。在HTTP中打开连接意味着在底层传输层中启动连接,通常这是TCP。
使用TCP时,计算机上的HTTP服务器的默认端口是端口80.也可以使用其他端口,例如8000或8080.要提取的页的URL包含域名和端口号,但如果是80,则后者可以省略。有关更多详细信息,请参阅识别Web上的资源。
注意:
客户端 - 服务器模型不允许服务器在没有明确请求的情况下向客户端发送数据。要解决此问题,网页开发人员使用多种技术:通过定期ping服务器XMLHTTPRequest
,Fetch
API的使用HTML 的WebSockets API,或类似的协议。
发送客户请求
建立连接后,用户代理可以发送请求(用户代理通常是Web浏览器,但可以是其他任何内容,例如爬行器)。客户端请求由文本指令组成,由CRLF(回车符,后跟换行符)分隔,分为三个块:
- 第一行包含一个请求方法及其参数:
示例请求
获取developer.mozilla.org的根页面(即http://developer.mozilla.org/),并在可能的情况下告诉服务器用户代理程序将偏好法语页面:
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
观察最后的空行,这将数据块从标题块中分离出来。由于没有Content-Length provided in an
HTTP标头,此数据块显示为空白,表示标头结束,允许服务器在收到此空行时处理请求。
例如,发送表单的结果:
POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded
name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue
请求方法
HTTP定义了一组请求方法,指示对资源执行的所需操作。尽管它们也可以是名词,但这些请求方法有时也被称为HTTP动词。最常见的要求是GET
和POST
:
GET
方法请求指定资源的数据表示。请求使用GET
只应检索数据。
服务器响应的结构
连接的代理发送请求后,Web服务器处理它,最终返回响应。与客户端请求类似,服务器响应由文本指令形成,由CRLF分隔,但分为三个块:
- 第一行是
状态行
,包含对所使用的HTTP版本的确认,其后是状态请求(以及其可读文本中的简短含义)。
示例响应
成功的网页回应:
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
通知所请求的资源已永久移动:
HTTP/1.1 301 Moved Permanently
Server: Apache/2.2.3 (Red Hat)
Content-Type: text/html; charset=iso-8859-1
Date: Sat, 09 Oct 2010 14:30:24 GMT
Location: https://developer.mozilla.org/ (this is the new link to the resource; it is expected that the user-agent will fetch it)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
X-Cache-Info: caching
X-Cache-Info: caching
Content-Length: 325 (the content contains a default page to display if the user-agent is not able to follow the link)
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://developer.mozilla.org/">here</a>.</p>
<hr>
<address>Apache/2.2.3 (Red Hat) Server at developer.mozilla.org Port 80</address>
</body></html>
通知所请求的资源不存在:
HTTP/1.1 404 Not Found
Date: Sat, 09 Oct 2010 14:33:02 GMT
Server: Apache
Last-Modified: Tue, 01 May 2007 14:24:39 GMT
ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1"
Accept-Ranges: bytes
Content-Length: 10732
Content-Type: text/html
<!DOCTYPE html... (contains a site-customized page helping the user to find the missing resource)
响应状态码
HTTP响应状态代码指示特定的HTTP请求是否已成功完成。响应分为五类:信息响应,成功响应,重定向,客户端错误和服务器错误。
200
: 好, 该请求已成功。
另请参阅
- 识别Web上的资源