简介
众所周知,http简单来说是超文本传输协议(Hyper Text Transfer Protocol),他基于TCP/IP协议来传递数据,查询结果,html,图片等相关信息
此处拿出小本本记录一下:HTTP协议工作于客户端和服务器之间的,浏览器作为客户端通过url向web服务器发送请求,然后web服务器通过相关处理,再把请求结果或者错误信息返回给浏览器端
这里只做简单描述一下客户端和服务器在nginx和php之间的交互
浏览器通过url向服务器发送请求 |
---|
nginx |
访问nginx.conf中配置的location指向路径 |
加载nginx的fast-cgi模块 |
fast-cgi监听127.0.0.0:9000 |
location指向路径把请求发送到127.0.0.0:9000 |
php-fpm监听127.0.0.0:9000 |
php-fpm接收请求,启用子进程处理请求 |
php-fpm处理完请求,将请求发送给nginx |
nginx将结果通过http返回给客户端 |
具体想要做更深入的了解,可以找度娘查查cgi协议,fast-cgi,php-fpm三者之间的关系
特点
- 规模小通信快:客户端向服务器发送请求的时候,只需要发送方法和路径(get,post等等,和一串url请求)
- 灵活:http允许传输任意类型的数据对象,查看具体类型可以查看Content-Type
- 无连接:无连接不是不连接,而是没戏连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,立刻断开
- 无状态:http协议是无状态协议,无状态协议是指对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则他必须重传,这样可能导致每次传输的数据量增大
Request Headers
Content-Type: text/plain; charset=UTF-8(服务端发送的类型及采用的编码方式)
Origin(用来说明最初请求是从哪里发起的)
Referer: http://localhost/index.php(服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从你的主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击你的主页上的链接访问他的网站)
User-Agent: Mozilla/4.0(告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本)
Connection: keep-alive(当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接)
Connection: close (代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接)
Response Headers
Access-Control-Allow-Origin(解决跨域)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)
Server:apache tomcat(服务端的Web服务端名)
HTTP状态码(常用)
状态码 | 描述 |
---|---|
200 | 请求成功。一般用于GET与POST请求 |
301 | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
400 | 客户端请求的语法错误,服务器无法理解 |
401 | 请求要求用户的身份认证 |
403 | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | 客户端请求中的方法被禁止 |
500 | 服务器内部错误,无法完成请求 |
502 | 服务器不支持请求的功能,无法完成请求 |
503 | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
504 | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
GET和POST区别
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码