http基础2

HTTP入门

 

1、简介

HTTP(HyperText Transfer Protocol)超文本传输协议,是一种无状态的应用层协议,主要用于传输超文本。无状态是指协议对于事务处理没有记忆能力,同一个会话的连续两个请求互相不了解。(为了支持客户端与服务器之间的动态交互,产生了Cookie和Session技术,Cookie和Session可以为HTTP会话保持状态)

 

2、消息格式

HTTP消息包括客户端发送到服务器的请求消息和服务器发送到客户端的响应消息两种。HTTP会话一般由客户端通过发送请求消息而发起。

HTTP消息的格式是(请求消息和响应消息的格式大致相同,只是在开始行上有一些差别): 开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行) 零个或更多个头域(经常被称作“头”),

一个指示头域结束的空行

一个可有可无的消息主体(message-body)

 

3、请求消息

请求消息格式:

请求行

零个或更多个头域(经常被称作“头”),

一个指示头域结束的空行

一个可有可无的消息主体(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 请求查询服务器的能力,或者查询与资源相关的选项和需求

 

4、响应消息

响应消息格式:

状态行

零个或更多个头域(经常被称作“头”),

一个指示头域结束的空行

一个可有可无的消息主体(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 //服务器当前不能处理客户端的请求,一段时间后,

//可能恢复正常

5、头域类型

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

posted @ 2013-10-04 10:47  Pandora-year  阅读(217)  评论(0)    收藏  举报