TCP/IP通信传输流
各种协议与HTTP协议的关系
DNS协议、TCP协议与IP协议在使用HTTP协议的通信过程中各自发挥的作用
- 客户端:
HTTP协议的职责:生成针对目标Web服务器的HTTP请求报文(请求http://hackr.jp/xss页面的资源)
TCP协议的职责:为了方便通信,将HTTP请求报文分割成报文段(b按序号分为多个报文段),把每个报文段可靠地传给对方。
- 链路:
IP协议的职责:负责路由选择,搜索对方的地址,一边中转(路由)一边传送
- 服务端:
TCP协议的职责:从对方那里接受到的报文段进行重组,并按序号以原来的顺序重组请求报文。
HTTP协议的职责:对Web服务器请求的内容的处理。(原来客户端想要这台服务器上的/xss/资源)
HTTP协议的请求与响应
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
响应报文段基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首选字段以及响应实体主体构成。
使用Cookie的状态管理
HTTP是无状态的,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
Cookie会根据从服务器端发送的相应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发送来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
1、请求报文(没有Cookie信息的状态)
GET /reader/ HTTP/1.1
Host:hackr.jp
*首部字段内没有Cookie的相关信息
2、响应报文(服务器端c生成Cookie信息)
HTTP/1.1 200 OK
Date:Thu,12 Jul 2012 07:12:20 GMT
Server:Apache
<Set-Cookie:sid=1342077140226724;path=/;expires=Wed,10-Oct-12 07:12:20 GMT>
Content-Type:text/plain;charset=UTF-8
3、请求报文(自动发送保存d着的Cookie信息)
GET /image/ HTTP/1.1
Host:hackr.jp
Cookie:sid=1342077140226724
HTTP状态码
1XX:Informational(信息性状态码),接收的请求正在处理
2XX:Success(成功状态码),请求正常处理完毕
3XX:Redirection(重定向状态码),需要进行附加操作以完成请求
4XX:Client Error(客户端错误状态码),服务器无法处理客户端的请求
5XX:Server Error(服务端错误状态码),c服务器处理请求出错
1、2XX 成功
200 OK
204 No Content(服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分)
206 Partial Content(客户端进行了范围q请求,而服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容)
2、3XX 重定向
301 Moved Permanently(永久性重定向,请求的资源已被分配了新的URI,以后应使用资源现在所指的URI)
302 Found(临时性重定向,请求的资源已被分配了新的URI,希望用户能使用新的URL访问)
303 See Other(由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源)
304 Not Modified(客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况)
307 Temporary Redirect(临时重定向)
3、4XX 客户端错误
400 Bad Request(请求报文中存在语法错误,当错误a发送时,需修改请求的内容后再次发送请求)
401 Unauthorized(发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。返回y含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询challenge用户信息,当浏览器初次s接收到401响应,会弹出认证用的对话窗口。)
403 Forbidden(表明对请求资源的访问被服务器拒绝了。可能的原因:未获得文件系统的访问授权、访问权限出现某些问题(从未授权的发送源IP地址试图访问)等等情况)
404 Not Found(服务器上无法找到请求的资源)
4、5XX 服务器错误
500 Internal Server Error(服务器端在执行请求时发生了错误,也可能是Web应用存在的bug或某些临时的故障)
503 Service Unavailable(服务器暂时处于超负荷z或正在进行停机维护,现在无法处理请求)