原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html

目录

一、连接至Web服务器
二、发送HTTP请求
三、服务端接受请求并返回HTTP响应
四、服务器关闭连接,浏览器解析响应
五、无状态连接
六、实例
(附录)
HTTP参考

一、连接至Web

 一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80)。     
例如:http://www.myweb.com:8080/index.html
在Java中,这将等同于代码:
Soceet socket=new Socket("www.myweb.com",8080); 
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

二、发送HTTP请求

通过连接,客户端写一个ASCII文本请求行,后跟0或多个HTTP头标,一个空行和实现请求的任意数据。 一个请求由四个部分组成:请求行、请求头标、空行和请求数据

1.请求行:

请求行由三个标记组成:请求方法、请求URI和HTTP版本,它们用空格分隔。
例如:GET /index.html HTTP/1.1

HTTP规范定义了8种可能的请求方法:

GET                检索URI中标识资源的一个简单请求

HEAD              与GET方法相同,服务器只返回状态行和头标,并不返回请求文档

POST              服务器接受被写入客户端输出流中的数据的请求

PUT                服务器保存请求数据作为指定URI新内容的请求

DELETE          服务器删除URI中命名的资源的请求

OPTIONS         关于服务器支持的请求方法信息的请求

TRACE            Web服务器反馈Http请求和其头标的请求

CONNECT        已文档化但当前未实现的一个方法,预留做隧道处理

2.请求头标:

由关键字/值对组成,每行一对,关键字和值用冒号(:)分隔。 请求头标通知服务器有关于客户端的功能和标识,典型的请求头标有:

User-Agent          客户端厂家和版本

Accept                 客户端可识别的内容类型列表

Content-Length    附加到请求的数据字节数

3.空行:

最后一个请求头标之后是一个空行,发送回车符和退行,通知服务器以下不再有头标。

4.请求数据:

使用POST传送数据,最常使用的是Content-Type和Content-Length头标。



三、服务端接受请求并返回HTTP响应

Web服务器解析请求,定位指定资源。服务器将资源副本写至套接字,在此处由客户端读取。

一个响应由四个部分组成;状态行、响应头标、空行、响应数据

1.状态行:

状态行由三个标记组成:HTTP版本、响应代码和响应描述。

HTTP版本:向客户端指明其可理解的最高版本。
响应代码:3位的数字代码,指出请求的成功或失败,如果失败则指出原因。
响应描述:为响应代码的可读性解释。
例如:HTTP/1.1 200 OK
HTTP响应码: 
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误:

2.响应头标:

像请求头标一样,它们指出服务器的功能,标识出响应数据的细节。

3.空行:

最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标。

4.响应数据:

HTML文档和图像等,也就是HTML本身。

四、服务器关闭连接,浏览器解析响应

1.浏览器首先解析状态行,查看表明请求是否成功的状态代码。

2.然后解析每一个响应头标,头标告知以下为若干字节的HTML。

3.读取响应数据HTML,根据HTML的语法和语义对其进行格式化,并在浏览器窗口中显示它。

4.一个HTML文档可能包含其它需要被载入的资源引用,浏览器识别这些引用,对其它的资源再进行额外的请求,此过程循环多次。

五、无状态连接

HTTP模型是无状态的,表明在处理一个请求时,Web服务器并不记住来自同一客户端的请求。

六、实例

实例1:

浏览器发出请求

GET /index.html HTTP/1.1

服务器返回响应:

HTTP /1.1 200 OK

Date: Apr 11 2006 15:32:08 GMT

Server: Apache/2.0.46(win32)

Content-Length: 119

Content-Type: text/html

<HTML>

<HEAD>

<LINK REL="stylesheet" HREF="index.css">

</HEAD>

<BODY>

<IMG SRC="image/logo.png">

</BODY>

</HTML>

(附录)

1.HTTP规范:

Internet工程制定组织(IETF)发布的RFC指定Internet标准,这些RFC被Internet研究发展机构广泛接受。因为它们是标准文档,故一般用正规语言编写,如立法文标一样。

2.RFC:

RFC一旦被提出,就被编号且不会再改变,当一个标准被修改时,则给出一个新的RFC。作为标准,RFC在Internet上被广泛采用。

3.HTTP的几个重要RFC:

RFC1945    HTTP 1.0 描述

RFC2068    HTTP 1.1 初步描述

RFC2616    HTTP 1.1 标准

4.资源标识符URI(Uniform Resource Identifter,URI)

HTTP参考

一、HTTP码应码

响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。

响应码分五种类型,由它们的第一位数字表示:

1.1xx:信息,请求收到,继续处理

2.2xx:成功,行为被成功地接受、理解和采纳

3.3xx:重定向,为了完成请求,必须进一步执行的动作

4.4xx:客户端错误,请求包含语法错误或者请求无法实现

5.5xx:服务器错误,服务器不能实现一种明显无效的请求

二、HTTP头标

