Web编程原理之HTTP协议

HTTP协议

1.概念

HTTP:超文本传输协议,详细的规定了浏览器和服务器之间进行通信的规则,通过网络传输HTML文档数据的协议
HTTP协议是一个应用层的协议,由请求和响应构成,一次请求一次响应.

2.特点
1.是我们B/S 架构采用的协议
2.HTTP可以传输任意数据类型,比如文本,图片,音频,视频等等
3.HTTP1.0之前使用的是种短连接的方式,什么是短连接,就是限制每次连接只处理一个请求,服务器处理完成之后
并收到浏览器的应答之后.就会断开连接.这种方式的好处是可以节省传输时间.但是缺点是,我请求了一个HTML文档,这个文档中又包含了,其他JS文件,图片文件,CSS文件,每当浏览器,遇这样一个Web资源,就会建立一个会话,那这样的话需要消耗资源和时间的.
现在我们使用的HTTP1.1的版本使用的是长连接.使用长连接的情况下,当一个网页打开完成后,客户端和服务端之间传输数据时,连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立好的连接.当然,这个连接不会永久保持,服务器中可以设置这个保持连接时间.
4**.HTTP协议是一种无状态协议**,什么叫协议的状态,就是指下一次传输可以记住本次传输数据的能力,那所谓无状态协议,就是http不会为了下一次连接,而维护本次连接所传输的数据,比如浏览器打开一个网页后,关闭浏览器,然后再次打开浏览器,但是服务器并不知道客户关闭了一次浏览器,所以HTTP是无状态协议,那如果说我们在一个网站中的多个页面间需要共享同一个数据,我们可以通过Cookie和Session来实现.

3.http之请求(request)

浏览器往服务器发送数据

  1. 请求的格式(请求行>请求头>请求空行>请求体)
    请求行:GET /HTTPTest/login?username=zhangsan&password=123456 HTTP/1.1
    格式: 请求方式 /请求的资源?请求参数 协议/版本

  2. 请求方式(get和post)

    链接:源地址

    关于HTTP请求GET和POST的区别:

    a.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
      POST提交:把提交的数据放置在是HTTP包的包体<request-body>中。上文示例中红色字体标明的就是实际的传输数据
      因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
    
    b.传输数据的大小:
       首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:
       GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
       因此对于GET提交时,传输数据就会受到URL长度的限制。
       POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
    
    c.安全性:
        POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。
    
  3. 常见的请求头

    Accept: text/html,image/*	--告诉服务器当前客户端可以接收的文档的类型。其实这里包含了*/*,就表示什么都可以接收;  大类型/小类型 比如 text/css text/javascript
    	Accept-Charset: ISO-8859-1	--告诉服务器,客户端提交的表单可能使用的编码类型
    	Accept-Encoding: gzip		--浏览器发给服务器,声明浏览器支持的编码类型
    	Accept-Language:zh-cn 		--语言环境
    	Host: localhost:8080		--访问主机
    	If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT	 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
    后面跟的时间是本地浏览器存储的文件修改时间
    
    Referer: http://www.baidu.com/index.jsp	 --来自哪个页面、防盗链
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
    Cookie
    Connection:Keep-Alive   	--链接状态 长链接
    Date: Tue, 11 Jul 2000 18:23:51 GMT	--时间
    
  4. get请求

    在这里插入图片描述

  5. post请求

在这里插入图片描述

4.http之响应

  1. 响应的格式(响应行,响应头,响应空行,响应体)
    响应行格式:协议/版本 响应状态码 响应的描述

    在这里插入图片描述

  2. 常见响应头

    链接:源地址

    Location: http://www.baidu.org/index.jsp 	--跳转方向 302重定向
    Server:apache tomcat			--服务器型号
    Content-Encoding: gzip 			--数据压缩
    Content-Length: 80 			--数据长度
    Content-Language: zh-cn 		--语言环境
    Content-Type: text/html; charset=GB2312 --告诉浏览器,服务器返回的文本采用什么编码
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT	在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,
    Refresh: 1;url=http://www.hehe.org		--定时刷新
    Content-Disposition: attachment; filename=aaa.zip	--下载
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search   让浏览器将数据保存到本地
    Expires: -1					--缓存  -1 就是让页面立即过期
    Cache-Control: no-cache  --浏览器和缓存服务器都不应该缓存页面信息强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验
    Connection: Keep-Alive   			--保持连接 长链接
    Date: Tue, 11 Jul 2000 18:23:51 GMT
    
  3. 响应状态码HTTP状态码分类
    链接:源地址

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

    分类分类描述
    1**信息,服务器收到请求,需要请求者继续执行操作
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步的操作以完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器在处理请求的过程中发生了错误

    HTTP状态码列表:

    状态码状态码英文名称中文描述
    100Continue继续。客户端应继续其请求
    101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
    200OK请求成功。一般用于GET与POST请求
    201Created已创建。成功请求并创建了新的资源
    202Accepted已接受。已经接受请求,但未处理完成
    203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
    204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
    205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
    206Partial Content部分内容。服务器成功处理了部分GET请求
    300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
    301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
    302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
    303See Other查看其它地址。与301类似。使用GET和POST请求查看
    304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
    305Use Proxy使用代理。所请求的资源必须通过代理访问
    306Unused已经被废弃的HTTP状态码
    307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
    400Bad Request客户端请求的语法错误,服务器无法理解
    401Unauthorized请求要求用户的身份认证
    402Payment Required保留,将来使用
    403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
    404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
    405Method Not Allowed客户端请求中的方法被禁止
    406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
    407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
    408Request Time-out服务器等待客户端发送的请求时间过长,超时
    409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
    410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
    411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
    412Precondition Failed客户端请求信息的先决条件错误
    413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
    414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
    415Unsupported Media Type服务器无法处理请求附带的媒体格式
    416Requested range not satisfiable客户端请求的范围无效
    417Expectation Failed服务器无法满足Expect的请求头信息
    500Internal Server Error服务器内部错误,无法完成请求
    501Not Implemented服务器不支持请求的功能,无法完成请求
    502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
    503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
    504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
    505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理
  4. 重定向(302 在响应头中的location的键)

浏览器发出一次请求,服务器给浏览器反馈一个响应,里面的location是让浏览器请求的新的链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值