HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
HTTP结构
- 客户端是一个应用程序(Web浏览器或其他任何客户端),它连上web服务器后,可以从web服务器中获取。
- 服务器同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等)接收客户端的请求,响应数据。
- 客户端和服务器需要遵守一定的通讯格式,HTTP协议来定义他们的通讯格式。
HTTP请求报文
请求报文包含四部分: 请求行(request line), 请求头部(header),空行,请求数据
// 请求行 (请求方式 请求资源 http协议版本)
POST /chapter17/user.html HTTP/1.1
// 请求头 (头部字段名:值)
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: localhost:8088
Accept-Language: en, mi
// 空行
// 请求数据
name=tom&pwd=0000
HTTP响应报文
响应报文包含四部分: 响应行(response line),响应头部(header),空行,响应数据
// 响应行 (http协议版本 状态码以及状态描述)
HTTP/1.1 200 OK
// 响应头部 (头部字段名:值)
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Accept-Ranges: bytes
Content-Type: text/plain
// 空行
// 响应数据
{"userName":"tom", "realName":"TomJosh"}
HTTP请求方式
常用的一些请求方式:
-
GET
: 只被用于获取数据,请求指定的页面信息,并返回实体主体 -
POST
: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改 -
PUT
: 从客户端向服务器传送的数据取代指定的文档的内容 -
DELETE
: 请求服务器删除指定的资源
HTTP响应状态码
常见的状态码:
-
200
: 请求成功 -
301
: 资源(网页等)被永久转移到其它URL -
404
: 请求的资源(网页等)不存在 -
500
: 内部服务器错误
状态码 | 状态英文名 | 描述 |
---|---|---|
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
网友评论