晴明的博客园 GitHub      CodePen      CodeWars     

[http] http一些零碎

#

Content-Type

  MediaType,即是Internet Media Type,互联网媒体类型;
  也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。

    类型格式:type/subtype(;parameter)? type  
    主类型,任意的字符串,如text,如果是*号代表所有;   
    subtype 子类型,任意的字符串,如html,如果是*号代表所有;   
    parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数。   

 例如: Content-Type: text/html;charset:utf-8;

 常见的媒体格式类型如下:

        text/html : HTML格式
        text/plain :纯文本格式     
        text/xml :  XML格式
        image/gif :gif图片格式   
        image/jpeg :jpg图片格式
        image/png:png图片格式

   以application开头的媒体格式类型:

       application/xhtml+xml :XHTML格式
       application/xml     : XML数据格式
       application/atom+xml  :Atom XML聚合格式   
       application/json    : JSON数据格式
       application/pdf       :pdf格式
       application/msword  : Word文档格式
       application/octet-stream : 二进制流数据(如常见的文件下载)
       application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

   另外一种常见的媒体格式是上传文件之时使用的:

        multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

#

form

enctype

    application/x-www-form-urlencoded

    multipart/form-data

    text/plain

    application/json (deprecated)
    
application/x-www-form-urlencoded

这是默认的编码类型,使用该类型时,会将表单数据中非字母数字的字符转换成转义字符,
如"%HH",然后组合成这种形式key1=value1&key2=value2;
所以后端在取数据后,要进行解码。
若表单中有文件,则只留文件名。

multipart/form-data

该类型用于高效传输文件、非ASCII数据和二进制数据,将表单数据逐项地分成不同的部分,
用指定的分割符分割每一部分。每一部分都拥有Content-Disposition头部,指定了该表单项的键名和一些其他信息;
并且每一部分都有可选的Content-Type,不特殊指定就为text/plain。

一般来说,method和enctype是两个不同的互不影响的属性,但在传文件时,
method必须要指定为POST,否则文件只剩下filename;
当没有传文件时,enctype会改回默认的application/x-www-form-urlencoded。

text/plain

按照键值对排列表单数据key1=value1\r\nkey2=value2,不进行转义。
若表单中有文件,则只留文件名;

ajax

Content-Type

    application/x-www-form-urlencoded

    multipart/form-data

    text/plain

    application/json

    text/xml

  

SSL延迟

客户端首先发送SYN数据包,然后服务器发送SYN+ACK数据包,最后客户端发送ACK数据包,接下来就可以发送内容了。

这三个数据包的发送过程,叫做TCP握手。

而HTTPs链接,它也采用TCP协议发送数据,所以它也需要上面的这三步握手过程。

而且,在这三步结束以后,它还有一个SSL握手。

    HTTP耗时 = TCP握手

    HTTPs耗时 = TCP握手 + SSL握手

 

#GET和POST的区别

浅显答案:
    GET在浏览器回退时是无害的,而POST会再次提交请求。


    GET产生的URL地址可以被Bookmark,而POST不可以。


    GET请求会被浏览器主动cache,而POST不会,除非手动设置。


    GET请求只能进行url编码,而POST支持多种编码方式。


    GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。


    GET请求在URL中传送的参数是有长度限制的,而POST么有。


    对参数的数据类型,GET只接受ASCII字符,而POST没有限制。


    GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。


    GET参数通过URL传递,POST放在Request body中。

深层答案:
    
    GET和POST本质上都是TCP链接,并无差别。
    但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

    GET产生一个TCP数据包;POST产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    但并不是所有浏览器都会在POST中发送两次包,例如Firefox就只发送一次。

posted @ 2016-07-14 10:25  晴明桑  阅读(155)  评论(0编辑  收藏  举报