Web开发都应该知道HTTP

前言

  作java web的,怎么能不熟悉http。能够说这是对web开发最重要的一条协议,面试的时候也不免会被问到这个问题,因此必须深入了解这个协议。html

HTTP简单介绍

  首先咱们要知道什么是协议,协议就是一系列的信息交换规则。只有彻底符合规则,两个相互独立的系统才能交互。显然http也是这样的。java

  它中文叫作超文本传输协议,它是无状态的协议,它是属于七层结构里的最上层--应用层的协议,它的默认端口是80,它的目前版本是HTTP/1.1,它是本质上也是基于文本流的(固然有时候也会有一些Media类型的)。web

URL简介

  

  URL是用来惟一肯定网上资源的,它的格式如上图所示。面试

  http中,分Client和Server,因此说HTTP是基于TCP的。通常来讲是Client发起请求,Server相应。具体来讲:通常是用于用户给浏览器发请求,而后浏览器将请求组成一个符合http协议的报文发送给服务器,服务器根据http规则来解析出请求报文,而后再将返回信息一样组织成http响应报文,发送给浏览器,最后浏览器呈现给用户。chrome

HTTP通常介绍

  

  上图是chrome-F12下能够看到的内容,先看request head,http的消息分为消息头,和消息体,通常消息体是空的。消息头包含都是一些元数据(不是用户相关的),好比编码信息等,在REST风格下,请求头比请求体重要。那么能够看到第一句就是"GET /yl0822/ HTTP/1.1",GET指的是请求方法:浏览器

  ① GET:这是最简单的http请求方法,点击链接的时候默认使用的就是GET,它就是让Server把请求的资源给客户端,而且不作任何修改,也就是说是只读的,因此对于资源操做来讲,它是安全的。并且GET有很明显的一点就是query String会显示在url里面,这是很是不安全的,因此安全性要求不高的能够用GET。tomcat

  ② POST:用于你想要在服务器处理请求,它将请求数据写在消息体里面,因此是比较安全的。安全

  ③ DELETE、PUT:不作介绍,能够用POST代替,因此历来没用过。服务器

  /yl0822/是路由,指向请求目标,HTTP/1.1是协议版本。网络

  Host是主机地址,其实是IP地址,为方便记忆才用cnblogs、baidu、google啥的,没写端口是由于默认就是80。其余键值对都是客户端对请求的约束。

  再看response,和请求不同,对响应来讲响应体是很是重要的,由于它就是你看到的网页,响应头中有两个要注意的,其一就是stateCode,各类状态码表明着什么意思,网上有不少了,这里就不赘述了。另一个就是Content-Type,表示请求的返回类型,通常的有"text/html"、"text/plain"、"image/gif"、"image/jpeg"、"video/mpeg"等等。

  

  标准的Http请求和响应中间都是隔着一行空行的,叫Blank Line。以这个来识别head和body。

实现一个简单的Server

  说的很简单,实现起来其实也简单,下面实现一个简单的Http服务器。

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.io.PrintWriter;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 public final class SimpleServer {
 8     public static void main(String[] args) throws Exception{
 9         //a port is needed
10         int port = 80;
11         //Establish the listen socket
12         ServerSocket serverSocket = new ServerSocket(port);
13         //Process HTTP Service requests in an infinite loop
14         System.out.println("waiting for connect...");
15         while (true){
16             //listen for a tcp connection request
17             Socket socket = serverSocket.accept();
18             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
19             PrintWriter out = new PrintWriter(socket.getOutputStream());
20             /**
21              * 读取请求head信息,
22              * */
23             String str = ".";
24             while (!str.equals("")){
25                 str = in.readLine();
26                 System.out.println(str);
27             }
28 
29             //返回请求响应
30             String response = "<html><head>" +
31                     "<title>Simpl Web Page</title></head>\n" +
32                     "<h1>Congratulations!!!</h1>\n" +
33                     "<h3>This page was returned by " + "localhost" + "</h3>\n" +
34                     "<p>This is the first page hosted by your web server.\n</p>" +
35                     "Visit <A HREF=\"http://www.techwiki.ordak.org\"> http://www.techwiki.ordak.org</A> for more sample codes.\n" +
36                     "</html>\n";
37             out.println("HTTP/1.1 200 OK");
38             out.println("Content-Type: text/html");
39             out.println("Server: SimpleServer");
40             out.println("Content-length: "+response.length());
41             //this blank line signals the end of the headers
42             out.println("");
43             out.println(response);
44             out.flush();
45             socket.close();
46          }
47     }
48 }

  而后在浏览器输入localhost便可看到响应了。若是有时间的话,你们能够看下tomcat或jetty的源码,里面对http协议的解析作的很是到位,也给了许多接口来获取和修改http的设置。

HTTPS是什么

  HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。

https和http的区别

  https:URL代表它使用了HTTP,但HTTPS存在不一样于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通信方法,如今它被普遍用于万维网上安全敏感的通信,例如网银支付方面。

  1、https协议须要到ca申请证书,通常免费证书不多,须要交费。https 能够是按单个域名购买费用,若是全站都作https费用会比较高。

  2、http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议。

  3、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。

  4、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  5、https是在外网传输节点上进行加密已防止信息被第三方窃听或篡改。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

相关文章
相关标签/搜索