精华内容
下载资源
问答
  • java面试题32:Java网络程序设计中,下列正确的描述是() A:Java网络编程API建立在Socket基础之上 B:Java网络接口只支持tcP以及其上层协议 C:Java网络接口只支持UDP以及其上层协议 D:Java网络接口支持IP...

    java面试题32:Java网络程序设计中,下列正确的描述是()

    A:Java网络编程API建立在Socket基础之上
    B:Java网络接口只支持tcP以及其上层协议
    C:Java网络接口只支持UDP以及其上层协议
    D:Java网络接口支持IP以上的所有高层协议

    蒙蔽树上蒙蔽果,蒙蔽树下你和我。不多说了,先看看网络编程。

    一、网络编程基础概念

    首先理清一个概念:网络编程不等于网站编程,网络编程即使用套接字来达到进程间通信,现在一般称为TCP/IP编程。

    计算机网络:

    把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件,软件,数据信息等资源。

    计算机网络的主要功能:

        资源共享
        信息传输与集中处理
        均衡负荷与分布处理
        综合信息服务(www / 综合业务数字网络 ISDN)

    计算机网络三高问题: 高并发,高性能,高可用。

    计算机网络分类:

        局域网
        城域网
        广域网
        互联网
        等等…

    (Local Area Network;LAN) 通常我们常见的“LAN”就是指局域网,这是我们最常见、应用最广的一种网络
    二、网络通信协议及接口

    网络通信协议:

    计算机网络中实现通信必须有一些约定,即通信协议;包括对速率,传输代码,代码结构,传输控制步骤,出错控制等制定的标准。

    网络通信接口:

    为了使两个节点之间能进行对话,必须在他们之间建立通信工具(即接口),使彼此之间,能进行信息交换。接口包括两部分:

        硬件装置:实现结点之间的信息传送
        软件装置:规定双方进行通信的约定协议

    三、通信协议分层思想

    为什么要分层:

    由于结点之间联系很复杂,在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式就是层次方式,及同层间可以通信,上一层可以调用下一层,而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展。

    通信协议的分层规定:

    把用户应用程序作为最高层,把物理通信线路作为最底层,将其间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。
    四、参考模型


    五、IP协议

        每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了。

        IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255。

    InetAddress类

    说到IP地址,就要引入一个类:InetAddress
    此类表示互联网协议 (IP) 地址。

    InetAddress类无构造方法

    常用方法摘要

    byte[] getAddress()
    返回此 InetAddress 对象的原始 IP 地址。
    static InetAddress getByName(String host)
    在给定主机名的情况下确定主机的 IP 地址。
    String getHostAddress()
    返回 IP 地址字符串(以文本表现形式)。
    String getHostName()
    获取此 IP 地址的主机名。
    static InetAddress getLocalHost()
    返回本地主机。
    127.0.0.1:本机地址,主要用于测试。别名:Localhost

    案例

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class TestIP {
        public static void main(String[] args) throws UnknownHostException {
            //InetAdress类表示IP地址
    
            //获取本机IP
            InetAddress ip = InetAddress.getLocalHost();
            System.out.println(ip);
            //获得主机名
            System.out.println(ip.getHostName());
            //获得IP地址
            System.out.println(ip.getHostAddress());
        }
    }

    案例二

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class TestIP2 {
        public static void main(String[] args) throws UnknownHostException {
            InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
            // 获取此 IP 地址的主机名。
            System.out.println(inetAddress.getHostName());
            //返回 IP 地址字符串(以文本表现形式)。
            System.out.println(inetAddress.getHostAddress());
        }
    }
    
    

    运行


    在这里插入图片描述
    六、端口

        IP地址用来标识一台计算机,但是一台计算机上可能提供多种网络应用程序,如何来区分这些不同的程序呢?这就要用到端口。
        端口是虚拟的概念,并不是说在主机上真的有若干个端口。
        通过端口,可以在一个主机上运行多个网络应用程序。端口的表示是一个16位的二进制整数,2个字节,对应十进制的0~65535。

    MySQL(3306),Oracle(1521),Tomcat(8080)等等程序都有自己的端口

    查看端口

        用命令提示符cmd查看所有端口:netstat -ano
        查看具体程序:使用任务管理器查看PID

    InetSocketAddress类

    说到端口,则要引入一个类:InetSocketAddress

    此类实现 IP 套接字地址(IP 地址 + 端口号)。

    构造方法摘要
    InetSocketAddress(InetAddress addr, int port)
    根据 IP 地址和端口号创建套接字地址。
    InetSocketAddress(int port)
    创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。
    InetSocketAddress(String hostname, int port)
    根据主机名和端口号创建套接字地址。
    常用方法摘要
    InetAddress getAddress()
    获取 InetAddress。
    String getHostName()
    获取 hostname。
    int getPort()
    获取端口号。

    案例

    import java.net.InetAddress;
    import java.net.InetSocketAddress;
    
    public class TestPort {
        public static void main(String[] args) {
            InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1",8082);
            System.out.println(inetSocketAddress.getHostName());
            //获得InetSocketAddress的端口
            System.out.println(inetSocketAddress.getPort());
            System.out.println(inetSocketAddress.getHostString());
            //返回一个InetAddress对象(IP对象)
            InetAddress address = inetSocketAddress.getAddress();
        }
    }
    
    

    七、URL

    URI=URL+URN

    URI:Uniform Resource Identifier ,统一资源标志符。
    URL:Uniform Resource Locator,统一资源定位符。
    URN:Uniform Resource Name,统一资源命名。

    网络三大基石:HTML,HTTP,URL
    URL

        在www上,每一信息资源都有统一且唯一的地址,即统一资源定位符。Uniform Resource Locator。
        如:https://localhost:8080/index.html ,有4部分组成。(协议,主机域名或IP,端口号,资源文件名)

    URL类

    构造方法摘要
    URL(String spec)
    根据 String 表示形式创建 URL 对象。
    URL(String protocol, String host, int port, String file)
    根据指定 protocol、host、port 号和 file 创建 URL 对象。
    URL(String protocol, String host, String file)
    根据指定的 protocol 名称、host 名称和 file 名称创建 URL。

    常用方法摘要
    String getAuthority()
    获取此 URL 的授权部分。
    int getDefaultPort()
    获取与此 URL 关联协议的默认端口号。
    String getFile()
    获取此 URL 的文件名。
    String getHost()
    获取此 URL 的主机名(如果适用)。
    String getPath()
    获取此 URL 的路径部分。
    int getPort()
    获取此 URL 的端口号。
    String getUserInfo()
    获取此 URL 的 userInfo 部分。

    案例

    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class TestURL {
        public static void main(String[] args) throws MalformedURLException {
    
            URL url2 = new URL("https://www.bilibili.com/");
            
            //获取此的授权部分 URL 。
            System.out.println(url2.getAuthority());
    
            //获取此 URL的文件名。
            System.out.println(url2.getFile());
    
            //获取端口
            System.out.println(url2.getPort());
    
            //获取主机
            System.out.println(url2.getHost());
    
            //获得默认端口
            System.out.println(url2.getDefaultPort());
    
            //获得路径
            System.out.println(url2.getPath());
    
            //获取该 URL的userInfo部分。
            System.out.println(url2.getUserInfo());
        }
    }
    
     

    小结:


    八、TCP协议和UDP协议

        TCP和UDP位于同一层,都是建立在IP层的基础之上。由于两台电脑之间有不同的IP地址,因此两台电脑就可以区分开来,也就可以互相通话了。
        通话一般有两种通话方式:第一种是TCP,第二种是UDP。
        TCP是可靠的连接,TCP就像打电话,需要先打通对方电话,等待对方有回应后才会跟对方继续说话,也就是一定要确认可以发信息以后才会把信息发出去。TCP上传任何东西都是可靠的,只要两台机器上建立起了连接,在本机上发送的数据就一定能传到对方的机器上。
        UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。
        TCP传送数据虽然可靠,但传送得比较慢;UDP传送数据不可靠,但是传送得快。

    UDP编程:

    需求:完成在线咨询功能,学生和老师在线一对一交流
    分析:

        使用基于UDP协议的Socket网络编程实现
        不需要利用IO流实现数据的传输
        每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中去寻找他的目的地,一切以包为中心。

    UDP基本概念:

        DatagramSocket:用于发送或接收数据包的套接字
        DatagramPacket:数据包

    实现

    接收方

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class PeopleOne {
        public static void main(String[] args) throws IOException {
            //1.开放一个端口
            DatagramSocket socket = new DatagramSocket(5051);
            //2.准备容器接收
            byte[] receiveBuf = new byte[100];
            //3.等待包裹容器封包
            DatagramPacket packet = new DatagramPacket(receiveBuf,receiveBuf.length);
            System.out.println("等你包裹来。。。。");
            while (true){
                //4.接收包裹
                socket.receive(packet);
                //5.解析包裹
                String receStr = new String(packet.getData(),0,packet.getLength());
                System.out.println("我收到了:"+receStr);
                if (receStr.equals("exit")){
                    break;
                }
            }
            //6.释放资源
            socket.close();
        }
    }

     

    发送方

    import java.io.IOException;
    import java.net.*;
    import java.util.Scanner;
    
    public class PeopleTwo {
        public static void main(String[] args) throws IOException {
            //1.指定一个端口进行发送
            DatagramSocket socket = new DatagramSocket();
            //2.指定一个IP
            InetAddress addr = InetAddress.getByName("127.0.0.1");
            int port = 5051;
            //3.准备一个小容器
            byte[] sendBuf;
            while (true){
                Scanner scanner = new Scanner(System.in);
                System.out.println("你要发什么东西:");
                String s = scanner.nextLine();
                //4.加入要放的数据
                sendBuf = s.getBytes();
                //5.数据打包
                DatagramPacket packet = new DatagramPacket(sendBuf,sendBuf.length,addr,port);
                //6.发送包
                socket.send(packet);
                if (s.equals("exit")){
                    break;
                }
            }
            //7.释放资源
            socket.close();
        }
    }

    运行
    在这里插入图片描述
    在这里插入图片描述
    TCP编程:

    需求:完成网络登录功能

        用户输入用户名密码,服务器给出登录成功或失败的提示

    分析:

        使用基于TCP协议的Socket网络编程实现
        TCP协议基于请求响应模式
        在网络通讯中,第一次主动发起通讯的程序被作为客户端程序
        第一次通讯中等待连接的程序被称作服务器程序
        利用IO流实现数据的传输

    实现

    服务器

    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TestServer {
    
        public static void main(String[] args) throws IOException {
            //服务器开启了一个监听端口
            ServerSocket serverSocket = new ServerSocket(6666);
            System.out.println("开启了服务器");
            while (true){
                //等待客户端连接
                Socket accept = serverSocket.accept();
                System.out.println("有一个人连接过来了");
                //获得客户端输入的东西
                InputStream inputStream = accept.getInputStream();
                //包装成DataInputStream流
                DataInputStream dataInputStream = new DataInputStream(inputStream);
                //通过流流读取消息
                String s = dataInputStream.readUTF();
                System.out.println(s);
            }
        }
    }

    客户端

    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    
    public class TestClient {
        public static void main(String[] args) throws IOException {
            //创建同一连接
            Socket s = new Socket("127.0.0.1",6666);
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            dos.writeUTF("hello,world!");
        }
    }

    运行
    在这里插入图片描述
    九、Socket编程

    一般的网络编程都称为Socket编程,Socket的英文意思是“插座”。

    在这里插入图片描述

        两台电脑都安装上一个插座,然后使用一根线的两端插到两台电脑的插座上,这样两台电脑就建立好了连接。这个插座就是Socket。

        因为互相之间都能互相通信,我说你是我的Server只是从逻辑意义上来讲,我应该把东西先发到你那里去,然后由你来处理,转发。所以你叫Server。但从技术意义上来讲,只有TCP才会分Server和Client。对于UDP来说,从严格意义上来讲,并没有所谓的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

        两台计算机互相连接,那么首先必须得知道它们的IP地址,但是只提供IP地址是不够的,还必须要有连接的端口号,也就是要连接到哪个应用程序上。

        端口号是用来区分一台机器上不同的应用程序的。端口号在计算机内部是占2个字节。一台机器上最多有65536个端口号。一个应用程序可以占用多个端口号。端口号如果被一个应用程序占用了,那么其他的应用程序就无法再使用这个端口号了。记住一点,我们编写的程序要占用端口号的话占用1024以上的端口号,1024以下的端口号不要去占用,因为系统有可能会随时征用。端口号本身又分为TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的两个端口。TCP端口和UDP端口都有65536个。
    好像没啥评论,答案A,D,留给思考的你们。

    我是歌谣,今天刷题结束。不断积累,不断学习,共同交流,不多说了,代码走起来。

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期更新计算机领域知识)

    阅读目录(置顶)(长期科技领域知识)

    歌谣带你看java面试题

    展开全文
  • URL与URI

    千次阅读 2019-04-23 22:14:28
    URL与URI 而URL是uniform resource locator,统一资源定位器 URI,是uniform resource identifier...2、格式不同:URL的格式一般由下列三部分组成:第一部分是协议(或称为服务方式);第二部分是存有该资源的主机IP地址...

    URL与URI
    URL是uniform resource locator,统一资源定位器
    URI,是uniform resource identifier,统一资源标识符
    1、URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种URI。
    2、格式不同:URL的格式一般由下列三部分组成:第一部分是协议(或称为服务方式);第二部分是存有该资源的主机IP地址(有时也包括端口号);第三部分是主机资源的具体地址。URI一般由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示。

    URL代表资源的路径地址,而URI代表资源的名称。
    通过URL找到资源是对网络位置进行标识,如:
    http://example.org/absolute/URI/with/absolute/path/to/resource.txt
    ftp://example.org/resource.txt
    通过URI找到资源是通过对名称进行标识,这个名称在某命名空间中,并不代表网络地址,如:
    urn:issn:1535-3613

    URI = Universal Resource Identifier 统一资源标志符
    URL = Universal Resource Locator 统一资源定位符
    URN = Universal Resource Name 统一资源名称
    这三者的关系如下图:
    在这里插入图片描述

    从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN。这讨论这样的问题时,最好的方法就是回到原点啊,这里我们在RFC 3986: Uniform Resource Identifier (URI): Generic Syntax里面收集了点资料:
    “A Uniform Resource Identifier (URI) 是一个紧凑的字符串用来标示抽象或物理资源。”
    “A URI 可以进一步被分为定位符、名字或两者都是. 术语“Uniform Resource Locator” (URL) 是URI的子集, 除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”)。“
    那我们无所不知的维基百科把这段消化的很好,并描述的更加形象了:
    “URI可以分为URL,URN或同时具备locators 和names特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。”

    我们经常使用的URI不是严格技术意义上的URL。例如:你需要的文件在files.hp.com. 这是URI

    扩展资料
    当我们替代web地址的时候,URI和URL中,URI更准确。我们经常使用的URI不是严格技术意义上的URL。例如:你需要的文件在files.hp.com. 这是URI,但不是URL–系统可能会对很多协议和端口都做出正确的反应。
    https://blog.csdn.net/aixiangnan 是个URL,通过这个网址可以告诉我们用HTTP协议访问,而isbn:0-395-36341-1是RUN,一个国际标准书号,可以唯一确定哪本书。目前HTTP规范已经不使用URL,而是使用URI了,所以URI更具有前景。

    展开全文
  • url 重定向

    千次阅读 2011-05-22 13:17:00
    又有可能因为换了网路的免费网页空间,网址又必须要变更,知情的使用者还以为网站关闭了。这时就可以用网路上的转址服务了。这个技术使一个网页是可借由不同的统一资源定位符(URL)连结。 编辑本段作用 URL...

    URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网站网址,转成较短的网址。因为当要传播某网站的网址时,常常因为网址太长,不好记忆;又有可能因为换了网路的免费网页空间,网址又必须要变更,不知情的使用者还以为网站关闭了。这时就可以用网路上的转址服务了。这个技术使一个网页是可借由不同的统一资源定位符(URL)连结。

    编辑本段作用

      URL重定向就是把一个URL重定向到另一个URL上去。重定向即是把一个目录或者文件的访问请求转发至另外一个目录或者文件,当用户发出相应的访问请求时将自动跳转到指定的位置,常见的重定向有301(永久重定向)及302(暂时重定向)两种。

      在做搜索引擎优化时对URL进行重定向都会使用301永久性重定向,重定向常用于域名或者目录变更的情况,可以有效实现新旧域名或者新旧目录之间的无缝对接。不管是对于普通用户还是搜索引擎都是十分友好的。搜索引擎可以识别301的永久性重定向从而将原来URL上的权重转移到你重新向后的新URL上,这对搜索引擎优化是非常重要的。

      有些人也会利用重定向,向搜索引擎返回经过特别优化甚至是作弊的页面,搜索引擎已经把部分重定向方式列入违规行为的行列。[1]

     

     

    http referer

     

    简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。 Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。 Request.ServerVariables("HTTP_REFERER")的用法(防外连接) 下列情况是从浏览器的地址栏正常取得Request.ServerVariables("HTTP_REFERER"): 1) 直接用<a href=""> 2) 用Submit或<input type="image">提交的表单(POST或GET) 3) 使用JAvaScript提交的表单(POST或GET) 下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况: 1) 从收藏夹链接 2) 单击主页或自定义的地址 3) 在浏览器中直接输地址 4) 使用JavaScript的Location.href或者是Location.replace() 5) <%Response.Redirect%> 6) <%Response.AddHeader%>或者是<mete http-equiv="refresh">转向 7) 用XML加载地址 防外链代码例子(C#): if (Request.ServerVariables["HTTP_REFERER"] == null || !Request.ServerVariables["HTTP_REFERER"].ToString().Contains(Request.ServerVariables["HTTP_HOST"].ToString())) { Server.Transfer("Error.aspx"); } =========================================================== 下列情况是从浏览器的地址栏正常取得Request.ServerVariables("HTTP_REFERER")的: 1.直接用<a href> 2.用Submit或<input type=image>提交的表单(POST or GET) 3.使用Jscript提交的表单(POST or GET) 下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况: 1.从收藏夹链接 2.单击'主页'或者自定义的地址 3.利用Jscript的location.href or location.replace() 4.在浏览器直接输入地址 5.<%Response.Redirect%> 6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向 7.用XML加载地址 显然,Request.ServerVariables("HTTP_REFERER")在多数情况下是不能正常工作的,下面我们看一个例子: ref.asp <% response.write "You came from: " & request.servervariables("http_referer") %> ref.htm <% Response.AddHeader "Refresh", "10;URL=ref.asp" %> <meta http-equiv='refresh' content='10;URL=ref.asp'> <form method=GET action=ref.asp name=getform> <input type=submit value=' Go there (GET) >> '> <input type=image style='cursor:hand'> </form><p> 看看上面的代码会得到什么的结果. <form method=POST action=ref.asp name=postform> <input type=submit value=' Go there (POST) >> '> <input type=image style='cursor:hand'> </form><p> <a href='ref.asp'>直接链接</a><p> <a href='#' οnclick='window.location.href="ref.asp";return false;'>Javascript location</a><p> <a href='#'οnclick='window.location.replace("ref.asp");return false;'>Javascript replace</a><p> <a href='#' οnclick='document.getform.submit();return false;'>javascript GET</a><p> <a href='#' οnclick='document.postform.submit();return false;'>javascript POST</a> Request.ServerVariables(HTTP_REFERER)的工作方式 在JSP中获取REFERER的方式是:request.getHeader("REFERER"); 在PHP中获取REFERER的方式是:$_SERVER['HTTP_REFERER'];

     

     

     

    HTTP head 详解
    2011-01-26 15:28
    http header详解

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。  

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。  

    通用头域  

    通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。  


    Cache-Control头域  

    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:  

    Public指示响应可被任何缓存区缓存。  

    Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。  

    no-cache指示请求或响应消息不能缓存  

    no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。  

    max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。  

    min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。  

    max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。  
    Date头域  

    Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。  


    Pragma头域  

    Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。  

    请求消息  

    请求消息的第一行为下面的格式:  

    MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。 HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。  

    SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。  

    典型的请求消息:  

    GET http://download.microtool.de:80/somedata.exe  
    Host: download.microtool.de  
    Accept:*/*  
    Pragma: no-cache  
    Cache-Control: no-cache  
    Referer: http://download.microtool.de/  
    User-Agent:Mozilla/4.04[en](Win95;I;Nav)  
    Range:bytes=554554-  

    上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。  
    Host头域  

    Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。  


    Referer头域  

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。  


    Range头域  

    Range头域可以请求实体的一个或者多个子范围。例如,  

    表示头500个字节:bytes=0-499  

    表示第二个500字节:bytes=500-999  

    表示最后500个字节:bytes=-500  

    表示500字节以后的范围:bytes=500-  

    第一个和最后一个字节:bytes=0-0,-1  

    同时指定几个范围:bytes=500-600,601-999  

    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。  
    User-Agent头域  

    User-Agent头域的内容包含发出请求的用户信息。  

    响应消息  

    响应消息的第一行为下面的格式:  

    HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF  

    HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status- Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:  

    1xx:信息响应类,表示接收到请求并且继续处理  

    2xx:处理成功响应类,表示动作被成功接收、理解和接受  

    3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理  

    4xx:客户端错误,客户请求包含语法错误或者是不能正确执行  

    5xx:服务端错误,服务器不能正确执行一个正确的请求  

    响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。  

    典型的响应消息:  

    HTTP/1.0200OK  

    Date:Mon,31Dec200104:25:57GMT  

    Server:Apache/1.3.14(Unix)  

    Content-type:text/html  

    Last-modified:Tue,17Apr200106:46:28GMT  

    Etag:"a030f020ac7c01:1e9f"  

    Content-length:39725426  

    Content-range:bytes554554-40279979/40279980  

    上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。  
    Location响应头  

    Location响应头用于重定向接收者到一个新URI地址。  

    Server响应头  

    Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。  

    实体  

    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。  

    Content-Type实体头  

    Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型 Content-Range实体头  

    Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:  

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth  

    例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。  

    Last-modified实体头  

    Last-modified实体头指定服务器上保存内容的最后修订时间。 

     

     

    应答头 aaaaaaaaaaaaaaaaaaaaaaaaa说明
    Allow服务器支持哪些请求方法(如GET、POST等)。
    Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
    Content-Length表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。
    Content-Type表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。 
    Date当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
    Expires应该在什么时候认为文档已经过期,从而不再缓存它?
    Last-Modified文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
    Location表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    Refresh表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 
    注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。 

    注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 

    注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
    Server服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
    Set-Cookie设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
    WWW-Authenticate客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 
    注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

     

    展开全文
  • 用传统方法使用HttpURLConnection进行上传时,进度条显示过快,达到100%之后会卡很长时间,其实此时还在上传。这是因为HttpURLConnection自己维护的一个...可以通过下列方法禁掉缓存: URL uri = new URL(post_url);
    用传统方法使用HttpURLConnection进行上传时,进度条显示过快,达到100%之后会卡很长时间,其实此时还在上传。这是因为HttpURLConnection自己维护的一个缓存,先把要上传的数据写入缓存里,然后才传。而我们得到的进度却是写入缓存的进度,所以进度条会更新很快。可以通过下列方法禁掉缓存:
      	    URL uri = new URL(post_url);
                conn = (HttpURLConnection) uri.openConnection();
                conn.setReadTimeout(100000);
                conn.setConnectTimeout(100000);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setFixedLengthStreamingMode((int) (before.length + simpleUploadTask.fileSize + after.length));//主要是这句,用来禁掉缓存,不过需要将上传数据的大小传进去
                conn.setUseCaches(false);
                conn.setAllowUserInteraction(false);
                conn.setRequestProperty("Connection", "close");
                System.setProperty("http.keepAlive", "false");
                conn.setRequestMethod("POST"); // Post方式
                conn.setRequestProperty("Charsert", "UTF-8");
                conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
               

    展开全文
  • URL原理、URL编码、URL特殊字符

    万次阅读 2017-03-31 14:54:45
    From: http://blog.csdn.net/chenlycly/article/details/51820727 From: http://blog.csdn.net/zmx729618/article/details/51381655 From: ...   HTML URL 编码参考手册:htt...
  • URL encoding

    千次阅读 2014-05-07 13:56:04
    URL编码 编辑 url编码是一种浏览器用来打包表单输入的格式,一般常见于浏览器地址栏目中。 目录 1定义 2编码规则 3URL编码表 4防止sql注入 5使用举例 ▪ 前言 ▪ 常见出错...
  • 今天更新webservices的时候,如下图:    报出了下面的错误:    在服务端打开asmx文件时,错误信息如下: ...试图加载格式不正确的程序。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈
  • CakePHP URL重写

    千次阅读 2014-05-07 16:47:40
    URL 重写 Apache 和 mod_rewrite (.htaccess) 当 CakePHP 建立在以 mod_rewrite 为工作环境时(通常都会这么做) ,一些用户会努力去做一切能让系统更好运行的事情。 这里有一些事情你可以尝试让它能够正常...
  • 使用python对url编码解码

    万次阅读 2015-11-26 19:42:35
    最近在抓取一些js代码产生的动态数据,需要模拟js请求获得所需用的数据,遇到对url进行编码和解码的问题,就把遇到的问题总结...当url中带有汉字时,需要特殊的处理才能正确编码,以下都只针对这种情形,当然也适用于纯
  • 验证URL的合法性

    千次阅读 2019-05-27 16:01:28
    通过正则表达式验证url的合法性 """ Data: 2019/5/27 13:56 """ import re def legal_url(url): pattern = re.compile(r'^(http|https|ftp|rtsp|mms)://' # 头部协议 ...
  •  allow_url_fopen=ON常常会给服务器和管理员带来麻烦,但是经常性(至少我这样认为)的我们需要远程读取某个东西,如果设置allow_url_fopen=OFF将其关闭,我们就没有办法远程读取。  幸好我们有一个很好的PHP...
  • URL 过滤

    千次阅读 2016-08-29 21:26:59
    计算该校验和需要执行下列步骤: 移除现存的校验和及注释(如果有)。 使用 UTF-8 编码对过滤规则列表的文本进行编码。 转换所有换行符为 Unix 样式(替换掉 \r 用 \n ,如果有)。 移除空行(用 \n ...
  • apache URL重写指南

    千次阅读 2007-07-23 14:41:00
    Engelschall December 1997本文是mod_rewrite的参考文档,阐述在实际应用中如何解决网管所面临的基于URL的典型问题,并详细描述了如何配置URL重写规则集以解决问题。mod_rewrite简介Apache的mod_rewrite是提供了...
  • URI和URL的区别

    千次阅读 2018-08-01 23:56:46
    一、URL和URI定义: 1.URL是全球资源定位符的英文所写,您平时上网时在IE浏览器中输入的那个地址就是URL。比方:网易http://www.163.com就是一个URL。 2.URI是Web上可用的每种资源-HTML文档、图像、视频片段...
  • URL重写指南

    千次阅读 2006-06-04 19:16:00
    模块索引 | 指令索引 | 常见问题解答 | 词汇表 | 站点导航Apache HTTP服务器 2.0版本Apache主站 > HTTP服务器 > 文档 > 2.0版本 > Miscellaneous DocumentationURL重写指南现有的语种: en | zh-cn Originally ...
  • URL重写有几种方式:

    千次阅读 2010-02-24 13:19:00
    1).通过 HttpContext 类的 RewriteUrl...借助正则表达式来重写URL:理解重写的方式:创建自定义 HTTP 模块和 HTTP 处理程序是相对简单的任务,包括创建实现正确接口的托管类。HTTP 模块必须实现 System.Web.IHttpMod
  • Apache URL重定向指南

    千次阅读 2007-04-27 11:02:00
    mod_rewrite入门 Apache mod_rewrite模块是一个处理URL而又极为复杂的模块,使用mod_rewrite你可处理所有和URL有关的问题,你所付出的就是花时间去了解mod_rewrite的复杂架构,一般初学者都很难实时理解mod_rewrite...
  • 统一资源定位符 (URL

    千次阅读 2017-04-01 16:42:52
    统一资源标识符(uniform/universal resource identifier,URI)用于表示Internet中的资源(通常是文档)。...其二,也是URI更常用的形式,是提供资源的路径或位置,此时它们叫做统一资源定位符(URL)。
  • URL重写之UrlRewriter

    千次阅读 2006-10-27 12:03:00
    发现Url rewriter是个好东西啊,blog也使用了这个东西(转一篇文章研究一个) Download source - 8 Kb IntroductionOne of the most popular extensions to the Apache webserver has been mod_rewrite - a filter ...
  • URL链接中汉字乱码转UTF-8和gb2312

    千次阅读 2016-04-02 18:45:51
    在使用URL向服务器提交数据的时候,如果我们提交的数据中存在汉字,就会出现下列情况 http://192.168.11.22/cgi-bin/serial.cgi?type=text&text=%C9%DB%CD%FB%C8%A8 %C9%DB%CD%FB%C8%A8代表着什么,不是我们想要...
  • ,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好? URL无法显示某些特殊符号,这个时候就要使用编码了。编码的格式为:一个百分号,后面跟对应字符的ASCII(16进制)码值。例如,空格...
  • ”,转念一想,这也要怪作者给力,文档里压根没有提到这个配置,在这里用少量篇幅讲解如何配置排除需要拦截的请求URL,后面用大量篇幅介绍我是如何从源码中得知这个配置的,希望对大家有用!做好自己!--eguid...
  • asp.net url 重定向技术

    千次阅读 2007-03-16 11:14:00
     概要分析如何使用微软提供的ASP.NET来对动态产生的URL地址进行网址重写。网址重写是实现一种截取网址请求并将其进行处理后重新指向到一个指定的网址的过程。作者本人在对各种实现网址重写的技术进行研究和探讨后...
  • 该模块定义了一个标准接口,用于在组件中解析统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将...它支持下列URL方案:file,ftp,gopher,hdl,http,https,imap,mailto,mms,news,nntp,prosp...
  • 一、URL和URI定义:  1.URL是全球资源定位符的英文所写,您平时上网时在IE浏览器中输入的那个地址就是URL。比如:网易 http://www.163.com就是一个URL。  2.URI是Web上可用的每种资源 - HTML文档、图像、...
  • Request获取url各种信息的方法

    千次阅读 2013-01-15 15:30:16
    Request获取url各种信息的方法 Request.UrlReferrer的用法 下列情况下,此属性值是有效的: (1)直接使用链接; (2)通过表单提交的方式,或者说是有PostBack动作的按钮,也或者是通过客户端脚本进行了form.submit...
  • 使用.htaccess实现apache URL重定向

    千次阅读 2018-07-27 00:13:50
     URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术。 二、URL重定向怎么配置?  1)首先需要apache开启重定向,修改httpd.conf配置: 1...
  • 隐私政策网址(URL)

    万次阅读 2018-10-31 00:37:20
    隐私政策网址(URL) 移动APP应用尊重和保护利用用户的隐私所有的服务。为了向您提供更准确,更人性化的服务,将移动APP应用使用和披露按照本隐私政策您的个人信息。 但是移动APP应用将是一个高度的勤勉,审慎义务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,024
精华内容 17,209
关键字:

下列不正确的url是