关闭

Http协议

117人阅读 评论(0) 收藏 举报
分类:

1.概述:

       HTTP表示超文本传输协议(Hypertext Transfer Protocol),是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP是迄今为止使用最多的互联网协议,目前版本为1.1。HTTP运行在应用层(ISO/OSI七层参考模型包括应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。),是一个基于请求/响应模式的,无状态的协议。HTTP是TCP/IP的上层协议。如果你对这些网络协议还都不太熟悉,可以这样理解:TCP负责确保从一个网络节点向另外一个网络节点发送的文件能作为一个完整的文件到达目的地,尽管在具体传输过程中这个文件可能会分解为小块传输;IP是一个底层协议,负责把数据块(数据包)沿路移动/路由到目的地。

       在SO/OSI七层参考模型中,上层协议使用下层协议提供的服务,HTTP作为应用层协议,其连接的建立使用传输层的TCP协议来完成。TCP是面向连接的协议,一方等待,一方发起连接。web服务器等待浏览器发起连接,默认情况下,浏览器和在web服务器上监听80端口的服务器程序建立连接。虽然HTTP基本TCP协议进行连接,但不排除基于其他协议进行连接。

       在HTTP1.0中,建立连接后,浏览器发送一个请求,服务器回应一个消息之后连接就被关闭。当下一次浏览器请求时,需要重新建立连接,这种不断建立连接的方式开销比较大。早期的网页通常只包含HTML文本,不会有太大影响。但是现在web网页包含众多资源(图片,声音,视频等),如果每获取一种资源,就要连接一次,会增加HTTP服务器的开销,造成网络信息堵塞。因此HTTP1.1给出了一种持续连接(Persistent Connections)机制(Cookie机制),作为HTTP1.1中连接建立的默认行为。通过这种方式,浏览器只需建立一次连接,可以连续发送多个请求,而不用等待每一个响应的到来。

打开一个网页需要多少次Request?

我们来分析一下这个过程:

  • 当你在浏览器输入URL http://www.XXX.com 的时候,浏览器发送一个Request去获取 http://www.XXX.com 的html。服务器把Response发送回给浏览器.
  • 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
  • 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
  • 等所有的文件都下载成功后,网页被显示出来。

2.URL:

我们在浏览器网址栏输入的网址就是HTTP URL。URL表示统一资源定位符(Uniform Resource Locator),它是一种特殊的URI(统一资源标示符,Uniform Resource Identifier,统一资源标示符)。包含了用于查找某个资源的足够信息。

 schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]

 scheme               指定低层使用的协议(例如:http, https, ftp)

 host                   HTTP服务器的IP地址或者域名

 port#                HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例  如      http://www.cnblogs.com:8080/

  path                   访问资源的路径

  url-params

  query-string       发送给http服务器的数据

  anchor-             锚

  URL 的一个例子

http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema:http

host: www.mywebsite.com

path:/sj/test

URLparams: id=8079

QueryString: name=sviergn&x=true

Anchor:stuff


3.Http请求




请求行:

 

  请求行中的GET称之为请求方式,请求方式有:POSTGETHEADOPTIONSDELETETRACEPUT,常用的有: GET POST

  用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

  不管POSTGET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET/mail/1.html?name=abc&password=xyz HTTP/1.1

  GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K

  如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

 

消息头:

HTTP请求中的常用消息头

accept:浏览器通过这个头告诉服务器,它所支持的数据类型

Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集

Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式

Accept-Language:浏览器通过这个头告诉服务器,它的语言环境

Host:浏览器通过这个头告诉服务器,想访问哪台主机

If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间

Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的  防盗链

Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接


4.Http响应

一个HTTP响应代表服务器向客户端回送的数据,它包括:一个状态行、若干消息头、以及实体内容 。



状态行:

   状态行格式:HTTP版本号 状态码 原因叙述<CRLF>

      举例:HTTP/1.1 200OK

  状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:


响应头:

  HTTP响应中的常用响应头(消息头)

  Location: 服务器通过这个头,来告诉浏览器跳到哪里

  Server:服务器通过这个头,告诉浏览器服务器的型号

  Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式

  Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度

  Content-Language: 服务器通过这个头,告诉浏览器语言环境

  Content-Type:服务器通过这个头,告诉浏览器回送数据的类型

  Refresh:服务器通过这个头,告诉浏览器定时刷新

  Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打数据

  Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的

  Expires: -1  控制浏览器不要缓存

  Cache-Control: no-cache 

  Pragma: no-cache


5. Get和Post方法的区别

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如Register.jsp?username=shan&passwd=111,POST方法是把提交的数据放在HTTP包的Body中.
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
  • GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
  • GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。幂等即多个同样的请求返回数据一致

2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。《一般用于表单提交中》

 

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!


6.Http1.1特点

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。

由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。



参考链接1 

参考链接2

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40240次
    • 积分:1423
    • 等级:
    • 排名:千里之外
    • 原创:97篇
    • 转载:41篇
    • 译文:0篇
    • 评论:22条
    最新评论