欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Symfony2学习笔记一: HTTP协议

程序员文章站 2022-07-01 15:31:06
...
众所周知,HTTP协议,也称为超文本传输协议,所有web程序都是基于HTTP。

HTTP工作原理: 客户端与服务器端建立连接,完成信息交互

举个例子说明:我们要登录网易163看看最近的新闻,在浏览器上输入http:// www.163.com,敲下回车,浏览器上返回网易的内容。

客户端与服务器端之间的交互,按照以下步骤完成

第一步:客户端(手机端/PC端)发送请求,这些请求的信息按照HTTP协议的标准格式组织:
GET / HTTP/1.1
Host: xkcd.com
Accept: text/html 
User-Agent: Mozilla/5.0 (Macintosh)
以上信息称为请求头

其中:
GET / HTTP/1.1
包含了URI和HTTP请求的方法,这里的"GET"是HTTP请求,HTTP/1.1是传输协议
URI是客户端用来识别资源的唯一地址或者定位
Host: xkcd.com
请求目的地址
Accept: text/html
接收信息的格式,text/html是指接收html的文本格式
User-Agent: Mozilla/5.0 (Macintosh)
识别发出请求的应用程序, Mozilla/5.0 指的是firefox浏览器

HTTP请求分为以下几个方式:
GET  Retrieve the resource from the server
POST  Create a resource on the server
PUT  Update the resource on the server
DELETE  Delete the resource from the server

备注:HTTP的请求方式实际上有9种,他们大部分都不常用,而且现在部分的浏览器不支持put和delete

第二步:服务器端返回响应,响应信息 同样按照HTTP协议的标准格式返回:
一旦服务器接收到请求,则会根据URI信息以及请求的方式(如GET)识别出用户所需要的信息,然后向客户端发送响应头信息,客户接收后处理,将响应的内容显示在客户端上。

响应头信息:
HTTP/1.1 200 OK
HTTP状态码,通过状态可知响应是否成功或失败,不同状态码返回信息不同,这里不做详细解释,可通过一下链接查看
http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81 中文

Date: Sat, 02 Apr 2011 21:05:05 GMT
返回的时间
Server: lighttpd/1.4.19
通过什么服务器返回
Content-Type: text/html
返回的格式(如xml, json, html)

备注:在Firefox浏览器上安装firebug插件可以查看请求和响应的内容

============================================

通过PHP实现简单的HTTP请求和响应:
$uri = $_SERVER['REQUEST_URI'];
$foo = $_GET['foo'];
header('Content-type: text/html');
echo 'The URI requested is: '.$uri;
echo 'The value of the "foo" parameter is: '.$foo;

请求头:
GET / HTTP/1.1
Host: localhost:83
Accept: text/html 
User-Agent: Mozilla/5.0 (Macintosh)

响应头:
HTTP/1.1 200 OK
Date: Sat, 03 Apr 2011 02:14:33 GMT
Server: Apache/2.2.17 (Unix)
Content-Type: text/html

============================================

来看看Symfony2是如何实现HTTP的请求和响应:

1.请求
use Symfony\Component\HttpFoundation\Request;   //访问请求类的命名空间
$request = Request::createFromGlobals();
//从请求的资源中去掉请求参数(?foo=xxx)
$request->getPathInfo();
//分别获取GET,POST参数
$request->query->get('foo');
$request->request->get('bar', 'default value if bar does not exist');
// 获取$_SERVER的值
$request->server->get('HTTP_HOST');
// 获取文件上传
$request->files->get('foo');
// 获取COOKIES值
$request->cookies->get('PHPSESSID');
// 获取 请求 头信息
$request->headers->get('host');
$request->headers->get('content_type');
$request->getMethod();   // GET, POST, PUT, DELETE, HEAD

2.响应
use Symfony\Component\HttpFoundation\Response;   //   访问响应类的命名空间
$response = new Response();
$response->setContent('<html><body><h1>Hello world!</h1></body></html>');
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'text/html');
$response->send();

转载于:https://my.oschina.net/haigou20/blog/136257