【问题标题】:Set Header Access-Control-Allow-Origin with python print使用 python print 设置标题 Access-Control-Allow-Origin
【发布时间】:2018-02-17 01:51:53
【问题描述】:

我在单个 python 文件中有一个传统的简约 api:

#!C:/Python26/python.exe
# -*- coding: UTF-8 -*-
import json

# code ...

print "Content-Type: application/json"
print
print json.dumps(features)

有没有办法以与内容类型相同的方式设置标题?寻找类似的东西:

print "Header: Access-Control-Allow-Origin *"

我想允许所有跨域传入请求,或将其限制为特定主机。

【问题讨论】:

    标签: python http request http-headers cors


    【解决方案1】:

    是的,但格式比你想象的要简单;你只需要这样做:

    print "Content-Type: application/json"
    print "Access-Control-Allow-Origin: *"
    print
    print json.dumps(features)
    

    基本上,您在引号内的内容不会再发生任何神奇的事情——它只是一个文字字符串,将作为响应的一部分按原样发送。

    换句话说,HTTP 响应的标头是纯文本,就像json.dumps(features) 放入响应正文的 JSON 数据一样。

    唯一的魔法很简单:你知道响应的哪一部分是标题,哪一部分是正文的方法是在正文开始之前有一个空行(额外的换行符);换行符之前的所有内容都被浏览器和其他 Web 客户端视为标头 - 因此您可以将任何您想要的内容放在那里,Web 服务器将按原样发送。

    【讨论】:

    • print 'HTTP/1.0 200 OK' 并为不检查is correct ? 的完整答案添加大小定义
    • @dsgdfg 是的,我不确定问题中的 sn-p 是否完整,或者可能被其他东西调用?我要解决的唯一部分就是如何添加一个标题的具体问题
    【解决方案2】:

    答案是您需要创建一个HTTP header,其中包含提到的“标头:Access-Control-Allow-Origin *”。

    之前建议的只是放置的解决方案

    print "Access-Control-Allow-Origin: *"
    

    在您的脚本中失败,因为它没有创建所需的 CR-LF 行结尾和两个连续的 CR-LF 来结束标题。还要注意打印命令的自动换行。这对我有用:

    print("Access-Control-Allow-Origin: *\r\n"),
    print('Content-Type: text/plain; charset=ISO-8859-1\r\n\r\n'),
    

    【讨论】:

    • 谢谢。您的回答为我节省了数小时的挫败感。我希望所有在这里回答问题的人都能尽心尽责地提供真正解决问题的答案,而不是“几乎”解决问题的答案。
    猜你喜欢
    • 2018-06-24
    • 2016-07-21
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2015-10-29
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多