HTTP协议讲解

来源:互联网 发布:linux应用增量更新 编辑:程序博客网 时间:2024/05/24 00:58

 

HTTP协议讲解


 

HTTP请求消息
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。
一个完整的HTTP请求包括如下内容:
一个请求行、若干消息头、以及请求正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。

举例:
GET /books/java.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate


响应信息

一个HTTP响应代表服务器向客户端回送的数据。
一个完整的HTTP响应包括如下内容:
一个状态行、若干消息头、以及响应正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。


举例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private

<HTML>
<BODY>
……


消息头

使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令。
每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符
 如: Accept-Encoding: gzip, deflate
消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母大写。
整个消息头部分中的各行消息头可按任何顺序排列。
消息头又可分为通用信息头、请求头、响应头、实体头等四类
许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个选项之间以逗号分隔。
有些头字段可以出现多次,例如,响应消息中可以包含有多个”Warning”头字段。

请求行
格式:请求方式 资源路径 HTTP版本号<CRLF>
举例:GET /temp3o116.shtml HTTP/1.1
请求方式:GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT
用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上。
GET方式
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
POST方式
如请求方式为POST方式,则可以在请求的正文内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

状态行
 格式: HTTP版本号 状态码 原因叙述<CRLF>
 举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类,使用最高位为1到5来进行分类


200(正常)
表示一切正常,返回的是正常请求结果
302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。
304(未修改)
表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求。
404(找不到)
服务器上不存在客户机所请求的资源。
500(服务器内部错误)
服务器端的程序发生错误

 

请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型、压缩方法、语言以及发出请求的超链接所属页面的URL地址等信息。
常用请求头:
Accept:浏览器可接受的MIME类型
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
Host:初始URL中的主机和端口
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
Content-tType:内容类型


If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求消息正文的长度
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
Cookie:这是最重要的请求头信息之一
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT


响应头字段用于向客户端传递附加信息
常用响应头
Location: http://www.it315.org/index.jsp指示新的资源的位置
Server:apache tomcat指示服务器的类型
Content-Encoding: gzip服务器发送的数据采用的编码类型
Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
Content-Type: text/html; charset=GB2312服务器发送的内容的MIME类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒

Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件
Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
Expires: -1
Cache-Control: no-cache (1.1) 
Pragma: no-cache   (1.0)
Connection: close/Keep-Alive  
Date: Tue, 11 Jul 2000 18:23:51 GMT

 

class 
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");
 }
}


网络架构:

C/S:Client/Server
客户端,服务端。
特点:
1,需要在客户端和服务端都需要按照编写的软件。
2,维护较麻烦。
好处:可以减轻服务端的压力,如网络游戏。

 

 


B/S:Browser/Server
浏览器 ,服务端。
1,客户端不用单独编写软件。
 因为客户端用的就是浏览器。
2,对于软件升级,只要考虑服务端即可。

弊端:所有的程序都运行在服务端,客户端的浏览器毕竟解析能力较弱。对游戏等。

 

0 0