头标由主键/值对组成。它们描述客户端或者服务器的属性、被传输的资源以及应该实现连接。

四种不同类型的头标:

1.通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。

2.请求头标:允许客户端传递关于自身的信息和希望的响应形式。

3.响应头标:服务器和于传递自身信息的响应。

4.实体头标:定义被传送资源的信息。即可用于请求,也可用于响应。

头标格式:

<name>:<value><CRLF>

下表描述在HTTP/1.1中用到的头标 (删减)

Accept

定义客户端可以处理的媒体类型,按优先级排序;

在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept: image/jpeg,image/png,*/*

Accept-Charset

定义客户端可以处理的字符集,按优先级排序;

在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8

Accept-Encoding     定义客户端可以理解的编码机制。例如:Accept-Encoding:gzip,compress

Accept-Language    定义客户端乐于接受的自然语言列表。例如:Accept-Language: en,de

Accept-Ranges

一个响应头标,它允许服务器指明:将在给定的偏移和长度处,为资源组成部分的接受请求。

该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept-Ranges: nonea

Age

允许服务器规定自服务器生成该响应以来所经过的时间长度,以秒为单位。

该头标主要用于缓存响应。例如:Age: 30

Contern-Type        标明发送或者接收的实体的MIME类型。例如:Content-Type: text/html

Server            一种标明Web服务器软件及其版本号的头标。例如:Server: Apache/2.0.46(Win32)

User-Agent

定义用于产生请求的软件类型(典型的如Web浏览器)。

例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)

 

[转]HTTP请求模型和头信息的更多相关文章

  1. [转]HTTP请求模型和头信息参考

    [转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...

  2. HTTP请求模型和头信息参考

    发送HTTP请求:一个请求由四个部分组成:请求行.请求头标.空行和请求数据 请求行 请求行由三个标记组成:请求方法.请求URI和HTTP版本,它们用空格分隔.例如:GET /index.html HT ...

  3. curl get请求添加header头信息

    function get($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CU ...

  4. curl/wget 测试http请求的响应头信息

    1. wget –debug wget可以使用debug信息来查看信息头,如下: [root@localhost ~]# wget --debug http://192.168.1.101:8080/ ...

  5. nginx反向代理导致请求header头信息丢失

    背景:前端与后端调试接口,后端拿不到前段发过去的请求头信息,导致接口不通.(但是在本地是可以拿到的) 原因:nginx做了反向代理,没有请求时候加头信息的配置 报错如下: 解决方法: 方法一:NGIN ...

  6. php设置http请求头信息和响应头信息

    php设置http请求头信息和响应头信息 设置请求服务器的头信息可以用fsockopen,curl组件,header函数只能用来设置客户端响应的头信息,不能设置服务器的头信息. 例子;  一.head ...

  7. js获取response头信息

    当我们使用ajax发起请求时,经常需要获取请求返回的头信息.默认情况下,js货可以获取如下头信息: Cache-Control Content-Language Content-Type Expirs ...

  8. ajax--->http头信息的content-type是application/x-www-form-urlencoded或application/json区别

    ajax请求时http头信息的content-type是application/x-www-form-urlencoded或application/json区别 content-type请求头是干嘛的 ...

  9. js获取HTTP的请求头信息

    以下为js获取HTTP的全部请求头信息: var req = new XMLHttpRequest(); req.open('GET', document.location, false); req. ...

随机推荐

  1. WP8.1:关于屏幕尺寸和分辨率的那些事儿

    目前市面上的Windows Phone设备越来越多,尺寸和分辨率也越来越多,特别是WP8.1时代的到来.做过wp开发的人都知道应用适配其实较安卓要简单太多了,其中有一个重要原因,就是微软号称所有WP设 ...

  2. Redis使用总结之与Memcached异同

    Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list ...

  3. 让ASP.NET Web API支持POST纯文本格式(text/plain)的数据

    今天在web api中遇到了这样一个问题,虽然api的参数类型是string,但只能接收post body中json格式的string,不能接收原始string. web api是这样定义的: pub ...

  4. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  5. [ACM_模拟] UVA 10881 Piotr's Ants[蚂蚁移动 数组映射 排序技巧]

    "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one ...

  6. [C++] socket -9[匿名管道]

    ::怎么弄都不能读取信息....先把代码放着.... #include<windows.h> #include<stdio.h> int main() { HANDLE rea ...

  7. ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云

    向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平 ...

  8. mysql 密码重置

    1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql 2.使用命令启动mysql数据库,跳过权限验证 mysqld -nt --skip-grant-tables ...

  9. netstat常见参数

    -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字.-l 仅列出有在 Lis ...

  10. Xcode7

    Xcode 7有什么新的特性.Xcode中7包含你需要创建的iPhone,iPad,Mac和Apple关注惊人的应用程序的一切.Swift编程语言已更新,现在比以往任何时候都更快,具有强大的功能,使你 ...