zoukankan      html  css  js  c++  java
  • http协议

    1、HTTP协议 

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    2、请求结构

    请求格式:http请求报包含三个部分:请求行 + 请求头 + 数据体

    样例:

    GET/sample.jspHTTP/1.1
    Accept:image/gif.image/jpeg,*/*
    Accept-Language:zh-cn
    Connection:Keep-Alive
    Host:localhost
    User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
    Accept-Encoding:gzip,deflate
     
    username=jinqiao&password=1234

    请求头

    详见:https://www.cnblogs.com/honghong87/articles/6941436.html

    Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。

    User-Agent是客户浏览器名称

    Host对应网址URL中的Web名称和端口号。

    Accept-Langeuage指出浏览器可以接受的语言种类,如en或en-us,指英语。

    connection:用来告诉服务器是否可以维持固定的HTTP连接。http是无连接的,HTTP/1.1使用Keep-Alive为默认值,这样,当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接

    Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。

    Referer:表明产生请求的网页URL。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search,在向服务器发送的GET/icwork/search中的请求中,Referer是http://hostname:8080/icconcept/index.jsp。这个属性可以用来跟踪Web请求是从什么网站来的。

    User-Agent:是客户浏览器名称。

    Content-Type:用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。

    Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.

    Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。

    在java中,请求头可以通过HttpServletRequest获取,api地址:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletRequest.html

    请求方法

    3、响应结构

    响应格式:状态行、消息报头和响应正文。

    响应状态

    具体状态码见:https://www.runoob.com/http/http-status-codes.html

    响应头

    Access-Control-Allow-Origin:表面该站点可以被哪些网站进行跨域资源共享(cross-origin resource sharing,CORS)(请参考“同源策略”和“跨域之源共享”),例如:Access-Control-Allow-Origin: http://example.com:8080 http://foo.example.com,或者Access-Control-Allow-Origin:*

    Accept-Ranges:表明服务器支不支持资源范围请求(“资源范围请求”是指按byte为单位,请求资源的某一段数据,例如请求一个文件的200byte—400byte的数据)。Accept-Ranges:bytes 表示该资源支持byte形式资源范围请求,Accept-Ranges:none则表示不支持。

    Age:一个资源存在于代理中缓存的时间。单位是秒。

    Allow:一个资源允许哪些HTTP方法进行请求,例如:Allow: GET, HEAD

    Cache-Control:(Cache-Control是内容比较多的一个头域,我会在下一篇博客做介绍)

    Connection:连接方式。值有keep-alive和close

    Content-Encoding:服务器对响应数据的编码方式,但这里的编码方式不同于编码字符集(GB2312,UTF-8等),而是(通常)指压缩方式,例如Content-Encoding:gzip

    Content-Language:响应数据的自然语言,例如:Content-Language:ZH-CN

    Content-Length:响应数据的数据长度,单位是byte,例如Content-Length:1024

    Content-MD5:基于base64编码的回应数据的MD5校验和,例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

    Content-Disposition:当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。例如:Content-Disposition: attachment; filename=”some_app.exe”

    Content-Range:表示如果当前这个响应数据是整个资源的一部分时,是具体的哪一部分(从第几byte到第几byte)。在请求中,客户端可以通过设定”Range”头域来通知服务器其只想请求整个资源中某一段数据,而对应的,当服务器响应这种请求,并发送某一段数据到客户端的时候,必须通过Content-Range头来告诉客户端当前的响应数据是整个资源的第几byte到第几byte。这个在资源的分段下载和续点下载应用中很有用。例如:Content-Range:500-900

    Content-Type:响应数据的MIME类型,例如:Content-Type: text/html; charset=utf-8

    Date:响应消息发送的GMT格式日期,例如:Date: Tue, 15 Nov 1994 08:12:31 GMT

    ETag:(Entity-Tag的缩写)资源的一个标识,类似于key-value pair(键值对)中的key。ETag通常用于校验一个资源实体有没有被修改过。在数据缓存和PUT方法更新资源时候有用处。例如:ETag: “737060cd8c284d8af7ad3082f209582d”

    Expires:告诉客户端该响应数据会在指定的时间过期,通常用于给客户端缓存作为参考。例如:Expires: Thu, 01 Dec 1994 16:00:00 GMT

    Last-Modified:客户端所请求的资源的最后修改时间。

    Link:描述当前被请求的资源和另外一个资源的关系。这种关系被定义在RFC5988。例如:Link: </feed>; rel=”alternate”

    Location:用户通知客户端转跳(重定向)到另一个URL(就是asp.net中Response.Redirect()方法的效果)。例如:Location: http://www.w3.org/pub/WWW/People.html

    P3P:Platform for Privacy Preferences Project的缩写,表示本站点遵守P3P协议(标称本站点不会违法使用用户信息)并希望收集用户信息。不过P3P目前使用并不广泛,特别国内并不重视P3P。P3P的值的格式为: P3P:CP=”your_compact_policy”。

    Pragma:在请求/响应链上附近的一些参数。该头域内容较多,我会在下一篇博客中做介绍。

    Proxy-Authenticate:访问代理时需要使用的验证方式。例如:Proxy-Authenticate: Basic

    Refresh:用于令客户端在指定N秒后转跳到另外一个URL。例如:Refresh:6,http://www.google.com.hk 6秒后转跳到google

    Retry-After:用于因为某些原因(例如该资源暂时无效)通知客户端在指定时间后重新尝试请求,时间单位为秒。例如:Retry-After:60 一分钟后重新尝试请求该资源。

    Server:服务器的名称。例如 Server: Apache/2.4.1 (Unix)

    Set-Cookie:对客户端设置cookie。例如:Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

    Strict-Transport-Security:用于指示客户端如何对HTTPS进行缓存(缓存多长时间)以及是否对子域生效。例如:Strict-Transport-Security: max-age=16070400; includeSubDomains

    Trailer:当响应资源已chunked编码(具体请google一下chunked编码)传输时,每个Chunked-Body尾部的额外数据。

    Transfer-Encoding:响应内容的传输编码方式,通常有 chunked, deflate, gzip等。

    Vary:用来指示缓存代理(例如squid)根据什么条件去缓存一个请求。Vary的可能值有: Vary: Accept-Encoding Vary: Accept-Encoding,User-Agent Vary: X-Some-Custom-Header,Host Vary: *

    Via:告诉客户端,该回应经历了那些代理。例如 Via: 1.0 example1.com, 1.1 example2.com (Apache/1.1)

    WWW-Authenticate:表示当前是用什么验证方式访问一个资源。例如:WWW-Authenticate:base

     

     

  • 相关阅读:
    【区间覆盖问题】uva 10020
    【Fibonacci】BestCoder #28B Fibonacci
    Struts2 用过滤器代替了 servlet ,???? 且不需要tomcat就可以直接做功能测试
    血的教训 password写成passward,教训应该从首页赋值 参数名
    为什么这个地方用重定向会报错.只能用 服务器跳转?? 为什么我加了过滤器,还是能直接登陆 servlet
    //可以不保存在session中, 并且前面我保存在request,这里session也可以获取 chain.doFilter(request, response); //只有登录名不为空时放行,防止直接登录 成功的页面
    request.setAttribute("username", username);//一定要保存,OGNL才能获取${username}
    form表单的提交地址一定要是完整的绝对地址
    登录页面jsp跳转到另一个jsp 与jsp-Servlet-jsp
    在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/11231411.html
Copyright © 2011-2022 走看看