HTTP入门php
一、简介css
HTTP(HyperText Transfer Protocol)超文本传输协议,是一种无状态的应用层协议,主要用于传输超文本。无状态是指协议对于事务处理没有记忆能力,同一个会话的连续两个请求互相不了解。(为了支持客户端与服务器之间的动态交互,产生了Cookie和Session技术,Cookie和Session能够为HTTP会话保持状态)服务器
二、消息格式测试
HTTP消息包括客户端发送到服务器的请求消息和服务器发送到客户端的响应消息两种。HTTP会话通常由客户端经过发送请求消息而发起。编码
HTTP消息的格式是(请求消息和响应消息的格式大体相同,只是在开始行上有一些差异): 开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行) 零个或更多个头域(常常被称做“头”),事务
一个指示头域结束的空行ip
一个无关紧要的消息主体(message-body)资源
三、请求消息it
请求消息格式:io
请求行
零个或更多个头域(常常被称做“头”),
一个指示头域结束的空行
一个无关紧要的消息主体(message-body)
其中请求行的格式是:
请求方法+请求URL+HTTP-Version+换行回车
一个请求报文的例子:
GET /index.php HTTP/1.1\r\n //请求行,下面两行是对第一行的解释
Request Method: GET
Request Version: HTTP/1.1
Accept: */*\r\n //如下是头域部分
ThreadID: 1880\r\n
Accept-Language: zh-cn\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; SE 2.X; .NET CLR 2.0.50727)\r\n
Host: 172.16.1.139\r\n
Connection: Keep-Alive\r\n
Cookie: VWPHPSESSID=057c990f7e67d06b1f5ad001e70e69dc\r\n
\r\n //空行,表示头域结束
//消息体为空
请求方法:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据,好比提交留言
HEAD 只请求响应消息的报头,不要消息主体
PUT 请求服务器存储一个资源,并用Request-URI做为其标识,就是建立资源
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留未来使用
OPTIONS 请求查询服务器的能力,或者查询与资源相关的选项和需求
四、响应消息
响应消息格式:
状态行
零个或更多个头域(常常被称做“头”),
一个指示头域结束的空行
一个无关紧要的消息主体(message-body)
其中状态行的格式是:
HTTP-Version +状态码+缘由描述+换行回车
一个响应报文的例子:
HTTP/1.1 200 OK\r\n //状态行,后两行是对第一行的解释
Request Version: HTTP/1.1
Response Code: 200
Content-Type: text/css\r\n //头域开始
Accept-Ranges: bytes\r\n
ETag: "1576843214"\r\n
Last-Modified: Sat, 01 Jan 2000 00:00:04 GMT\r\n
Content-Length: 2850
Date: Thu, 10 Mar 2011 09:16:18 GMT\r\n
Server: lighttpd/1.4.19\r\n
\r\n //空行,表示头域结束
+Line-based text data: text/css //消息主体,此处省略一部分
状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操做
4xx:客户端错误--请求有语法错误或请求没法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经受权,
403 Forbidden //服务器收到请求,可是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,
//可能恢复正常
五、头域类型
HTTP经过头域来传递一些参数,好比客户端支持的字符集、语言、压缩方法、服务器提供的验证信息、实体的长度信息、编码信息等等。
HTTP的头域分为经常使用头、请求头、响应头和实体头。
经常使用头域既能用于请求消息也能用于响应消息,可是不能用于实体。下面是一些经常使用头域:general-header = Cache-Control
| Connection
| Date
| Pragma
| Trailer
| Transfer-Encoding
| Upgrade
| Via
| Warning
请求头域容许客户端传递请求的附加信息和客户端本身的附加信息给服务器。这些头域做为请求的修饰符。请求头域只能用于请求消息。下面是一些请求头域:
请求头(request-header) = Accept
| Accept-Charset
|Accept-Encoding
|Accept-Language
|Authorization
|Expect
|From
|Host
|If-Match
|If-Modified-Since
| If-None-Match
| If-Range
| If-Unmodified-Since
| Max-Forwards
| Proxy-Authorization
| Range
| Referer
|TE
| User-Agent
响应头域容许服务器传送响应的附加信息,这些信息不能放在状态行(Status-Line)里。这些头域给出有关服务器的信息以及请求URI(Request-URI)指定的资源的一些信息。response-header = Accept-Ranges
|Age
|Etag
|Location
|Proxy-Autenticate
|Retry-After
|Server
|Vary
|WWW-Authenticate
实体包括实体头域(entity-header)与实体主体(entity-body)。消息主体通过传输译码以后就成为实体主体。就是说实体主体在服务器端先经过传输编码转换成消息体,而后消息体在客户端经过传输译码转换为实体主体。下面是一些实体头域:
entity-header = Allow
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| Expires
| Last-Modified