美文网首页
HTTP协议

HTTP协议

作者: 愤怒小鸟飞呀飞 | 来源:发表于2018-05-17 20:00 被阅读0次
    HTTP请求报文格式:

    HTTP请求报文主要由请求行、请求头部、请求正文3部分组成


    HTTP报文格式.jpeg

    1、请求行
    由3部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔
    请求方法:
    GET POST DELETE TRACE HEAD
    2、请求头
    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
    Usr-Agent:产生请求的的浏览器类型
    Accept:客户端可识别的内容类型列表
    Host:请求的主机名
    其他sever client 约定的信息,如token ,deviceId等信息,以下是实际项目中用到的请求头部,大部分都是自定义,各个请求都需要携带的头信息

    墨客的httpHeader.png
    狐友的HttpHeader.png

    3、请求体

    - (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
                                                  URLString:(NSString *)URLString
                                                 parameters:(NSDictionary *)parameters
                                  constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
                                                      error:(NSError *__autoreleasing *)error
    

    以上parametes参数,通过请求体传的?还是请求头传的?
    请求体


    oc post 传参.png

    问题二:
    cookie是请求的哪一部分
    如上图所示,请求头
    form表单是请求的那一部分?
    请求体
    HTTP响应体可以是json也可以是html

    HTTP策略鉴权分类

    1、HTTP Basic Authentication
    2、session-cookie
    3、token验证
    4、OAuth(开放授权)
    参考链接:https://blog.csdn.net/wang839305939/article/details/78713124

    HTTP常见请求方法

    image.png

    状态码说明

    状态码 说明
    1xx (临时响应)表示临时响应并需要请求这继续执行操作的状态码
    2xx (成功)服务器已经成功处理了请求。通常,这表示服务器提供了请求的网页
    3xx (重定向)表示要完成请求,需要进一步操作。通常这些状态码用来重定向
    4xx (请求错误)这些状态码表示请求可能出错,一般为客户端错误,妨碍了服务器的处理
    5xx (服务器错误)表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错

    问题:和谁通信

    URL决定和谁通信

    URL构成.png
    算法题:判断一个IP是否是合法IP?
    思路:先了解IP的格式,形式为(1255).(1255).(1255).(1255) 有两种方法实现,一种基于对字符串的处理;另一种通过强大的正则表达式判断。

    HTTP && HTTPS

    HTTP全称 hyper Text Transfer Protocol
    HTTPS全称 hyper Text Transfer Protocol OverSecure Socket Layer,HTTPS是以安全为目标的HTTP通道,简单将是HTTP的安全版 HTTPS = HTTP +SSL(安全套接字)

    SSL:Secure Sockets Layer 安全套接层
    TLS:Transport Layer Security 传输层安全,SSL继任者
    TLS与SSL在传输层之上对网络连接进行加密,为网络通信提供安全及数据完整性。

    HTTP&HTTPS.png

    HTTP&HTTPS区别
    1、HTTPS协议需要到CA申请证书,需要交费
    2、HTTP是明文传输,HTTPS则是具有安全性的SSL加密传输
    3、HTTP和HTTPS使用的端口不一样,前者是80,后者是443
    4、HTTPS可进行加密传输,身份认证,比HTTP安全
    问题:
    实际开发中HTTPS可设置不验证证书,直接传输么?
    具体参见:https://lvwenhan.com/autolayout-club/478.html,了解iOS设置验证机制的API
    IP协议是网络七层协议的哪一层?
    网络层,如下图所示

    OSI参考模型.png 网络七层协议.png
    • TCP连接建立的三次握手与四次挥手
    TCP连接建立.png
    • SSL连接建立过程
    SSL连接建立过程.png

    SSL连接建立说明
    1、验证服务端证书数字摘要和服务证书解密之后的内容是否一致 篡改
    2、证书链 根证书---》浏览器&操作系统可信任证书列表中
    3、建立之初采用非对称加密保证安全 建立之后采用对称加密传递数据

    问题:TCP连接建立的三次握手与SSL连接建立的过程有啥关系?
    https和http都是在tcp层之上的,需要tcp三次握手之后才会开始,https是又包装了一个建立加密层的过程,建立完毕后,加密层里面跑的是http

    HTTPS中的对称加密


    对称加密.png

    HTTPS中的非对称加密


    非对称加密.png

    iOS客户端中证书设置

    实现NSURLSessionDelegate中如下代理

    - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
     completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler {
    }
    
    相关问题

    1、http性能优化
    https://www.jianshu.com/p/54e93303f0d7
    2、iOS网络缓存优化
    https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse%E7%9A%84%E7%BD%91%E7%BB%9C%E7%BC%93%E5%AD%98%E4%B8%8E%E7%A6%BB%E7%BA%BF%E5%AD%98%E5%82%A8/iOS%E7%BD%91%E7%BB%9C%E7%BC%93%E5%AD%98%E6%89%AB%E7%9B%B2%E7%AF%87.md

    参考链接:

    https://my.oschina.net/u/2340880/blog/807358
    https://my.oschina.net/u/2340880/blog/807863
    https://www.imooc.com/learn/969

    相关文章

      网友评论

          本文标题:HTTP协议

          本文链接:https://www.haomeiwen.com/subject/yoxbdftx.html